Merge branch '1.11.x' for 1.11.0 release
Change-Id: I0c732310cdcf71b4ec2e7c41931bd1573d748de2
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
new file mode 100644
index 0000000..301c75d
--- /dev/null
+++ b/.settings/language.settings.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+
+ <configuration id="cdt.managedbuild.config.gnu.exe.debug.1483440177" name="Debug">
+
+ <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+
+ <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+
+ <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
+
+ <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+
+ <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1453519393265205801" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
+
+ <language-scope id="org.eclipse.cdt.core.gcc"/>
+
+ <language-scope id="org.eclipse.cdt.core.g++"/>
+
+ </provider>
+
+ </extension>
+
+ </configuration>
+
+ <configuration id="cdt.managedbuild.config.gnu.exe.release.2119644669" name="Release">
+
+ <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+
+ <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+
+ <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
+
+ <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+
+ <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1453519393265205801" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
+
+ <language-scope id="org.eclipse.cdt.core.gcc"/>
+
+ <language-scope id="org.eclipse.cdt.core.g++"/>
+
+ </provider>
+
+ </extension>
+
+ </configuration>
+
+</project>
diff --git a/4diac-forte.spec b/4diac-forte.spec
index 318c80c..ef4cd42 100644
--- a/4diac-forte.spec
+++ b/4diac-forte.spec
@@ -65,7 +65,7 @@
%systemd_postun_with_restart 4diac-forte.service
%files
-%license epl-v10.html
+%license epl-20.html
%{_bindir}/forte
%{_unitdir}/4diac-forte.service
%{_sysconfdir}/sysconfig/4diac-forte
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f451a5f..1ff6f14 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, AIT, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Michael Hofmann, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Thomas Strasser,
+# Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, AIT, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Michael Hofmann, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Thomas Strasser,
# * Martin Melik Merkumians
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
@@ -30,6 +31,8 @@
#include forte cmake-functions
INCLUDE(${FORTE_BUILDSUPPORT_DIRECTORY}/forte.cmake)
+forte_add_definition("-DFORTE_COMPILATION") #Allow to tell external modules/middleware that forte is being compiled, so special defines can be added
+
#######################################################################################
# Determine how to build FORTE
#######################################################################################
@@ -99,7 +102,9 @@
mark_as_advanced(FORTE_SUPPORT_BOOT_FILE)
if(FORTE_SUPPORT_BOOT_FILE)
forte_add_definition("-DFORTE_SUPPORT_BOOT_FILE")
- SET(FORTE_BootfileLocation "" CACHE STRING "Path to the bootfile, if same directory as forte executable leave empty, include trailing '/'!")
+ SET(FORTE_BootfileLocation "forte.fboot" CACHE STRING "Path to the bootfile")
+ forte_add_custom_configuration("#define FORTE_BOOT_FILE_LOCATION \"${FORTE_BootfileLocation}\"")
+ forte_add_custom_configuration("extern char* gCommandLineBootFile\;")
mark_as_advanced(FORTE_BootfileLocation)
endif(FORTE_SUPPORT_BOOT_FILE)
@@ -298,3 +303,7 @@
ADD_DEPENDENCIES (forte-shared forte_stringlist_externals)
endif(FORTE_BUILD_SHARED_LIBRARY)
endif(FORTE_LINKED_STRINGDICT)
+
+if(FORTE_COM_OPC_UA)
+ forte_opcua_configure()
+endif()
diff --git a/about.html b/about.html
index 36b1354..164f781 100644
--- a/about.html
+++ b/about.html
@@ -1,25 +1,36 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>About</title>
</head>
<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p><em>August 31, 2015</em></p>
-<h3>License</h3>
+ <h2>About This Content</h2>
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
+ <p>November 30, 2017</p>
+ <h3>License</h3>
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+ <p>
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
-</body></html>
\ No newline at end of file
+ <p>
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at <a
+ href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+ </p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/buildsupport/GCov.cmake b/buildsupport/GCov.cmake
index 5e125cf..4aa256f 100644
--- a/buildsupport/GCov.cmake
+++ b/buildsupport/GCov.cmake
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2014 ACIN and fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik-Merkumians, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2014 ACIN and fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
IF(NOT GCOV_PATH)
@@ -42,7 +43,7 @@
ADD_CUSTOM_TARGET(${targetName}
COMMAND ${LCOV_PATH} --directory . --zerocounters
- COMMAND ${testRunner} --log_format=HRF --log_level=test_suite --report_level=no ${ARGV3}
+ COMMAND ${testRunner} --verbose --log_format=HRF --log_level=test_suite --report_level=no ${ARGV3}
COMMAND ${LCOV_PATH} --directory . --capture --gcov-tool ${GCOV_PATH} --output-file ${outputName}.info --rc lcov_branch_coverage=1
COMMAND ${LCOV_PATH} --remove ${outputName}.info '*tests*' '/usr/*' '*boost*' --output-file ${outputName}.info.cleaned --rc lcov_branch_coverage=1
diff --git a/buildsupport/forte.cmake b/buildsupport/forte.cmake
index 8496389..fa48e6a 100644
--- a/buildsupport/forte.cmake
+++ b/buildsupport/forte.cmake
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 -2014 Profactor GmbH, ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Michael Hofmann, Alois Zoitl, Gerhard Ebenhofer, Matthias Plash, Patrick Smejkal - initial API and implementation and/or initial documentation
+# Copyright (c) 2010 -2014 Profactor GmbH, ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Michael Hofmann, Alois Zoitl, Gerhard Ebenhofer, Matthias Plash, Patrick Smejkal - initial API and implementation and/or initial documentation
# *******************************************************************************/
MACRO(forte_add_subdirectory DIRECTORY)
@@ -268,18 +269,76 @@
ENDFOREACH(ARG)
ENDFUNCTION(forte_add_post_build_command)
-## forte_add_test (test_name file_name will_fail)
-FUNCTION(forte_add_test arg1 arg2 arg3)
- ADD_TEST(NAME ${arg1} COMMAND $<TARGET_FILE:forte>)
- set_tests_properties ( ${arg1} PROPERTIES TIMEOUT ${arg3})
+## forte_add_systemtest_hard (test_name bootfile_name timeout)
+## Fails if any error has been logged
+FUNCTION(forte_add_systemtest_hard arg1 arg2 arg3)
FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${arg2}" file_str)
STRING(REPLACE "\\" "\\\\" file_str ${file_str})
- set_tests_properties (${arg1} PROPERTIES ENVIRONMENT "FORTE_BOOT_FILE=${file_str};FORTE_VCD_FILE=${arg1}.vcd")
- SET_TESTS_PROPERTIES(${arg1} PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T")
-ENDFUNCTION(forte_add_test)
+ ADD_TEST(NAME ${arg1} COMMAND $<TARGET_FILE:forte> -f ${file_str})
+ set_tests_properties (${arg1} PROPERTIES TIMEOUT ${arg3})
+ SET_TESTS_PROPERTIES(${arg1} PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T|==ERROR") #==ERROR is the output when memore leak happens
+ENDFUNCTION(forte_add_systemtest_hard)
-FUNCTION(forte_add_custom_configuration)
- FOREACH(ARG ${ARGV})
- SET_PROPERTY(GLOBAL APPEND_STRING PROPERTY FORTE_CUSTOM_CONFIGURATIONS_GLOBAL "${ARG}" \n\n)
- ENDFOREACH(ARG)
-ENDFUNCTION(forte_add_custom_configuration)
\ No newline at end of file
+## forte_add_systemtest_soft (test_name bootfile_name timeout)
+## Fails only by TEST_CONDITION FBs. This is for the case when a FB has to be tested in all
+## its cases, and some of the cases produce logging error
+FUNCTION(forte_add_systemtest_soft arg1 arg2 arg3)
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${arg2}" file_str)
+ STRING(REPLACE "\\" "\\\\" file_str ${file_str})
+ ADD_TEST(NAME ${arg1} COMMAND $<TARGET_FILE:forte> -f ${file_str})
+ set_tests_properties (${arg1} PROPERTIES TIMEOUT ${arg3})
+ SET_TESTS_PROPERTIES(${arg1} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_CONDITION_FAILED|==ERROR") #==ERROR is the output when memore leak happens
+ENDFUNCTION(forte_add_systemtest_soft)
+
+## forte_add_2dev_systemtests (test_name bootfile_name1 bootfile_name2 extraArgs1 extraArgs2 timeout)
+## Two fortes are executed
+## The bootfiles are added to the args. The first forte is executed in port 61499 and the second in 61500
+## if extraArgs are empty
+
+FUNCTION(forte_add_2dev_systemtests test_name bootfile_name1 bootfile_name2 arg1 arg2 timeout isHard)
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${bootfile_name1}" file_str1)
+ STRING(REPLACE "\\" "\\\\" file_str1 ${file_str1})
+
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${bootfile_name2}" file_str2)
+ STRING(REPLACE "\\" "\\\\" file_str2 ${file_str2})
+
+ FILE(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}/buildsupport/multi_test_2.cmake" scriptFile)
+ STRING(REPLACE "\\" "\\\\" scriptFile ${scriptFile})
+
+ if (arg1 STREQUAL "")
+ set(arg1 "-c localhost:61499")
+ endif()
+
+ if (arg2 STREQUAL "")
+ set(arg2 "-c localhost:61500")
+ endif()
+
+
+ ADD_TEST(NAME ${test_name} COMMAND ${CMAKE_COMMAND}
+ -DCMD=$<TARGET_FILE:forte>
+ -DBOOT1=${file_str1}
+ -DBOOT2=${file_str2}
+ -DARG1=${arg1}
+ -DARG2=${arg2}
+ -P ${scriptFile})
+
+ set_tests_properties (${test_name} PROPERTIES TIMEOUT ${timeout})
+
+ IF(${isHard})
+ SET_TESTS_PROPERTIES(${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T|==ERROR") #==ERROR is the output when memore leak happens
+ ELSE(${isHard})
+ SET_TESTS_PROPERTIES(${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_CONDITION_FAILED|==ERROR") #==ERROR is the output when memore leak happens
+ ENDIF(${isHard})
+ENDFUNCTION(forte_add_2dev_systemtests)
+
+FUNCTION(forte_add_env_file test file)
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${file}" file_str)
+ STRING(REPLACE "\\" "\\\\" file_str ${file_str})
+ set_tests_properties(${test} PROPERTIES ENVIRONMENT "FORTE_BOOT_FILE=${file_str}")
+ENDFUNCTION(forte_add_env_file)
+
+FUNCTION(forte_add_custom_configuration arg1)
+ SET_PROPERTY(GLOBAL APPEND_STRING PROPERTY FORTE_CUSTOM_CONFIGURATIONS_GLOBAL "${arg1}" \n\n)
+ENDFUNCTION(forte_add_custom_configuration)
+
+INCLUDE(${FORTE_BUILDSUPPORT_DIRECTORY}/opcua.cmake)
diff --git a/buildsupport/generate_init.cmake b/buildsupport/generate_init.cmake
index b47c7b5..1bbefd7 100644
--- a/buildsupport/generate_init.cmake
+++ b/buildsupport/generate_init.cmake
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 Profactor GmbH and ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Gerhard Ebenhofer and Ingo Hegny - initial API and implementation and/or initial documentation
+# Copyright (c) 2011 Profactor GmbH and ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Gerhard Ebenhofer and Ingo Hegny - initial API and implementation and/or initial documentation
# *******************************************************************************/
MESSAGE("Generate Initfunction")
diff --git a/buildsupport/generate_modules_cmake_file.cmake b/buildsupport/generate_modules_cmake_file.cmake
index 303ecc1..1b1740f 100644
--- a/buildsupport/generate_modules_cmake_file.cmake
+++ b/buildsupport/generate_modules_cmake_file.cmake
@@ -1,10 +1,11 @@
#################################################################################
# Copyright (c) 2011, 2016 Profactor GmbH, fortiss GmbH
#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Michael Hofmann - initial API and implementation and/or initial documentation
diff --git a/buildsupport/generate_stringlist.cmake b/buildsupport/generate_stringlist.cmake
index be452ed..87c758e 100644
--- a/buildsupport/generate_stringlist.cmake
+++ b/buildsupport/generate_stringlist.cmake
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Michael Hofmann, Alois Zoitl, Ingo Hegny, Gerhard Ebenhofer, Matthias Plasch - initial API and implementation and/or initial documentation
+# Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Michael Hofmann, Alois Zoitl, Ingo Hegny, Gerhard Ebenhofer, Matthias Plasch - initial API and implementation and/or initial documentation
# *******************************************************************************/
MESSAGE(Generate Stringlist)
diff --git a/buildsupport/generate_stringlist_include_files.cmake b/buildsupport/generate_stringlist_include_files.cmake
index a8697e5..c568974 100644
--- a/buildsupport/generate_stringlist_include_files.cmake
+++ b/buildsupport/generate_stringlist_include_files.cmake
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Michael Hofmann - initial API and implementation and/or initial documentation
+# Copyright (c) 2012 Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Michael Hofmann - initial API and implementation and/or initial documentation
# *******************************************************************************/
# Just the File name
diff --git a/buildsupport/multi_test_2.cmake b/buildsupport/multi_test_2.cmake
new file mode 100644
index 0000000..f0dab38
--- /dev/null
+++ b/buildsupport/multi_test_2.cmake
@@ -0,0 +1,14 @@
+string(REPLACE " " ";" ARGS_LIST ${ARG1})
+string(REPLACE " " ";" ARGS_LIST2 ${ARG2})
+
+list(APPEND ARGS_LIST "-f;${BOOT1}")
+list(APPEND ARGS_LIST2 "-f;${BOOT2}")
+
+execute_process(
+ COMMAND ${CMD} ${ARGS_LIST}
+ COMMAND ${CMD} ${ARGS_LIST2}
+ RESULT_VARIABLE result)
+
+if(${result})
+ message("ERROR: TEST_CONDITION_FAILED: The result of the pipe was ${result}")
+endif(${result})
\ No newline at end of file
diff --git a/buildsupport/opcua.cmake b/buildsupport/opcua.cmake
new file mode 100644
index 0000000..781359a
--- /dev/null
+++ b/buildsupport/opcua.cmake
@@ -0,0 +1,86 @@
+######### Nodesets functions ####################################################
+
+#Don't use this function. This is just a private one
+FUNCTION(forte_opcua_add_nodeset_general namespaceName directoryName)
+ forte_add_sourcefile_with_path_hc(${directoryName}/ua_namespace_${namespaceName})
+ set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_NODESETS_LIST ${namespaceName})
+ENDFUNCTION()
+
+#Use this function for nodesets which have a file called ua_types_NAMESPACE_generated.c file (DI for example). directoryName should point to the directory where the files are
+FUNCTION(forte_opcua_add_nodeset namespaceName directoryName)
+ forte_add_sourcefile_with_path_hc(${directoryName}/ua_types_${namespaceName}_generated)
+ forte_opcua_add_nodeset_general(${namespaceName} ${directoryName})
+ENDFUNCTION()
+
+#Use this function for nodesets which DON'T have a file called ua_types_NAMESPACE_generated.c file (PLC for example). directoryName should point to the directory where the files are
+FUNCTION(forte_opcua_add_nodeset_without_generated namespaceName directoryName)
+ forte_opcua_add_nodeset_general(${namespaceName} ${directoryName})
+ forte_add_include_directories(${directoryName})
+ENDFUNCTION()
+
+FUNCTION(forte_opcua_configure)
+ forte_opcua_configure_nodesets()
+ forte_opcua_configure_external_types()
+ENDFUNCTION()
+
+FUNCTION(forte_opcua_configure_nodesets)
+ SET(FORTE_OPCUA_NODESETS_INCLUDE "")
+ SET(FORTE_OPCUA_NODESETS_CODE "")
+
+ GET_PROPERTY(FORTE_OPCUA_NODESETS GLOBAL PROPERTY FORTE_OPCUA_NODESETS_LIST)
+ IF(NOT "${FORTE_OPCUA_NODESETS}" STREQUAL "")
+ LIST(LENGTH FORTE_OPCUA_NODESETS FORTE_OPCUA_NODESETS_LEN)
+ math(EXPR FORTE_OPCUA_NODESETS_LEN ${FORTE_OPCUA_NODESETS_LEN}-1)
+ FOREACH(POS RANGE ${FORTE_OPCUA_NODESETS_LEN})
+ LIST(GET FORTE_OPCUA_NODESETS ${POS} FORTE_OPCUA_NODESET)
+ SET(FORTE_OPCUA_NODESETS_INCLUDE "${FORTE_OPCUA_NODESETS_INCLUDE} #include \"ua_namespace_${FORTE_OPCUA_NODESET}.h\"\n")
+ SET(FORTE_OPCUA_NODESETS_CODE "${FORTE_OPCUA_NODESETS_CODE} if(UA_STATUSCODE_GOOD != ua_namespace_${FORTE_OPCUA_NODESET}(&paUaServer)) return false;\n")
+ ENDFOREACH(POS)
+ ELSE()
+ SET(FORTE_OPCUA_NODESETS_CODE "(void)paUaServer;\n") #to silence warning
+ ENDIF()
+
+ set(FORTE_OPCUA_MODULE_DIR "src/modules/opc_ua")
+
+ CONFIGURE_FILE(${FORTE_OPCUA_MODULE_DIR}/opcua_nodesets.cpp.in ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_nodesets_new.cpp)
+ forte_replacefile_if_changed(${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_nodesets_new.cpp ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_nodesets.cpp)
+ file(REMOVE ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_nodesets_new.cpp)
+ENDFUNCTION()
+
+FUNCTION(forte_opcua_configure_external_types)
+ SET(FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE "")
+ SET(FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT "")
+
+ GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_FILES GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_FILES_LIST)
+
+ IF(NOT "${FORTE_OPCUA_EXTERNAL_TYPES_FILES}" STREQUAL "")
+ GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_NAME GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAME_LIST)
+ GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_OPCUA GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_OPCUA_LIST)
+ LIST(LENGTH FORTE_OPCUA_EXTERNAL_TYPES_FILES FORTE_OPCUA_TYPES_LEN)
+ math(EXPR FORTE_OPCUA_TYPES_LEN ${FORTE_OPCUA_TYPES_LEN}-1)
+ FOREACH(POS RANGE ${FORTE_OPCUA_TYPES_LEN})
+ LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_FILES ${POS} FORTE_OPCUA_EXTERNAL_TYPES_FILES_ITERATOR)
+ LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_NAME ${POS} FORTE_OPCUA_EXTERNAL_TYPES_NAME_ITERATOR)
+ LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_OPCUA ${POS} FORTE_OPCUA_EXTERNAL_TYPES_OPCUA_ITERATOR)
+
+ SET(FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE "${FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE}#include \"${FORTE_OPCUA_EXTERNAL_TYPES_FILES_ITERATOR}.h\"\n")
+ SET(FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT "${FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT} UA_TypeConvert_external(&UA_TYPES[${FORTE_OPCUA_EXTERNAL_TYPES_OPCUA_ITERATOR}], g_nStringId${FORTE_OPCUA_EXTERNAL_TYPES_NAME_ITERATOR}),\n")
+ ENDFOREACH(POS)
+ ELSE()
+ #SET(FORTE_OPCUA_NODESETS_CODE "(void)paUaServer;\n") #to silence warning
+ ENDIF()
+
+ set(FORTE_OPCUA_MODULE_DIR "src/modules/opc_ua")
+
+ CONFIGURE_FILE(${FORTE_OPCUA_MODULE_DIR}/opcua_types.cpp.in ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_types_new.cpp)
+ forte_replacefile_if_changed(${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_types_new.cpp ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_types.cpp)
+ file(REMOVE ${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_types_new.cpp)
+ENDFUNCTION()
+
+FUNCTION(forte_opcua_add_type fileName forteName opcuaType)
+ set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_FILES_LIST ${fileName})
+ set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAME_LIST ${forteName})
+ set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_OPCUA_LIST ${opcuaType})
+ENDFUNCTION()
+
+#################################################################################
\ No newline at end of file
diff --git a/buildsupport/wago_pfc200/forte_wago.in b/buildsupport/wago_pfc200/forte_wago.in
index 7373bd0..5e1b0d7 100644
--- a/buildsupport/wago_pfc200/forte_wago.in
+++ b/buildsupport/wago_pfc200/forte_wago.in
@@ -1,9 +1,10 @@
#############################################################################
# Copyright (c) 2016 fortiss GmbH
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Milan Vathoopan - initial API and implementation and/or initial documentation
diff --git a/buildsupport/wago_pfc200/forte_wago.make b/buildsupport/wago_pfc200/forte_wago.make
index 3198b98..229fad6 100644
--- a/buildsupport/wago_pfc200/forte_wago.make
+++ b/buildsupport/wago_pfc200/forte_wago.make
@@ -1,9 +1,10 @@
#############################################################################
# Copyright (c) 2016 fortiss GmbH
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Milan Vathoopan - initial API and implementation and/or initial documentation
diff --git a/doc/coding_rules/src/forte_coding_rules.tex b/doc/coding_rules/src/forte_coding_rules.tex
index 42bcfcf..530e27f 100644
--- a/doc/coding_rules/src/forte_coding_rules.tex
+++ b/doc/coding_rules/src/forte_coding_rules.tex
@@ -1,13 +1,16 @@
-%*******************************************************************************
-% * Copyright (c) 2007 - 2015 Profactor GmbH, ACIN, fortiss GmbH
-% * All rights reserved. This program and the accompanying materials
-% * are made available under the terms of the Eclipse Public License v1.0
-% * which accompanies this distribution, and is available at
-% * http://www.eclipse.org/legal/epl-v10.html
-% *
-% * Contributors:
-% * Gerhard Ebenhofer, Thomas Strasser, Alois Zoitl - initial API and implementation and/or initial documentation
-% *******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright (c) 2007 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+%
+% This program and the accompanying materials are made available under the
+% terms of the Eclipse Public License 2.0 which is available at
+% http://www.eclipse.org/legal/epl-2.0.
+%
+% SPDX-License-Identifier: EPL-2.0
+%
+% Contributors:
+% Gerhard Ebenhofer, Thomas Strasser, Alois Zoitl
+% - initial API and implementation and/or initial documentation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%/
\documentclass[final,a4paper,10pt, oneside]{article}
\usepackage[latin1]{inputenc}
@@ -80,10 +83,11 @@
\begin{lstlisting}[frame=trbl]{}
/*******************************************************************************
* Copyright (c) 2007 4DIAC - consortium.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*******************************************************************************
\end{lstlisting}
An example for the file header used in an full header file is given in Appendix~\ref{subsec:FileHeader} of this document.
@@ -312,10 +316,11 @@
\begin{lstlisting}[frame=trbl]{}
/*******************************************************************************
* Copyright (c) 2007 4DIAC - consortium.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*******************************************************************************
#ifndef _FILENAME_H_
#define _FILENAME_H_
diff --git a/doc/ev3Params.md b/doc/ev3Params.md
deleted file mode 100644
index 97b643e..0000000
--- a/doc/ev3Params.md
+++ /dev/null
@@ -1,268 +0,0 @@
-# Parameters for the ev3Dev interface
-
-## Standard access
-
-### Transparent access
-
-The standard access refer to the access through well defined IO blocks, that allow transparency in the access of I/O in different platforms. Each block supports different parameters. The blocks used to control the I/O are name two capital letters.
-
-1. The first letter indicates the direction:
-
- * Q: output
- * I: input
-
-2. The second letter indicates the size of it:
-
- * X: boolean
- * W: Word (16 bits)
- * D: Double (32 bits)
-
-So, for example an boolean input is read using the functional block IX. The output word, for example the PWM value of a motor is controlled with a QW block. Not all sizes are implemented in all platforms.
-
-### Parameters for the EV3
-
-The parameters for the EV3 were desgined for general use, and extension of them is easy to achieve. The format of the parameters follow 2 important rules:
-
-1. The only capital letters allowed are the A,B,C,D when used to define the output ports (outA, outB, outC, outD).
-
-2. The parameters are given in three parts separated by points:
-
- > port.typeOfIO.specific
-
- 1.port
-
- The first part of the parameter specifies the port of the Input or Output. For the EV3, the possible values are [in1 | in2 | in3 | in4 | outA | outB | outC | outD | emb]. The first eight are directly related to the actual ports of the EV3. The 'emb' port refers to anything that can be managed in the EV3 but not in the I/O ports, until now the leds and buttons, but in the future the screen and speaker would also be reference with the 'emb' port.
-
- 2. typeOfIO
-
- The second part, specifies what is actually connected to the specified port. The possible values are [sensor | sensorw | button | led | motor]. The difference between 'sensor' and 'sensorw' is that 'sensor' is used for boolean sensors, and 'sensorw' for sensors which values are words (16 bits). The 'led' and 'button' are used to control the embedded leds and buttons of the EV3. 'motor' is used for connected motors in any of the outputs.
-
- It must be clear that not all of the types can be used with any port. For example a led is only an output, so if used with a input, for example IX it won't intialize. Also, if used to control as a word QW, it won't initialize either.
-
- 3. specific
-
- As its name says, this third parameter has no general form, and can also be formed of other several parameters (as in case of the led). Depending of the second parameter, the allowed values for this one are different, and it will be seen in the follow section.
-
-#### Specific parameters
-
-1. led:
-
- * right.red (output only)
- * right.green (output only)
- * left.red (output only)
- * left.green (output only)
-
- Each specific is used to control each one of the four leds available. The orange led doesn't exist, but is the sum of red + green, so in order to turn on an orange light of the left for example, both the green and red of the left must be turned on.
-
- Limitation: 'led' must be used with QX and with the 'emb' port.
-
- Example:
-
- > emb.led.right.red
-
-2. button
-
- * up (input only)
- * down (input only)
- * left (input only)
- * right (input only)
- * enter (input only)
- * backspace (input only)
-
- Reads the buttons of the EV3.
-
- Limitation: 'button' must be used with IX and with the 'emb' port.
-
- Example:
-
- > emb.button.enter
-
-3. sensorw
-
- * [0-N] (input only)
- * mode (input or output)
-
- The sensorw is used with sensors that read a word value isntead of a boolean and normally are more complex than regular touch sensors (boolean). Each sensor specifies how it retrieves the data, how many values and the format of it. Specifications of the supported sensors by the ev3dev are listed [here](http://www.ev3dev.org/docs/sensors/).
-
- Each one of the sensors' values is stored in a different file in the EV3. The specific [0-N] determines which file it is. For example the GYRO sensor can show the angle and the rotation speed. The values are store in value0 and value1 files, so to access just the rotation speed, the '1' specific must be used. The actual value must be checked in the link above.
-
- The 'mode' specific is used to change the mode of the sensor according to its specification. As an input, mode will retrieve the mode in which the sensor is working, and as output, the mode will be changed. The mode are mirrored using a 0 index according to the specification of the sensor.
-
- Limitation: sensorw cannot be used with boolean blocks (QX or IX). It must be used with an in[1-4] port, but is not restricted to input or output blocks.
-
- Limitation: [0-N] can be used only as input, and the number shouldn't be greater than the allowed by the sensor in the mode that's working at the moment of initialization.
-
- Examples: Let's see an example of using the GYRO sensor specified [here](http://www.ev3dev.org/docs/sensors/lego-ev3-gyro-sensor/). The GYRO works in GYRO-ANG by default, showing only one value, then the only possible parameter is:
-
- > in1.sensorw.0 (IW)
-
- If a 1 instead of a 0 were used, the initialization would have failed. If first the sensor's mode is changed using a QW with parameter
-
- > in1.sensorw.mode (QW)
-
- and writing a value 3 (0 index mode, see link of the sensor above), the sensor's mode will change to GYRO-G&A wich shows 2 values, angle and rotation speed. After changing the mode, two IW blocks with parameters
-
- > in1.sensorw.0 (IW)
- > in1.sensorw.1 (IW)
-
- will retrieve the both values. Remember, to get the rotation speed, the second block must be initialized AFTER the mode has been changed. Using the 'mode' specific with a IW will retrieve the mode as 0 index.
-
-4. sensor
-
- *[0-N] (input only)
-
- 'sensor' specific is a simpler specific of the 'sensorw'. It doesn't allow mode, and even though the value is always stored in '0', the '0' specific must be used for two mainly reasons: 1. To have a standarized way of showing the parameters, and 2. to avoid problems in the future where a new sensor is stored in '1' instead of '0'.
-
- Limitations: 'sensor' must be used with QX and with an in[1-4] port.
-
- Example:
-
- > in2.sensor.0
-
-5. Motor
-
- * enable (output boolean only)
- * reset (output boolean only)
- * stop (output word only)
- * pwm (input word or output word only)
- * position (input word only)
- * speed (input word only)
- * rot (input word only)
-
- The 'enable' turns ON the motor with TRUE value and turn OFF with a FALSE value.
-
- The 'reset' zeroes the position, pwm and speed values, and turn off the motor with a true value. A false value has no effect.
-
- The 'stop' specific must not be confused with stoping the motor, because it specifies the way the motor behaves when PWM is zero according to the value written:
-
- * 0: [coast]: Removes power from the motor. The motor will freely coast to a stop.
-
- * 1: [brake]: Removes power from the motor and creates a passive electrical load. This is usually done by shorting the motor terminals together. This load will absorb the energy from the rotation of the motors and cause the motor to stop more quickly than coasting.
-
- * 3: [hold]: Causes the motor to actively try to hold the current position. If an external force tries to turn the motor, the motor will “push back” to maintain its position.
-
- The 'pwm' reads the current pwm of the motor or writes the desired pwm for the motor.
-
- The 'position' reads the current position of the motor. In how many steps a rotation is divided, can be read from using the 'rot' specific.
-
- The 'speed' reads the current speed in positions by second.
-
- The 'rot' reads the motor specication of how many steps are in one turn of the motor. This can be read from the specifications of the motor normally and it's not necessary to add the block in an application just to read this information.
-
- Examples:
-
- > outB.motor.enable (QX)
-
- > outB.motor.pwm (QW writes the desired pwm, IW reads the actual pwm)
-
- > outB.motor.position (IW reads actual position)
-
-## Blocks cheatsheet
-
-1. IX: Boolean Input
-
- * Sensor connected to an input port:
- > in[X].sensor.[Y]
-
- where X is the number of the input in the EV3 (1-4) and Y is the value number where to read from according to the sensor. Read the specification of the sensor to be sure. Start trying from 0 if no information is available.
-
- * One of the 6 buttons of the EV3:
- > emb.button.[up | down | left | right | enter | backspace]
-
- Only one of the inputs can be selected for each IX. All parameters must be in lower case.
-
-2. QX: Boolean Output
-
- * Led of the EV3:
- > emb.led.[right | left].[red | green]
-
- The orange led does not exist, but is the sum of green + red.
-
- * Motor ON/OFF
- > out[X].motor.enable
-
- Where X is the output capital letter of the EV3 (A-D, in uppercase). A true value turns the motor on, and a false value turns the motor off.
-
- * Motor Reset
- > out[X].motor.reset
-
- Where X is the output capital letter of the EV3 (A-D, in uppercase). A true value resets all of the motor parameter attributes to their default values. This will also have the effect of stopping the motor.
-
-3. IW: Word Input (16 bits)
-
- * Sensor value
- > in[X].sensorw.[Y]
-
- where X is the number of the input in the EV3 (1-4) and Y is the value number where to read from according to the sensor. Read the specification of the sensor to be sure. Start trying from 0 if no information is available.
-
- * Sensor mode
- > in[X].sensorw.mode
-
- where X is the number of the input in the EV3 (1-4). The read value is an index number according to the list of modes of the sensor.
-
- * Current duty cycle from a motor (pwm)
- > out[X].motor.pwm
-
- Where X is the output letter of the EV3 (A-D, in uppercase). The value is between -100 and 100. It might seem confusing reading an input from an output but even though the signal is from an output, it is an input to the system.
-
- * Current speed of the motor
- > out[X].motor.speed
-
- Where X is the output letter of the EV3 (A-D, in uppercase). It reads the velocity in steps per second
-
- * Number of steps in each turn
- > out[X].motor.rot
-
- Where X is the output letter of the EV3 (A-D, in uppercase).
-
- * Current position of the motor
- > out[X].motor.position
-
- Where X is the output letter of the EV3 (A-D, in uppercase).
-
-4. QW: word output (16 bits) [CHECK FORMAT]
-
- * Sensor mode
- > in[X].sensorw.mode
-
- where X is the number of the input in the EV3 (1-4). The value to be written should be the index number according to the list of modes of the sensor.
-
- * Desired duty cycle for a motor (pwm)
- > out[X].motor.pwm
-
- Where X is the output letter of the EV3 (A-D, in uppercase). The value range is between -100 and 100.
-
- * Desired behaviour when stop
- > out[X].motor.stop
-
- Where X is the output letter of the EV3 (A-D, in uppercase). This parameter is used to specify the behaviour of the motor when stoping. Possible values are 0, 1 and 2:
-
- * 0: [coast]: Removes power from the motor. The motor will freely coast to a stop.
- * 1: [brake]: Removes power from the motor and creates a passive electrical load. This is usually done by shorting the motor terminals together. This load will absorb the energy from the rotation of the motors and cause the motor to stop more quickly than coasting.
- * 3: [hold]: Causes the motor to actively try to hold the current position. If an external force tries to turn the motor, the motor will “push back” to maintain its position.
-
-5. ID: Double word input (32 bits) [TO BE IMPLEMENTED]
-
-
-
-## Custom access
-
-The custom access allows the user to access part of the system that are not implemented in the standard access. Care must be taken, since critical part of the system might be accessed. For each block, the specification of the new inputs and outputs are given.
-
-1. fileWriter: Block to write to any file in the system
-
- * FILE_NAME [input]: absolut path of the file.
- > Example: /sys/class/tacho-motor/motor1/command
-
- * S1 [input]: String to write to the file
- > Example: run-direct
-
-2. fileReader: Block to read from any file in the system [TO BE IMPLEMENTED]
-
- * FILE_NAME [input]: absolut path of the file.
- > Example: /sys/class/tacho-motor/motor1/duty_cycle
-
- * S1 [output]: String read from the file
- > Example: 58
-
-
diff --git a/epl-2.0.html b/epl-2.0.html
new file mode 100644
index 0000000..6e0b7e3
--- /dev/null
+++ b/epl-2.0.html
@@ -0,0 +1,684 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- Google Tag Manager -->
+<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
+j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
+'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+})(window,document,'script','dataLayer','GTM-5WLCZXC');</script>
+<!-- End Google Tag Manager --> <meta name="author" content="Wayne Beaton"/>
+ <meta name="keywords" content="eclipse,project,plug-ins,plugins,java,ide,swt,refactoring,free java ide,tools,platform,open source,development environment,development,ide"/>
+ <link rel="shortcut icon" href="/eclipse.org-common/themes/solstice/public/images/favicon.ico"/>
+ <title>Eclipse Public License 2.0 | The Eclipse Foundation</title>
+ <link rel="stylesheet" href="/eclipse.org-common/themes/solstice/public/stylesheets/quicksilver.min.css?v1.7"/>
+<meta name="description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>
+<meta property="og:description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>
+<meta property="og:image" content="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-foundation-200x200.png"/>
+<meta property="og:title" content="Eclipse Public License 2.0 | The Eclipse Foundation"/>
+<meta property="og:image:width" content="200"/>
+<meta property="og:image:height" content="200"/>
+<meta itemprop="name" content="Eclipse Public License 2.0 | The Eclipse Foundation"/>
+<meta itemprop="description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>
+<meta itemprop="image" content="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-foundation-400x400.png"/>
+<meta name="twitter:site" content="@EclipseFdn"/>
+<meta name="twitter:card" content="summary"/>
+<meta name="twitter:title" content="Eclipse Public License 2.0 | The Eclipse Foundation"/>
+<meta name="twitter:url" content="https://www.eclipse.org/legal/epl-2.0/"/>
+<meta name="twitter:description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>
+<meta name="twitter:image" content="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-foundation-400x400.png"/>
+<link href="//fonts.googleapis.com/css?family=Libre+Franklin:400,700,300,600,100" rel="stylesheet" type="text/css"/>
+ <script> var eclipse_org_common = {"settings":{"cookies_class":{"name":"eclipse_settings","enabled":1}}}</script> </head>
+ <body id="body_solstice">
+ <!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5WLCZXC"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) --> <a class="sr-only" href="#content">Skip to main content</a>
+ <header class="header-wrapper" id="header-wrapper">
+ <div class="clearfix toolbar-container-wrapper">
+ <div class="container">
+ <div class="text-right toolbar-row row hidden-print">
+ <div class="col-md-24 row-toolbar-col">
+ <ul class="list-inline">
+
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Welcome, Alois Zoitl <span class="caret"></span></a>
+ <ul class="dropdown-menu toolbar-dropdown-menu" aria-labelledby="dropdownMenu1">
+ <li><a href="https://www.eclipse.org/user/azoitl"><i class="fa fa-user"></i> View Profile</a></li>
+ <li><a href="https://accounts.eclipse.org/user/edit" class="" data-tab-destination="tab-profile"><i class="fa fa-edit"></i> Edit Profile</a></li>
+ <li class="divider"></li>
+ <li><a class="toolbar-manage-cookies dropdown-toggle"><i class="fa fa-wrench"></i> Manage Cookies</a></li>
+ <li class="divider"></li><li><a href="https://accounts.eclipse.org/user/logout"><i class="fa fa-sign-out"></i> Log out</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+
+ </div>
+ </div>
+ </div> <div class="container">
+ <div class="row" id="header-row">
+ <div class="col-sm-5 col-md-4" id="header-left">
+ <div class="wrapper-logo-default"><a href="https://www.eclipse.org/"><img class="logo-eclipse-default hidden-xs" alt="Eclipse.org logo" width="160" src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-foundation-white-orange.svg"/></a></div>
+ </div> <div class="col-sm-19 col-md-20 margin-top-10" id="main-menu-wrapper">
+ <div class="float-right hidden-xs" id="btn-call-for-action"><a href="/downloads/" class="btn btn-huge btn-warning"><i class="fa fa-download"></i> Download</a></div> <div class="navbar yamm float-sm-right" id="main-menu">
+ <div class="navbar-collapse collapse" id="navbar-main-menu">
+ <ul class="nav navbar-nav">
+ <li><a href="https://www.eclipse.org/membership/" target="_self">Members</a></li><li><a href="https://www.eclipse.org/org/workinggroups/" target="_self">Working Groups</a></li><li><a href="https://www.eclipse.org/projects/" target="_self">Projects</a></li> <li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Community <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li><li><a href="https://blogs.eclipse.org">Blogs</a></li></ul></li><li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Participate <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://www.eclipse.org/forums/">Forums</a></li><li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://www.eclipse.org/org/research/">Research</a></li></ul></li><li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Eclipse IDE <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://www.eclipse.org/downloads">Download</a></li><li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li><li><a href="https://help.eclipse.org">Documentation</a></li><li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li><li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li><li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li><li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li></ul></li> <!-- More -->
+ <li class="dropdown eclipse-more hidden-xs">
+ <a data-toggle="dropdown" class="dropdown-toggle" role="button">More<b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li>
+ <!-- Content container to add padding -->
+ <div class="yamm-content">
+ <div class="row">
+ <ul class="col-sm-8 list-unstyled"><li><p><strong>Community</strong></p></li><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li><li><a href="https://blogs.eclipse.org">Blogs</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Participate</strong></p></li><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://www.eclipse.org/forums/">Forums</a></li><li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://www.eclipse.org/org/research/">Research</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Eclipse IDE</strong></p></li><li><a href="https://www.eclipse.org/downloads">Download</a></li><li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li><li><a href="https://help.eclipse.org">Documentation</a></li><li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li><li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li><li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li><li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li></ul> </div>
+ </div>
+ </li>
+ </ul>
+ </li>
+ <li class="dropdown eclipse-more main-menu-search">
+ <a data-toggle="dropdown" class="dropdown-toggle" role="button"><i class="fa fa-search"></i> <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li>
+ <!-- Content container to add padding -->
+ <div class="yamm-content">
+ <div class="row">
+ <div class="col-sm-24">
+ <p>Search</p>
+ <div class="row"><div class="col-md-24">
+ <div id="custom-search-form" class="reset-box-sizing">
+ <script>
+ (function() {
+ var cx = '011805775785170369411:p3ec0igo0qq';
+ var gcse = document.createElement('script');
+ gcse.type = 'text/javascript';
+ gcse.async = true;
+ gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
+ '//cse.google.com/cse.js?cx=' + cx;
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(gcse, s);
+ })();
+ </script>
+ <gcse:searchbox-only gname="main" resultsUrl="https://www.eclipse.org/home/search.php"></gcse:searchbox-only>
+ </div></div></div>
+ </div>
+ </div>
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-main-menu">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <div class="wrapper-logo-mobile"><a class="navbar-brand visible-xs" href="https://www.eclipse.org/"><img class="logo-eclipse-default-mobile img-responsive" alt="Eclipse.org logo" width="160" src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-foundation-white-orange.svg"/></a></div> </div>
+ </div>
+</div>
+ </div>
+ </div>
+ </header>
+ <section class="default-breadcrumbs hidden-print breadcrumbs-default-margin" id="breadcrumb">
+ <div class="container">
+ <h3 class="sr-only">Breadcrumbs</h3>
+ <div class="row">
+ <div class="col-sm-24"><ol class="breadcrumb"><li><a href="/">Home</a></li><li><a href="https://www.eclipse.org/legal">Legal</a></li><li class="active">Eclipse Public License 2.0</li></ol></div>
+ </div>
+ </div>
+ </section> <!-- /#breadcrumb -->
+ <main>
+
+ <div class="novaContent container" id="novaContent">
+ <div class="row"><div class="col-md-18"><style type="text/css">
+ #midcolumn h2{
+ font-size:18px;
+ }
+ #midcolumn ul,
+ #midcolumn ol{
+ list-style-type:none;
+ }
+</style>
+<div id="maincontent">
+ <div id="midcolumn">
+
+ <h1>Eclipse Public License - v 2.0</h1>
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+ </p>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+<li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+<li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ “originates” from a Contributor if it was added to the Program by such
+ Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+<p>“Contributor” means any person or entity that Distributes the Program.</p>
+ <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+ </p>
+ <p>“Program” means the Contributions Distributed in accordance with this
+ Agreement.
+ </p>
+ <p>“Recipient” means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+<li>a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+ </li>
+ <li>b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if,
+ at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+ </li>
+ <li>c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the rights
+ and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed,
+ if any. For example, if a third party patent license is required to
+ allow Recipient to Distribute the Program, it is Recipient's
+ responsibility to acquire that license before distributing the Program.
+ </li>
+ <li>d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+<h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+<li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+<li>i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including warranties
+ or conditions of title and non-infringement, and implied warranties
+ or conditions of merchantability and fitness for a particular purpose;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+</li>
+ </ul>
+<p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+<li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+<p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <p>Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program, the
+ Contributor who includes the Program in a commercial product offering should
+ do so in a manner which does not create potential liability for other
+ Contributors. Therefore, if a Contributor includes the Program in a
+ commercial product offering, such Contributor (“Commercial Contributor”)
+ hereby agrees to defend and indemnify every other Contributor
+ (“Indemnified Contributor”) against any losses, damages and costs
+ (collectively “Losses”) arising from claims, lawsuits and other legal actions
+ brought by a third party against the Indemnified Contributor to the extent
+ caused by the acts or omissions of such Commercial Contributor in connection
+ with its distribution of the Program in a commercial product offering.
+ The obligations in this section do not apply to any claims or Losses relating
+ to any actual or alleged intellectual property infringement. In order to
+ qualify, an Indemnified Contributor must: a) promptly notify the
+ Commercial Contributor in writing of such claim, and b) allow the Commercial
+ Contributor to control, and cooperate with the Commercial Contributor in,
+ the defense and any related settlement negotiations. The Indemnified
+ Contributor may participate in any such claim at its own expense.
+ </p>
+ <p>For example, a Contributor might include the Program
+ in a commercial product offering, Product X. That Contributor is then a
+ Commercial Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance claims
+ and warranties are such Commercial Contributor's responsibility alone.
+ Under this section, the Commercial Contributor would have to defend claims
+ against the other Contributors related to those performance claims and
+ warranties, and if a court requires any other Contributor to pay any damages
+ as a result, the Commercial Contributor must pay those damages.
+ </p>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+ WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+ solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its
+ exercise of rights under this Agreement, including but not limited to the
+ risks and costs of program errors, compliance with applicable laws, damage
+ to or loss of data, programs or equipment, and unavailability or
+ interruption of operations.
+ </p>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+ LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ </p>
+ <h2 id="general">7. GENERAL</h2>
+ <p>If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+ </p>
+ <p>If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+ </p>
+ <p>All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program
+ as soon as reasonably practicable. However, Recipient's obligations under
+ this Agreement and any licenses granted by Recipient relating to the
+ Program shall continue and survive.
+ </p>
+ <p>Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and may
+ only be modified in the following manner. The Agreement Steward reserves
+ the right to publish new versions (including revisions) of this Agreement
+ from time to time. No one other than the Agreement Steward has the right
+ to modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be Distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to Distribute
+ the Program (including its Contributions) under the new version.
+ </p>
+ <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </div>
+ <div id="rightcolumn">
+ <div class="sideitem">
+ <h6>Eclipse Projects that Use EPL 2.0</h6>
+ <ul>
+ <li><a href="https://projects.eclipse.org/projects/ecd">Eclipse Cloud Development</a></li><li><a href="https://projects.eclipse.org/projects/ecd.che.che4z">Eclipse Che4z</a></li><li><a href="https://projects.eclipse.org/projects/ecd.codewind">Eclipse Codewind</a></li><li><a href="https://projects.eclipse.org/projects/ecd.glsp">Eclipse GLSP</a></li><li><a href="https://projects.eclipse.org/projects/ecd.sprotty">Eclipse Sprotty</a></li><li><a href="https://projects.eclipse.org/projects/ecd.theia">Eclipse Theia</a></li><li><a href="https://projects.eclipse.org/projects/eclipse">Eclipse Project</a></li><li><a href="https://projects.eclipse.org/projects/eclipse.equinox">Eclipse Equinox</a></li><li><a href="https://projects.eclipse.org/projects/eclipse.jdt">Eclipse Java development tools</a></li><li><a href="https://projects.eclipse.org/projects/eclipse.pde">Eclipse Plug-in Development Environment</a></li><li><a href="https://projects.eclipse.org/projects/eclipse.platform">Eclipse Platform</a></li><li><a href="https://projects.eclipse.org/projects/ee4j">Eclipse Enterprise for Java</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.ca">Eclipse Jakarta Annotations</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.cu">Eclipse Jakarta Concurrency</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.eclipselink">EclipseLink</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.ejb">Eclipse Jakarta Enterprise Beans</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.el">Eclipse Jakarta Expression Language</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.es">Eclipse Jakarta Security</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.faces">Eclipse Jakarta Server Faces</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.glassfish">Eclipse GlassFish</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.grizzly">Eclipse Grizzly</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.interceptors">Eclipse Jakarta Interceptors</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jacc">Eclipse Jakarta Authorization</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jaf">Eclipse Jakarta Activation</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jakartaee-platform">Eclipse Jakarta EE Platform</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jakartaee-stable">Eclipse Jakarta Stable APIs</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jakartaee-tck">Eclipse Jakarta EE TCK</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jaspic">Eclipse Jakarta Authentication</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jaxrs">Eclipse Jakarta RESTful Web Services</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jca">Eclipse Jakarta Connectors</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jersey">Eclipse Jersey</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jms">Eclipse Jakarta Messaging</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jpa">Eclipse Jakarta Persistence</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jsonb">Eclipse Jakarta JSON Binding</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jsonp">Eclipse Jakarta JSON Processing</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jsp">Eclipse Jakarta Server Pages</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jstl">Eclipse Jakarta Standard Tag Library</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.jta">Eclipse Jakarta Transactions</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.mail">Eclipse Jakarta Mail</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.mojarra">Eclipse Mojarra</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.nosql">Eclipse Jakarta NoSQL</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.openmq">Eclipse OpenMQ</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.orb">Eclipse ORB</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.servlet">Eclipse Jakarta Servlet</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.soteria">Eclipse Soteria</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.tyrus">Eclipse Tyrus</a></li><li><a href="https://projects.eclipse.org/projects/ee4j.websocket">Eclipse Jakarta WebSocket</a></li><li><a href="https://projects.eclipse.org/projects/iot">Eclipse IoT</a></li><li><a href="https://projects.eclipse.org/projects/iot.cyclonedds">Eclipse Cyclone DDS</a></li><li><a href="https://projects.eclipse.org/projects/iot.ditto">Eclipse Ditto</a></li><li><a href="https://projects.eclipse.org/projects/iot.fog05">Eclipse fog05</a></li><li><a href="https://projects.eclipse.org/projects/iot.hip">Eclipse project_hip [archived]</a></li><li><a href="https://projects.eclipse.org/projects/iot.hono">Eclipse Hono</a></li><li><a href="https://projects.eclipse.org/projects/iot.iofog">Eclipse ioFog</a></li><li><a href="https://projects.eclipse.org/projects/iot.keyple">Eclipse Keyple</a></li><li><a href="https://projects.eclipse.org/projects/iot.kiso">Eclipse Kiso</a></li><li><a href="https://projects.eclipse.org/projects/iot.kuksa">Eclipse Kuksa</a></li><li><a href="https://projects.eclipse.org/projects/iot.mita">Eclipse Mita</a></li><li><a href="https://projects.eclipse.org/projects/iot.smarthome">Eclipse SmartHome</a></li><li><a href="https://projects.eclipse.org/projects/iot.tahu">Eclipse Tahu</a></li><li><a href="https://projects.eclipse.org/projects/iot.thingweb">Eclipse Thingweb</a></li><li><a href="https://projects.eclipse.org/projects/iot.wakaama">Eclipse Wakaama</a></li><li><a href="https://projects.eclipse.org/projects/locationtech">LocationTech</a></li><li><a href="https://projects.eclipse.org/projects/modeling">Eclipse Modeling Project</a></li><li><a href="https://projects.eclipse.org/projects/modeling.agileuml">Eclipse Agile UML</a></li><li><a href="https://projects.eclipse.org/projects/modeling.avsys">Eclipse Avsys</a></li><li><a href="https://projects.eclipse.org/projects/modeling.capra">Eclipse Capra</a></li><li><a href="https://projects.eclipse.org/projects/modeling.emf.emf">Eclipse EMF</a></li><li><a href="https://projects.eclipse.org/projects/modeling.epsilon">Eclipse Epsilon</a></li><li><a href="https://projects.eclipse.org/projects/modeling.hawk">Eclipse Hawk</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mdt.etrice">Eclipse eTrice</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mdt.ocl">Eclipse OCL</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mdt.papyrus">Eclipse Papyrus</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mdt.uml2">Eclipse UML2</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mdt.xsd">Eclipse XSD</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mmt.qvt-oml">Eclipse QVT-OML</a></li><li><a href="https://projects.eclipse.org/projects/modeling.mmt.qvtd">Eclipse QVTd</a></li><li><a href="https://projects.eclipse.org/projects/modeling.viatra">Eclipse VIATRA</a></li><li><a href="https://projects.eclipse.org/projects/mylyn.docs">Eclipse Mylyn Docs</a></li><li><a href="https://projects.eclipse.org/projects/polarsys.b612">PolarSys B612</a></li><li><a href="https://projects.eclipse.org/projects/polarsys.esf">Eclipse Safety Framework</a></li><li><a href="https://projects.eclipse.org/projects/polarsys.libims">PolarSys LibIMS</a></li><li><a href="https://projects.eclipse.org/projects/polarsys.opencert">PolarSys OpenCert</a></li><li><a href="https://projects.eclipse.org/projects/polarsys.time4sys">PolarSys Time4Sys</a></li><li><a href="https://projects.eclipse.org/projects/rt">Eclipse Runtime Project</a></li><li><a href="https://projects.eclipse.org/projects/rt.vertx">Eclipse Vert.x</a></li><li><a href="https://projects.eclipse.org/projects/science">Eclipse Science</a></li><li><a href="https://projects.eclipse.org/projects/science.statet">Eclipse StatET</a></li><li><a href="https://projects.eclipse.org/projects/science.swtchart">Eclipse SWTChart</a></li><li><a href="https://projects.eclipse.org/projects/soa">Eclipse Service Oriented Architecture</a></li><li><a href="https://projects.eclipse.org/projects/soa.winery">Eclipse Winery</a></li><li><a href="https://projects.eclipse.org/projects/technology">Eclipse Technology</a></li><li><a href="https://projects.eclipse.org/projects/technology.app4mc">Eclipse APP4MC</a></li><li><a href="https://projects.eclipse.org/projects/technology.basyx">Eclipse Basyx</a></li><li><a href="https://projects.eclipse.org/projects/technology.bridgeiot">Eclipse Bridge.IoT</a></li><li><a href="https://projects.eclipse.org/projects/technology.cognicrypt">Eclipse CogniCrypt</a></li><li><a href="https://projects.eclipse.org/projects/technology.dltk">Eclipse Dynamic Languages Toolkit</a></li><li><a href="https://projects.eclipse.org/projects/technology.egit">Eclipse Git Team Provider</a></li><li><a href="https://projects.eclipse.org/projects/technology.golo">Eclipse Golo</a></li><li><a href="https://projects.eclipse.org/projects/technology.handly">Eclipse Handly</a></li><li><a href="https://projects.eclipse.org/projects/technology.jemo">Eclipse Jemo</a></li><li><a href="https://projects.eclipse.org/projects/technology.lsp4j">Eclipse LSP4J</a></li><li><a href="https://projects.eclipse.org/projects/technology.mdmbl">Eclipse MDM|BL</a></li><li><a href="https://projects.eclipse.org/projects/technology.omr">Eclipse OMR</a></li><li><a href="https://projects.eclipse.org/projects/technology.openj9">Eclipse OpenJ9</a></li><li><a href="https://projects.eclipse.org/projects/technology.openk-usermodules">Eclipse openK User Modules</a></li><li><a href="https://projects.eclipse.org/projects/technology.packager">Eclipse Packager</a></li><li><a href="https://projects.eclipse.org/projects/technology.packaging.mpc">Eclipse Marketplace Client Project</a></li><li><a href="https://projects.eclipse.org/projects/technology.passage">Eclipse Passage</a></li><li><a href="https://projects.eclipse.org/projects/technology.reddeer">Eclipse RedDeer</a></li><li><a href="https://projects.eclipse.org/projects/technology.repairnator">Eclipse Repairnator</a></li><li><a href="https://projects.eclipse.org/projects/technology.scava">Eclipse SCAVA</a></li><li><a href="https://projects.eclipse.org/projects/technology.set">Eclipse Signalling Engineering Toolbox</a></li><li><a href="https://projects.eclipse.org/projects/technology.simopenpass">Eclipse sim@openPASS</a></li><li><a href="https://projects.eclipse.org/projects/technology.sumo">Eclipse Sumo</a></li><li><a href="https://projects.eclipse.org/projects/technology.sw360.antenna">Eclipse SW360antenna</a></li><li><a href="https://projects.eclipse.org/projects/technology.systemfocus">Eclipse SystemFOCUS</a></li><li><a href="https://projects.eclipse.org/projects/tools">Eclipse Tools Project</a></li><li><a href="https://projects.eclipse.org/projects/tools.cdt">Eclipse C/C++ Development Tools</a></li><li><a href="https://projects.eclipse.org/projects/tools.corrosion">Eclipse Corrosion</a></li><li><a href="https://projects.eclipse.org/projects/tools.dartboard">Eclipse Dartboard</a></li><li><a href="https://projects.eclipse.org/projects/tools.linuxtools">Eclipse Linux Tools</a></li><li><a href="https://projects.eclipse.org/projects/tools.lsphub">Eclipse LSPHub</a></li><li><a href="https://projects.eclipse.org/projects/tools.pdt">Eclipse PHP Development Tools</a></li><li><a href="https://projects.eclipse.org/projects/tools.ptp">Eclipse Parallel Tools Platform</a></li><li><a href="https://projects.eclipse.org/projects/tools.ptp.photran">Eclipse Photran</a></li><li><a href="https://projects.eclipse.org/projects/tools.shellwax">Eclipse Shellwax</a></li><li><a href="https://projects.eclipse.org/projects/tools.wildwebdeveloper">Eclipse Wild Web Developer</a></li><li><a href="https://projects.eclipse.org/projects/webtools">Eclipse Web Tools Platform Project</a></li><li><a href="https://projects.eclipse.org/projects/webtools.glassfish-tools">Eclipse GlassFish Tools</a></li> </ul>
+ </div>
+ </div>
+</div>
+
+</div><div class="col-md-6"> <!-- nav -->
+ <aside class="main-sidebar-default-margin" id="main-sidebar">
+ <ul id="leftnav" class="ul-left-nav fa-ul hidden-print">
+
+
+ <li class="separator">
+ <a class="separator" href="/org/">
+ About Us </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/foundation/reports/annual_report.php" target="_self">
+ Annual Report </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/foundation/" target="_self">
+ Foundation </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/" target="_self">
+ Governance </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/" target="_self">
+ Legal Resources </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/foundation/contact.php" target="_self">
+ Contact Us </a>
+ </li>
+
+
+
+ <li class="separator">
+ <a class="separator" href="/legal/ECA.php">
+ ECA </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="https://accounts.eclipse.org/user/eca" target="_self">
+ Sign </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/contribute/cla" target="_self">
+ Validation Tool </a>
+ </li>
+
+
+
+ <li class="separator">
+ <a class="separator" href="/legal/epl-2.0">
+ EPL-2.0 </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/epl-2.0/EPL-2.0.html" target="_self">
+ Plain HTML </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/epl-2.0/EPL-2.0.txt" target="_self">
+ Plain Text </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/epl-2.0/EPL-2.0.pdf" target="_self">
+ PDF </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/epl-2.0/faq.php" target="_self">
+ FAQ </a>
+ </li>
+
+
+
+ <li class="separator">
+ <a class="separator" href="/org/documents/epl-v10.php">
+ EPL-1.0 </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/epl-v10.html" target="_self">
+ Plain HTML </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/org/documents/epl-1.0/EPL-1.0.txt" target="_self">
+ Plain Text </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/eplfaq.php" target="_self">
+ FAQ </a>
+ </li>
+
+
+
+ <li class="separator">
+ <a class="separator" href="/legal/licenses.php">
+ Licenses </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/licenses.php#approved" target="_self">
+ Approved 3rd Party </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/licenses.php#nonapproved" target="_self">
+ Non Approved </a>
+ </li>
+
+
+
+ <li>
+ <i class="fa fa-caret-right fa-fw"></i>
+ <a href="/legal/noncodelicenses.php" target="_self">
+ Docs & examples </a>
+ </li>
+
+ </ul>
+ </aside>
+</div></div>
+ </div>
+ </main><p id="back-to-top">
+ <a class="visible-xs" href="#top">Back to the top</a>
+</p>
+ <!-- Sign Up to our Newsletter -->
+ <div class="featured-footer featured-footer-newsletter" style="background-size:cover;background-image:url(https://eclipse.org/home/images/2019-06-bg.jpg);border-bottom:1px solid #ccc;">
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-24">
+ <h2><strong>Register for EclipseCon Europe 2019 today! </strong></h2>
+ <p>Register now and save! Early Bird pricing ends October 1.</p>
+ <a class='btn btn-primary btn-lg' href='https://www.eclipsecon.org/europe2019/registration?utm_source=eclipse.org&utm_medium=featured-story&utm_campaign=ECE2019_REGISTRATION'>Register</a>
+ </div>
+
+ </div>
+ </div>
+ </div><footer id="solstice-footer">
+ <div class="container">
+ <div class="row">
+ <section class="col-sm-6 hidden-print" id="footer-eclipse-foundation">
+ <h2 class="section-title">Eclipse Foundation</h2>
+ <ul class="nav"><li><a href="https://www.eclipse.org/org/">About Us</a></li><li><a href="https://www.eclipse.org/org/foundation/contact.php">Contact Us</a></li><li><a href="https://www.eclipse.org/donate">Donate</a></li><li><a href="https://www.eclipse.org/org/documents/">Governance</a></li><li><a href="https://www.eclipse.org/artwork/">Logo and Artwork</a></li><li><a href="https://www.eclipse.org/org/foundation/directors.php">Board of Directors</a></li></ul> </section>
+ <section class="col-sm-6 hidden-print" id="footer-legal">
+ <h2 class="section-title">Legal</h2>
+ <ul class="nav"><li><a href="https://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li><li><a href="https://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li><li><a href="https://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li><li><a href="https://www.eclipse.org/legal/epl-2.0/">Eclipse Public License</a></li><li><a href="https://www.eclipse.org/legal/">Legal Resources</a></li></ul> </section>
+ <section class="col-sm-6 hidden-print" id="footer-useful-links">
+ <h2 class="section-title">Useful Links</h2>
+ <ul class="nav"><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="//help.eclipse.org/">Documentation</a></li><li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li><li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://www.eclipse.org/forums/">Forums</a></li><li><a href="//marketplace.eclipse.org">Marketplace</a></li></ul> </section>
+ <section class="col-sm-6 hidden-print" id="footer-other">
+ <h2 class="section-title">Other</h2>
+ <ul class="nav"><li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li><li><a href="https://www.eclipse.org/projects">Community of Projects</a></li><li><a href="https://www.eclipse.org/org/workinggroups/">Working Groups</a></li><li><a href="https://www.eclipse.org/org/research/">Research@Eclipse</a></li><li><a href="https://www.eclipse.org/security/">Report a Vulnerability</a></li><li><a href="https://status.eclipse.org">Service Status</a></li></ul> </section>
+ <div class="col-sm-24 margin-top-20">
+ <div class="row">
+ <div id="copyright" class="col-md-16">
+ <p id="copyright-text">Copyright © Eclipse Foundation, Inc. All Rights Reserved.</p>
+ </div>
+ <div class="col-md-8 social-media">
+ <ul class="list-inline">
+ <li>
+ <a class="social-media-link fa-stack fa-lg" href="https://twitter.com/EclipseFdn">
+ <i class="fa fa-circle-thin fa-stack-2x"></i>
+ <i class="fa fa-twitter fa-stack-1x"></i>
+ </a>
+ </li>
+ <li>
+ <a class="social-media-link fa-stack fa-lg" href="https://www.facebook.com/eclipse.org">
+ <i class="fa fa-circle-thin fa-stack-2x"></i>
+ <i class="fa fa-facebook fa-stack-1x"></i>
+ </a>
+ </li>
+ <li>
+ <a class="social-media-link fa-stack fa-lg" href="https://www.youtube.com/user/EclipseFdn">
+ <i class="fa fa-circle-thin fa-stack-2x"></i>
+ <i class="fa fa-youtube fa-stack-1x"></i>
+ </a>
+ </li>
+ <li>
+ <a class="social-media-link fa-stack fa-lg" href="https://www.linkedin.com/company/eclipse-foundation">
+ <i class="fa fa-circle-thin fa-stack-2x"></i>
+ <i class="fa fa-linkedin fa-stack-1x"></i>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div> <a href="#" class="scrollup">Back to the top</a>
+ </div>
+ </div>
+</footer>
+<!-- Placed at the end of the document so the pages load faster -->
+<script src="/eclipse.org-common/themes/solstice/public/javascript/main.min.js?var=1.3"></script>
+
+</body>
+</html>
diff --git a/epl-v10.html b/epl-v10.html
deleted file mode 100644
index 3998fce..0000000
--- a/epl-v10.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>Eclipse Public License - Version 1.0</title>
-<style type="text/css">
- body {
- size: 8.5in 11.0in;
- margin: 0.25in 0.5in 0.25in 0.5in;
- tab-interval: 0.5in;
- }
- p {
- margin-left: auto;
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- }
- p.list {
- margin-left: 0.5in;
- margin-top: 0.05em;
- margin-bottom: 0.05em;
- }
- </style>
-
-</head>
-
-<body lang="EN-US">
-
-<h2>Eclipse Public License - v 1.0</h2>
-
-<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
-DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
-AGREEMENT.</p>
-
-<p><b>1. DEFINITIONS</b></p>
-
-<p>"Contribution" means:</p>
-
-<p class="list">a) in the case of the initial Contributor, the initial
-code and documentation distributed under this Agreement, and</p>
-<p class="list">b) in the case of each subsequent Contributor:</p>
-<p class="list">i) changes to the Program, and</p>
-<p class="list">ii) additions to the Program;</p>
-<p class="list">where such changes and/or additions to the Program
-originate from and are distributed by that particular Contributor. A
-Contribution 'originates' from a Contributor if it was added to the
-Program by such Contributor itself or anyone acting on such
-Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in
-conjunction with the Program under their own license agreement, and (ii)
-are not derivative works of the Program.</p>
-
-<p>"Contributor" means any person or entity that distributes
-the Program.</p>
-
-<p>"Licensed Patents" mean patent claims licensable by a
-Contributor which are necessarily infringed by the use or sale of its
-Contribution alone or when combined with the Program.</p>
-
-<p>"Program" means the Contributions distributed in accordance
-with this Agreement.</p>
-
-<p>"Recipient" means anyone who receives the Program under
-this Agreement, including all Contributors.</p>
-
-<p><b>2. GRANT OF RIGHTS</b></p>
-
-<p class="list">a) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works
-of, publicly display, publicly perform, distribute and sublicense the
-Contribution of such Contributor, if any, and such derivative works, in
-source code and object code form.</p>
-
-<p class="list">b) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell,
-offer to sell, import and otherwise transfer the Contribution of such
-Contributor, if any, in source code and object code form. This patent
-license shall apply to the combination of the Contribution and the
-Program if, at the time the Contribution is added by the Contributor,
-such addition of the Contribution causes such combination to be covered
-by the Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.</p>
-
-<p class="list">c) Recipient understands that although each Contributor
-grants the licenses to its Contributions set forth herein, no assurances
-are provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity. Each
-Contributor disclaims any liability to Recipient for claims brought by
-any other entity based on infringement of intellectual property rights
-or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to
-secure any other intellectual property rights needed, if any. For
-example, if a third party patent license is required to allow Recipient
-to distribute the Program, it is Recipient's responsibility to acquire
-that license before distributing the Program.</p>
-
-<p class="list">d) Each Contributor represents that to its knowledge it
-has sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.</p>
-
-<p><b>3. REQUIREMENTS</b></p>
-
-<p>A Contributor may choose to distribute the Program in object code
-form under its own license agreement, provided that:</p>
-
-<p class="list">a) it complies with the terms and conditions of this
-Agreement; and</p>
-
-<p class="list">b) its license agreement:</p>
-
-<p class="list">i) effectively disclaims on behalf of all Contributors
-all warranties and conditions, express and implied, including warranties
-or conditions of title and non-infringement, and implied warranties or
-conditions of merchantability and fitness for a particular purpose;</p>
-
-<p class="list">ii) effectively excludes on behalf of all Contributors
-all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;</p>
-
-<p class="list">iii) states that any provisions which differ from this
-Agreement are offered by that Contributor alone and not by any other
-party; and</p>
-
-<p class="list">iv) states that source code for the Program is available
-from such Contributor, and informs licensees how to obtain it in a
-reasonable manner on or through a medium customarily used for software
-exchange.</p>
-
-<p>When the Program is made available in source code form:</p>
-
-<p class="list">a) it must be made available under this Agreement; and</p>
-
-<p class="list">b) a copy of this Agreement must be included with each
-copy of the Program.</p>
-
-<p>Contributors may not remove or alter any copyright notices contained
-within the Program.</p>
-
-<p>Each Contributor must identify itself as the originator of its
-Contribution, if any, in a manner that reasonably allows subsequent
-Recipients to identify the originator of the Contribution.</p>
-
-<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
-
-<p>Commercial distributors of software may accept certain
-responsibilities with respect to end users, business partners and the
-like. While this license is intended to facilitate the commercial use of
-the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create
-potential liability for other Contributors. Therefore, if a Contributor
-includes the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and
-indemnify every other Contributor ("Indemnified Contributor")
-against any losses, damages and costs (collectively "Losses")
-arising from claims, lawsuits and other legal actions brought by a third
-party against the Indemnified Contributor to the extent caused by the
-acts or omissions of such Commercial Contributor in connection with its
-distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In
-order to qualify, an Indemnified Contributor must: a) promptly notify
-the Commercial Contributor in writing of such claim, and b) allow the
-Commercial Contributor to control, and cooperate with the Commercial
-Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own
-expense.</p>
-
-<p>For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those
-performance claims and warranties, and if a court requires any other
-Contributor to pay any damages as a result, the Commercial Contributor
-must pay those damages.</p>
-
-<p><b>5. NO WARRANTY</b></p>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
-ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and
-distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to
-the risks and costs of program errors, compliance with applicable laws,
-damage to or loss of data, programs or equipment, and unavailability or
-interruption of operations.</p>
-
-<p><b>6. DISCLAIMER OF LIABILITY</b></p>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
-NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
-
-<p><b>7. GENERAL</b></p>
-
-<p>If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further action
-by the parties hereto, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.</p>
-
-<p>If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other
-software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the
-date such litigation is filed.</p>
-
-<p>All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of time
-after becoming aware of such noncompliance. If all Recipient's rights
-under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive.</p>
-
-<p>Everyone is permitted to copy and distribute copies of this
-Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The
-Agreement Steward reserves the right to publish new versions (including
-revisions) of this Agreement from time to time. No one other than the
-Agreement Steward has the right to modify this Agreement. The Eclipse
-Foundation is the initial Agreement Steward. The Eclipse Foundation may
-assign the responsibility to serve as the Agreement Steward to a
-suitable separate entity. Each new version of the Agreement will be
-given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the
-Program (including its Contributions) under the new version. Except as
-expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
-rights or licenses to the intellectual property of any Contributor under
-this Agreement, whether expressly, by implication, estoppel or
-otherwise. All rights in the Program not expressly granted under this
-Agreement are reserved.</p>
-
-<p>This Agreement is governed by the laws of the State of New York and
-the intellectual property laws of the United States of America. No party
-to this Agreement will bring a legal action under this Agreement more
-than one year after the cause of action arose. Each party waives its
-rights to a jury trial in any resulting litigation.</p>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/forte_config.h.in b/forte_config.h.in
index a46eb85..7436e9f 100644
--- a/forte_config.h.in
+++ b/forte_config.h.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Martin Melik Merkumians, Ingo Hegny, Michael Hofmann
@@ -30,7 +31,7 @@
* For Smaller devices which do not use 64 bit datatypes a time base of 1000 (i.e., 1ms)
* or 1000000 (i.e., 1micro s) may be suitable.
*/
-#define FORTE_TIME_BASE_UNITS_PER_SECOND ${FORTE_TimeBaseUnitsPerSecond}
+const uint_fast32_t cgForteTimeBaseUnitsPerSecond = ${FORTE_TimeBaseUnitsPerSecond};
/*! Define the initial size of the event chain list used in the event chain execution thread.
@@ -61,7 +62,7 @@
* # DEV_MGR for FBDK compliant XML encoded commands
* # WBXML_DEV_MGR for WAP Binary XML encoded commands
*/
-#define FORTE_MGM_COMMAND_PROTOCOL ${FORTE_MGMCOMMANDPROTOCOL}
+#define FORTE_MGM_COMMAND_PROTOCOL ${FORTE_MGMCOMM-ANDPROTOCOL}
//! Max supported hierarchy that can be provided in a management commands
#define FORTE_MGM_MAX_SUPPORTED_NAME_HIERARCHY ${FORTE_MGM_MAX_SUPPORTED_NAME_HIERACHY}
@@ -80,15 +81,6 @@
const TForteUInt32 cg_unNumberOfHandlers = ${FORTE_NUMBER_OF_HANDLERS};
-
-#ifdef FORTE_SUPPORT_BOOT_FILE
-
-/*!Define the path to the Bootfile
- */
-#define FORTE_BOOT_FILE_LOCATION "${FORTE_BootfileLocation}forte.fboot"
-
-#endif
-
${FORTE_CUSTOM_CONFIGURATIONS}
#endif
diff --git a/fortestyle.xml b/fortestyle.xml
index 892ca4d..4523ec1 100644
--- a/fortestyle.xml
+++ b/fortestyle.xml
@@ -1,166 +1,168 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="1">
<profile kind="CodeFormatterProfile" name="FORTE" version="1">
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.lineSplit" value="800"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_member_access" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment" value="1"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.tabulation.size" value="2"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_enumerator_list" value="48"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_declarator_list" value="16"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_empty_lines" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.join_wrapped_lines" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_expression_list" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression" value="48"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_compact_if" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_assignment" value="16"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain" value="18"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="0"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain" value="16"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.indentation.size" value="2"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration" value="insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket" value="do not insert"/>
-<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_binary_expression" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces" value="0"/>
+<setting id="org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration" value="16"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_member_access" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.cdt.core.formatter.lineSplit" value="160"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_compact_if" value="0"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_declarator_list" value="16"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment" value="1"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list" value="16"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain" value="18"/>
+<setting id="org.eclipse.cdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.indentation.size" value="2"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_expression_list" value="0"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header" value="false"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_assignment" value="20"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters" value="do not insert"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier" value="true"/>
+<setting id="org.eclipse.cdt.core.formatter.alignment_for_enumerator_list" value="49"/>
+<setting id="org.eclipse.cdt.core.formatter.tabulation.size" value="2"/>
+<setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
</profile>
</profiles>
diff --git a/notice.html b/notice.html
index c3d34c3..d76d79a 100644
--- a/notice.html
+++ b/notice.html
@@ -7,101 +7,183 @@
</head>
<body lang="EN-US">
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>April 9, 2014</p>
+ <h2>Eclipse Foundation Software User Agreement</h2>
+ <p>November 22, 2017</p>
-<h3>Usage Of Content</h3>
+ <h3>Usage Of Content</h3>
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
- (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
- CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
- OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
- NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
- CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+ <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+ INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+ THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+ GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+ APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+ AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+ AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+ USE THE CONTENT.</p>
-<h3>Applicable Licenses</h3>
+ <h3>Applicable Licenses</h3>
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
- ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
- For purposes of the EPL, "Program" will mean the Content.</p>
+ <p>
+ Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+ Eclipse Public License Version 2.0 ("EPL"). A copy of the
+ EPL is provided with this Content and is also available at <a
+ href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
- repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+ <p>Content includes, but is not limited to, source code, object
+ code, documentation and other files maintained in the Eclipse
+ Foundation source code repository ("Repository") in software
+ modules ("Modules") and made available as downloadable
+ archives ("Downloads").</p>
-<ul>
- <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
- <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
- <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
- and/or Fragments associated with that Feature.</li>
- <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
-</ul>
+ <ul>
+ <li>Content may be structured and packaged into modules to
+ facilitate delivering, extending, and upgrading the Content. Typical
+ modules may include plug-ins ("Plug-ins"), plug-in
+ fragments ("Fragments"), and features
+ ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory
+ or JAR (Java™ ARchive) in a directory named
+ "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+ Fragments and associated material. Each Feature may be packaged as a
+ sub-directory in a directory named "features". Within a
+ Feature, files named "feature.xml" may contain a list of
+ the names and version numbers of the Plug-ins and/or Fragments
+ associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+ Features"). Within a Feature, files named
+ "feature.xml" may contain a list of the names and version
+ numbers of Included Features.</li>
+ </ul>
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
-Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
+ <p>The terms and conditions governing Plug-ins and Fragments should
+ be contained in files named "about.html"
+ ("Abouts"). The terms and conditions governing Features and
+ Included Features should be contained in files named
+ "license.html" ("Feature Licenses"). Abouts and
+ Feature Licenses may be located in any directory of a Download or
+ Module including, but not limited to the following locations:</p>
-<ul>
- <li>The top-level (root) directory</li>
- <li>Plug-in and Fragment directories</li>
- <li>Inside Plug-ins and Fragments packaged as JARs</li>
- <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
- <li>Feature directories</li>
-</ul>
+ <ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of
+ certain Plug-ins</li>
+ <li>Feature directories</li>
+ </ul>
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
-installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
+ <p>Note: if a Feature made available by the Eclipse Foundation is
+ installed using the Provisioning Technology (as defined below), you
+ must agree to a license ("Feature Update License") during
+ the installation process. If the Feature contains Included Features,
+ the Feature Update License should either provide you with the terms
+ and conditions governing the Included Features or inform you where you
+ can locate them. Feature Update Licenses may be found in the
+ "license" property of files named
+ "feature.properties" found within a Feature. Such Abouts,
+ Feature Licenses, and Feature Update Licenses contain the terms and
+ conditions (or references to such terms and conditions) that govern
+ your use of the associated Content in that directory.</p>
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+ <p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+ REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+ CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+ ARE NOT LIMITED TO):</p>
-<ul>
- <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
- <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
- <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
- <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
- <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
+ <ul>
+ <li>Eclipse Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+ </li>
+ <li>Eclipse Distribution License Version 1.0 (available at <a
+ href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+ </li>
+ <li>Common Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+ </li>
+ <li>Apache Software License 1.1 (available at <a
+ href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+ </li>
+ <li>Apache Software License 2.0 (available at <a
+ href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+ </li>
+ <li>Mozilla Public License Version 1.1 (available at <a
+ href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+ </li>
+ </ul>
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+ <p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+ CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+ or Feature Update License is provided, please contact the Eclipse
+ Foundation to determine what terms and conditions govern that
+ particular Content.</p>
-<h3>Use of Provisioning Technology</h3>
+ <h3>Use of Provisioning Technology</h3>
-<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
- Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
- other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
- install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
- href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
- ("Specification").</p>
+ <p>
+ The Eclipse Foundation makes available provisioning software, examples
+ of which include, but are not limited to, p2 and the Eclipse Update
+ Manager ("Provisioning Technology") for the purpose of
+ allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+ capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+ packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").
+ </p>
-<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
- applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
- in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
- Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+ <p>You may use Provisioning Technology to allow other parties to
+ install Installable Software. You shall be responsible for enabling
+ the applicable license agreements relating to the Installable Software
+ to be presented to, and accepted by, the users of the Provisioning
+ Technology in accordance with the Specification. By using Provisioning
+ Technology in such a manner and making it available in accordance with
+ the Specification, you further acknowledge your agreement to, and the
+ acquisition of all necessary rights to permit the following:</p>
-<ol>
- <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
- on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
- product.</li>
- <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
- accessed and copied to the Target Machine.</li>
- <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
- Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
- Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
- the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
- indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
-</ol>
+ <ol>
+ <li>A series of actions may occur ("Provisioning
+ Process") in which a user may execute the Provisioning
+ Technology on a machine ("Target Machine") with the intent
+ of installing, extending or updating the functionality of an
+ Eclipse-based product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+ may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+ the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such
+ Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+ Software Agreement must inform the user of the terms and conditions
+ that govern the Installable Software and must solicit acceptance by
+ the end user in the manner prescribed in such Installable Software
+ Agreement. Upon such indication of agreement by the user, the
+ provisioning Technology will complete installation of the Installable
+ Software.</li>
+ </ol>
-<h3>Cryptography</h3>
+ <h3>Cryptography</h3>
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
- another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
- possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+ <p>Content may contain encryption software. The country in which
+ you are currently may have restrictions on the import, possession, and
+ use, and/or re-export to another country, of encryption software.
+ BEFORE using any encryption software, please check the country's laws,
+ regulations and policies concerning the import, possession, or use,
+ and re-export of encryption software, to see if this is permitted.</p>
-<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+ <p>
+ <small>Java and all Java-based trademarks are trademarks of
+ Oracle Corporation in the United States, other countries, or both.</small>
+ </p>
</body>
</html>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 98edaaf..c9d7125 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Micheal Hofmann, Alois Zoitl, Stanislav Meduna, Gerhard Ebenhofer,
+# Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Micheal Hofmann, Alois Zoitl, Stanislav Meduna, Gerhard Ebenhofer,
# * Matthias Plasch
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/arch/CMakeLists.txt b/src/arch/CMakeLists.txt
index 91d880b..8ebf22b 100644
--- a/src/arch/CMakeLists.txt
+++ b/src/arch/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2018 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Patrick Smejkal, Martin Melik-Merkumians
+# Copyright (c) 2010 - 2018 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Patrick Smejkal, Martin Melik-Merkumians
# * - initial API and implementation and/or initial documentation
# * - added utils directory
# *******************************************************************************/
@@ -29,3 +30,7 @@
forte_add_sourcefile_hcpp(timerha devlog)
+SET(FORTE_LOGGER_BUFFER_SIZE "300" CACHE NUMBER "Buffer's length of the logger")
+mark_as_advanced(FORTE_LOGGER_BUFFER_SIZE)
+forte_add_custom_configuration("#define FORTE_LOGGER_BUFFER_SIZE ${FORTE_LOGGER_BUFFER_SIZE}")
+
diff --git a/src/arch/be_m1/BE_RMT_DEV.cpp b/src/arch/be_m1/BE_RMT_DEV.cpp
index 3b95f9a..d288ee3 100644
--- a/src/arch/be_m1/BE_RMT_DEV.cpp
+++ b/src/arch/be_m1/BE_RMT_DEV.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/BE_RMT_DEV.h b/src/arch/be_m1/BE_RMT_DEV.h
index 496b53d..3ab9114 100644
--- a/src/arch/be_m1/BE_RMT_DEV.h
+++ b/src/arch/be_m1/BE_RMT_DEV.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/BE_SVIFB.cpp b/src/arch/be_m1/BE_SVIFB.cpp
index 9034b20..48729ac 100644
--- a/src/arch/be_m1/BE_SVIFB.cpp
+++ b/src/arch/be_m1/BE_SVIFB.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/BE_SVIFB.h b/src/arch/be_m1/BE_SVIFB.h
index 425f858..34c7f02 100644
--- a/src/arch/be_m1/BE_SVIFB.h
+++ b/src/arch/be_m1/BE_SVIFB.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/CMakeLists.txt b/src/arch/be_m1/CMakeLists.txt
index 9328f7b..629b047 100644
--- a/src/arch/be_m1/CMakeLists.txt
+++ b/src/arch/be_m1/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2105 ACIN and fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2012 - 2105 ACIN and fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\be_m1)
@@ -30,6 +31,7 @@
forte_add_sourcefile_hcpp(GET_VALUE)
forte_add_sourcefile_hcpp(SET_VALUE)
forte_add_sourcefile_hcpp(BE_SVIFB SVIsend_1 SVIreceive_1 BE_RMT_DEV)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ../vxworks/forte_architecture_time.cpp)
if(FORTE_COM_ETH)
diff --git a/src/arch/be_m1/GET_CHAN_INFO.cpp b/src/arch/be_m1/GET_CHAN_INFO.cpp
index 2a98269..18b9a82 100644
--- a/src/arch/be_m1/GET_CHAN_INFO.cpp
+++ b/src/arch/be_m1/GET_CHAN_INFO.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/GET_CHAN_INFO.h b/src/arch/be_m1/GET_CHAN_INFO.h
index 4cc5ff2..53c420d 100644
--- a/src/arch/be_m1/GET_CHAN_INFO.h
+++ b/src/arch/be_m1/GET_CHAN_INFO.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/GET_VALUE.cpp b/src/arch/be_m1/GET_VALUE.cpp
index a0e9005..b67acc0 100644
--- a/src/arch/be_m1/GET_VALUE.cpp
+++ b/src/arch/be_m1/GET_VALUE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/GET_VALUE.h b/src/arch/be_m1/GET_VALUE.h
index d9ca06c..66b3b44 100644
--- a/src/arch/be_m1/GET_VALUE.h
+++ b/src/arch/be_m1/GET_VALUE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SET_VALUE.cpp b/src/arch/be_m1/SET_VALUE.cpp
index 0bc5d3e..e670ba4 100644
--- a/src/arch/be_m1/SET_VALUE.cpp
+++ b/src/arch/be_m1/SET_VALUE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SET_VALUE.h b/src/arch/be_m1/SET_VALUE.h
index b552f62..ce826bd 100644
--- a/src/arch/be_m1/SET_VALUE.h
+++ b/src/arch/be_m1/SET_VALUE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SVIreceive_1.cpp b/src/arch/be_m1/SVIreceive_1.cpp
index 91ddf04..611c016 100644
--- a/src/arch/be_m1/SVIreceive_1.cpp
+++ b/src/arch/be_m1/SVIreceive_1.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SVIreceive_1.h b/src/arch/be_m1/SVIreceive_1.h
index 9d3b691..e37d2b8 100644
--- a/src/arch/be_m1/SVIreceive_1.h
+++ b/src/arch/be_m1/SVIreceive_1.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SVIsend_1.cpp b/src/arch/be_m1/SVIsend_1.cpp
index b471c8b..d2d9f2f 100644
--- a/src/arch/be_m1/SVIsend_1.cpp
+++ b/src/arch/be_m1/SVIsend_1.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/SVIsend_1.h b/src/arch/be_m1/SVIsend_1.h
index bd02e22..6c8a90a 100644
--- a/src/arch/be_m1/SVIsend_1.h
+++ b/src/arch/be_m1/SVIsend_1.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/forte_sem.h b/src/arch/be_m1/forte_sem.h
index bed69bb..a765be9 100644
--- a/src/arch/be_m1/forte_sem.h
+++ b/src/arch/be_m1/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/forte_sync.h b/src/arch/be_m1/forte_sync.h
index ca5ce00..51a20e1 100644
--- a/src/arch/be_m1/forte_sync.h
+++ b/src/arch/be_m1/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/forte_thread.cpp b/src/arch/be_m1/forte_thread.cpp
index 129efbf..7324c29 100644
--- a/src/arch/be_m1/forte_thread.cpp
+++ b/src/arch/be_m1/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2016, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/forte_thread.h b/src/arch/be_m1/forte_thread.h
index 1241bb6..91d74f2 100644
--- a/src/arch/be_m1/forte_thread.h
+++ b/src/arch/be_m1/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2016, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/fortealloc.h b/src/arch/be_m1/fortealloc.h
index 4fab136..a515f3b 100644
--- a/src/arch/be_m1/fortealloc.h
+++ b/src/arch/be_m1/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 ACIN and fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/fortemodule.cpp b/src/arch/be_m1/fortemodule.cpp
index 2233f78..06919cb 100644
--- a/src/arch/be_m1/fortemodule.cpp
+++ b/src/arch/be_m1/fortemodule.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/fortemodule.h b/src/arch/be_m1/fortemodule.h
index 7bc6bc1..bb8171d 100644
--- a/src/arch/be_m1/fortemodule.h
+++ b/src/arch/be_m1/fortemodule.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/sockhand.h b/src/arch/be_m1/sockhand.h
index 26ec27f..510364f 100644
--- a/src/arch/be_m1/sockhand.h
+++ b/src/arch/be_m1/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2015 ACIN and fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/be_m1/stdint.h b/src/arch/be_m1/stdint.h
index 771c69f..790373b 100644
--- a/src/arch/be_m1/stdint.h
+++ b/src/arch/be_m1/stdint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Stefano Campanelli - initial API and implementation and/or initial documentation
diff --git a/src/arch/bsdsocketinterf.cpp b/src/arch/bsdsocketinterf.cpp
index 4e3528a..c85c760 100644
--- a/src/arch/bsdsocketinterf.cpp
+++ b/src/arch/bsdsocketinterf.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny, Gerhard Ebenhofer, Thomas Strasser
@@ -15,7 +16,7 @@
#include <string.h>
void CBSDSocketInterface::closeSocket(TSocketDescriptor pa_nSockD){
-#if defined(WIN32) || defined(NET_OS)
+#if defined(NET_OS)
closesocket(pa_nSockD);
#else
close(pa_nSockD);
@@ -110,7 +111,7 @@
int sin_size = sizeof(struct sockaddr);
TSocketDescriptor nRetVal;
-#if defined(WIN32) || defined(NET_OS) || defined (VXWORKS)
+#if defined(NET_OS) || defined (VXWORKS)
nRetVal = accept(pa_nListeningSockD, &client_addr, &sin_size);
#else
nRetVal = accept(pa_nListeningSockD, &client_addr, (socklen_t*) &sin_size);
@@ -142,20 +143,10 @@
int nRetVal;
do{
nRetVal = static_cast<int>(recv(pa_nSockD, pa_pcData, pa_unBufSize, 0));
-#ifdef WIN32
- }while((-1 == nRetVal) && (WSAEINTR == h_errno)); // recv got interrupt / recieving again
-#else
} while((-1 == nRetVal) && (EINTR == errno)); // recv got interrupt / recieving again
-#endif
+
if(nRetVal == -1){
-#ifdef WIN32
- DEVLOG_ERROR("CBSDSocketInterface: TCP-Socket recv() failed: %d\n", WSAGetLastError());
- if(WSAECONNRESET == WSAGetLastError()){
- nRetVal = 0; //inform higher levels that the peer closed connection
- }
-#else
DEVLOG_ERROR("CBSDSocketInterface: TCP-Socket recv() failed: %s\n", strerror(errno));
-#endif
}
return nRetVal;
}
@@ -270,11 +261,8 @@
int nRetVal;
do{
nRetVal = static_cast<int>(recvfrom(pa_nSockD, pa_pcData, pa_unBufSize, 0, 0, 0));
-#ifdef WIN32
- }while((-1 == nRetVal) && (WSAEINTR == h_errno)); // recv got interrupt / recieving again
-#else
} while((-1 == nRetVal) && (EINTR == errno)); // recv got interrupt / recieving again
-#endif
+
if(nRetVal == -1){ //
DEVLOG_ERROR("CBSDSocketInterface: UDP-Socket recvfrom() failed: %s\n", strerror(errno));
}
diff --git a/src/arch/bsdsocketinterf.h b/src/arch/bsdsocketinterf.h
index f0ed19e..02b5185 100644
--- a/src/arch/bsdsocketinterf.h
+++ b/src/arch/bsdsocketinterf.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny - initial API and implementation and/or initial documentation
diff --git a/src/arch/datatype.h b/src/arch/datatype.h
index 4c50e14..c126b95 100644
--- a/src/arch/datatype.h
+++ b/src/arch/datatype.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Thomas Strasser, Martin Melik Merkumians,
diff --git a/src/arch/devlog.cpp b/src/arch/devlog.cpp
index 2278712..1546fcc 100644
--- a/src/arch/devlog.cpp
+++ b/src/arch/devlog.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Ingo Hegny
@@ -13,9 +14,11 @@
#ifndef NOLOG
+# include <forte_config.h>
# include "timerha.h"
# include "forte_printer.h"
# include "../core/utils/criticalregion.h"
+# include "forte_architecture_time.h"
# include <cstdio>
# include <cstdlib>
# include <cstdarg>
@@ -31,46 +34,38 @@
# include <cinttypes>
# endif //< stdc11
-static const char* cg_acLogLevel[] = {"INFO", "WARNING", "ERROR", "DEBUG", "TRACE" };
+static const char* scLogLevel[] = { "INFO", "WARNING", "ERROR", "DEBUG", "TRACE" };
//this define allows to provide an own log handler (see LMS for an example of this)
-#ifndef FORTE_EXTERNAL_LOG_HANDLER
+# ifndef FORTE_EXTERNAL_LOG_HANDLER
/*! \brief print the given log message with the error level and a time stamp
*
* @param pa_ecLevel the message's log level
* @param pa_acMessage the message to log
*/
-void printLogMessage(E_MsgLevel pa_eLevel, const char *pa_acMessage);
+void printLogMessage(E_MsgLevel paLevel, const char *paMessage);
-static const int scm_nMsgBufSize = 300;
-static char sm_acMsgBuf[scm_nMsgBufSize]; //!<Buffer for the messages created by the variable addMsg function
+static const int scMsgBufSize = FORTE_LOGGER_BUFFER_SIZE;
+static char sMsgBuf[scMsgBufSize]; //!<Buffer for the messages created by the variable addMsg function
-static CSyncObject sgMessageLock;
+static CSyncObject sMessageLock;
-
-void logMessage(E_MsgLevel pa_eLevel, const char *pa_acMessage, ...){
- CCriticalRegion crticalRegion(sgMessageLock);
+void logMessage(E_MsgLevel paLevel, const char *paMessage, ...) {
+ CCriticalRegion crticalRegion(sMessageLock);
va_list pstArgPtr;
- va_start(pstArgPtr, pa_acMessage);
- forte_vsnprintf(sm_acMsgBuf, scm_nMsgBufSize, pa_acMessage, pstArgPtr);
+ va_start(pstArgPtr, paMessage);
+ forte_vsnprintf(sMsgBuf, scMsgBufSize, paMessage, pstArgPtr);
va_end(pstArgPtr);
- printLogMessage(pa_eLevel, sm_acMsgBuf);
+ printLogMessage(paLevel, sMsgBuf);
}
-void printLogMessage(E_MsgLevel pa_eLevel, const char *pa_acMessage){
- fprintf(stderr, "%s", cg_acLogLevel[pa_eLevel]);
-
- if (CTimerHandler::smFORTETimer != 0){
- fprintf(stderr, ": T#%" PRIuFAST64 ": ", CTimerHandler::smFORTETimer->getForteTime());
- }
- else{
- fprintf(stderr, "%s", ": T#notime: ");
- }
- fprintf(stderr, "%s", pa_acMessage);
+void printLogMessage(E_MsgLevel paLevel, const char *paMessage) {
+ fprintf(stderr, "%s: T#%" PRIuFAST64 ": %s", scLogLevel[paLevel], getNanoSecondsMonotonic(), paMessage);
}
-#endif //NOLOG
-#endif
+# endif /* FORTE_EXTERNAL_LOG_HANDLER */
+
+#endif /* NOLOG */
diff --git a/src/arch/devlog.h b/src/arch/devlog.h
index 357369f..8c71902 100644
--- a/src/arch/devlog.h
+++ b/src/arch/devlog.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Thomas Strasser, Alois Zoitl, Ingo Hegny, Monika Wenger
@@ -17,7 +18,13 @@
* They can be printed to a console or archived somewhere (This is implementation dependent).
*/
-enum E_MsgLevel {E_INFO, E_WARNING, E_ERROR, E_DEBUG, E_TRACE};
+enum E_MsgLevel {
+ E_INFO,
+ E_WARNING,
+ E_ERROR,
+ E_DEBUG,
+ E_TRACE
+};
// possible loglevels: NOLOG, LOGERROR, LOGWARNING, LOGINFO, LOGDEBUG
/* Meaning:
@@ -29,78 +36,76 @@
*/
#if !(defined(NOLOG) || defined(LOGERROR) || defined(LOGWARNING) || defined(LOGINFO) || defined(LOGDEBUG))
-/* Set default loglevel */
-# define LOGDEBUG
+# define LOGDEBUG /* Set default loglevel */
#endif
#ifdef LOGDEBUG
- #define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
- #define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
- #define DEVLOG_INFO(...) logMessage(E_INFO, __VA_ARGS__)
- #define DEVLOG_DEBUG(...) logMessage(E_DEBUG, __VA_ARGS__)
- #define DEVLOG_ERROR_VAR(X) X
- #define DEVLOG_WARNING_VAR(X) X
- #define DEVLOG_INFO_VAR(X) X
- #define DEVLOG_DEBUG_VAR(X) X
+# define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
+# define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
+# define DEVLOG_INFO(...) logMessage(E_INFO, __VA_ARGS__)
+# define DEVLOG_DEBUG(...) logMessage(E_DEBUG, __VA_ARGS__)
+# define DEVLOG_ERROR_VAR(X) X
+# define DEVLOG_WARNING_VAR(X) X
+# define DEVLOG_INFO_VAR(X) X
+# define DEVLOG_DEBUG_VAR(X) X
#endif
#ifdef LOGERROR
- #define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
- #define DEVLOG_WARNING(...)
- #define DEVLOG_INFO(...)
- #define DEVLOG_DEBUG(...)
- #define DEVLOG_ERROR_VAR(X) X
- #define DEVLOG_WARNING_VAR(X)
- #define DEVLOG_INFO_VAR(X)
- #define DEVLOG_DEBUG_VAR(X)
+# define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
+# define DEVLOG_WARNING(...)
+# define DEVLOG_INFO(...)
+# define DEVLOG_DEBUG(...)
+# define DEVLOG_ERROR_VAR(X) X
+# define DEVLOG_WARNING_VAR(X)
+# define DEVLOG_INFO_VAR(X)
+# define DEVLOG_DEBUG_VAR(X)
#endif
#ifdef LOGWARNING
- #define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
- #define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
- #define DEVLOG_INFO(...)
- #define DEVLOG_DEBUG(...)
- #define DEVLOG_ERROR_VAR(X) X
- #define DEVLOG_WARNING_VAR(X) X
- #define DEVLOG_INFO_VAR(X)
- #define DEVLOG_DEBUG_VAR(X)
+# define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
+# define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
+# define DEVLOG_INFO(...)
+# define DEVLOG_DEBUG(...)
+# define DEVLOG_ERROR_VAR(X) X
+# define DEVLOG_WARNING_VAR(X) X
+# define DEVLOG_INFO_VAR(X)
+# define DEVLOG_DEBUG_VAR(X)
#endif
#ifdef LOGINFO
- #define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
- #define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
- #define DEVLOG_INFO(...) logMessage(E_INFO, __VA_ARGS__)
- #define DEVLOG_DEBUG(...)
- #define DEVLOG_ERROR_VAR(X) X
- #define DEVLOG_WARNING_VAR(X) X
- #define DEVLOG_INFO_VAR(X) X
- #define DEVLOG_DEBUG_VAR(X)
+# define DEVLOG_ERROR(...) logMessage(E_ERROR, __VA_ARGS__)
+# define DEVLOG_WARNING(...) logMessage(E_WARNING, __VA_ARGS__)
+# define DEVLOG_INFO(...) logMessage(E_INFO, __VA_ARGS__)
+# define DEVLOG_DEBUG(...)
+# define DEVLOG_ERROR_VAR(X) X
+# define DEVLOG_WARNING_VAR(X) X
+# define DEVLOG_INFO_VAR(X) X
+# define DEVLOG_DEBUG_VAR(X)
#endif
#ifdef NOLOG
- #define DEVLOG_INFO(...)
- #define DEVLOG_WARNING(...)
- #define DEVLOG_ERROR(...)
- #define DEVLOG_DEBUG(...)
- #define DEVLOG_ERROR_VAR(X)
- #define DEVLOG_WARNING_VAR(X)
- #define DEVLOG_INFO_VAR(X)
- #define DEVLOG_DEBUG_VAR(X)
+# define DEVLOG_INFO(...)
+# define DEVLOG_WARNING(...)
+# define DEVLOG_ERROR(...)
+# define DEVLOG_DEBUG(...)
+# define DEVLOG_ERROR_VAR(X)
+# define DEVLOG_WARNING_VAR(X)
+# define DEVLOG_INFO_VAR(X)
+# define DEVLOG_DEBUG_VAR(X)
#endif
#if (defined(FORTE_TRACE_EVENTS) && !defined(NOLOG))
-#define FORTE_TRACE(...) logMessage(E_TRACE, __VA_ARGS__)
+# define FORTE_TRACE(...) logMessage(E_TRACE, __VA_ARGS__)
#else
- #define FORTE_TRACE(...)
+# define FORTE_TRACE(...)
#endif
-
#ifndef NOLOG
/*! \brief Adds an Entry to the LogBook
*
*/
-void logMessage(E_MsgLevel pa_eLevel, const char *pa_acMessage, ...);
+void logMessage(E_MsgLevel paLevel, const char *pacMessage, ...);
#endif //#ifndef NOLOG
diff --git a/src/arch/ecos/CMakeLists.txt b/src/arch/ecos/CMakeLists.txt
index 5d2ef14..2b664b2 100644
--- a/src/arch/ecos/CMakeLists.txt
+++ b/src/arch/ecos/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2010 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
add_subdirectory(phycoreat91)
diff --git a/src/arch/ecos/ecoscppinit.cpp b/src/arch/ecos/ecoscppinit.cpp
index c2d9927..80d2179 100644
--- a/src/arch/ecos/ecoscppinit.cpp
+++ b/src/arch/ecos/ecoscppinit.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/ecostiha.cpp b/src/arch/ecos/ecostiha.cpp
index 76c96f5..ed21a88 100644
--- a/src/arch/ecos/ecostiha.cpp
+++ b/src/arch/ecos/ecostiha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/ecostiha.h b/src/arch/ecos/ecostiha.h
index 10ff546..358fdd5 100644
--- a/src/arch/ecos/ecostiha.h
+++ b/src/arch/ecos/ecostiha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_architecture.cpp b/src/arch/ecos/forte_architecture.cpp
index 50dea35..47d1b5c 100644
--- a/src/arch/ecos/forte_architecture.cpp
+++ b/src/arch/ecos/forte_architecture.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_instance.cpp b/src/arch/ecos/forte_instance.cpp
index a3f9707..d75898c 100644
--- a/src/arch/ecos/forte_instance.cpp
+++ b/src/arch/ecos/forte_instance.cpp
@@ -1,135 +1,136 @@
-/*******************************************************************************
- * Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
*
- * Contributors:
- * Jose Cabral - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#include "forte_instance.h"
-#include <forte_printer.h>
-
-#include "fortenew.h"
-#include "forte_architecture.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../../stdfblib/ita/RMT_DEV.h"
-
-unsigned const int cgForteDefaultPort = 61499;
-
-/*!\brief Check if the correct endianess has been configured.
- *
- * If the right endianess is not set this function will end FORTE.
- */
-bool checkEndianess();
-
-void createDev(const char *paMGRID, TForteInstance* paResultDevice);
-
-void forteGlobalInitialize(void){
- CForteArchitecture::initialize();
-}
-
-void forteGlobalDeinitialize(void){
- CForteArchitecture::deinitialize();
-}
-
-int forteStartInstance(unsigned int paPort, TForteInstance* paResultDevice){
-
- if (65535 < paPort){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 == paPort){
- paPort = cgForteDefaultPort;
- }
-
- char address[16] = "localhost:";
- char port[6];
- forte_snprintf(port, 5, "%u", paPort);
- strcat(address, port);
-
- char* arguments[] = {address};
- return forteStartInstanceGeneric(1, arguments, paResultDevice);
-}
-
-
-int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultDevice){
-
- if(!CForteArchitecture::isInitialized()){
- return FORTE_ARCHITECTURE_NOT_READY;
- }
-
- if(0 == paResultDevice){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 != *paResultDevice){
- return FORTE_DEVICE_ALREADY_STARTED;
- }
-
- if (!checkEndianess()){
- return FORTE_WRONG_ENDIANESS;
- }
-
- if(argc < 1){ //! Default Value (localhost:61499)
- createDev("localhost:61499", paResultDevice);
- }
- else if(1 == argc){
- createDev(arg[0], paResultDevice);
- }
- else{ //! Lists the help for FORTE
- return FORTE_WRONG_PARAMETERS;
- }
-
- return FORTE_OK;
-}
-
-void forteStopInstance(int paSig, TForteInstance paResultDevice){
- if(!CForteArchitecture::isInitialized()){
- return;
- }
- (void) paSig;
- RMT_DEV *poDev = static_cast<RMT_DEV*>(paResultDevice);
- if(0 != poDev){
- poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
- poDev->MGR.joinResourceThread();
- DEVLOG_INFO("FORTE finished\n");
- delete poDev;
- }
-}
-
-/*!\brief Creates the Device-Object
- * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
- * \param The result
- */
-void createDev(const char *paMGRID, TForteInstance* paResultDevice){
- RMT_DEV *poDev = new RMT_DEV;
- poDev->setMGR_ID(paMGRID);
- poDev->startDevice();
- *paResultDevice = poDev;
- DEVLOG_INFO("FORTE is up and running\n");
-}
-
-bool checkEndianess(){
- volatile TForteInt16 i = 1;
- char *p = (char *) &i;
- if(p[0] == 1){
- //we are on a little endian platform
-#ifdef FORTE_BIG_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
- return false;
-#endif
- }
- else{
- //we are on a big endian platform
-#ifdef FORTE_LITTLE_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
- return false;
-#endif
- }
-
- return true;
-}
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ * Tarik Terzimehic - make OPC UA server port setable from the command line
+ *******************************************************************************/
+
+#include "forte_instance.h"
+#include <forte_printer.h>
+
+#include "fortenew.h"
+#include "forte_architecture.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "../../stdfblib/ita/RMT_DEV.h"
+
+#include "../utils/mainparam_utils.h"
+
+unsigned const int cgForteDefaultPort = 61499;
+
+/*!\brief Check if the correct endianess has been configured.
+ *
+ * If the right endianess is not set this function will end FORTE.
+ */
+bool checkEndianess();
+
+void createDev(const char *paMGRID, TForteInstance* paResultDevice);
+
+void forteGlobalInitialize(void){
+ CForteArchitecture::initialize();
+}
+
+void forteGlobalDeinitialize(void){
+ CForteArchitecture::deinitialize();
+}
+
+int forteStartInstance(unsigned int paPort, TForteInstance* paResultDevice){
+
+ if(65535 < paPort){
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if(0 == paPort){
+ paPort = cgForteDefaultPort;
+ }
+
+ char address[16] = "localhost:";
+ char port[6];
+ forte_snprintf(port, 5, "%u", paPort);
+ strcat(address, port);
+
+ char* arguments[] = { address };
+ return forteStartInstanceGeneric(1, arguments, paResultDevice);
+}
+
+int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultDevice){
+
+ if(!CForteArchitecture::isInitialized()){
+ return FORTE_ARCHITECTURE_NOT_READY;
+ }
+
+ if(0 == paResultDevice){
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if(0 != *paResultDevice){
+ return FORTE_DEVICE_ALREADY_STARTED;
+ }
+
+ if(!checkEndianess()){
+ return FORTE_WRONG_ENDIANESS;
+ }
+
+ const char *pIpPort = parseCommandLineArguments(argc, arg);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))){
+ createDev(pIpPort, paResultDevice);
+ }
+ else{ //! If needed call listHelp() to list the help for FORTE
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ return FORTE_OK;
+}
+
+void forteStopInstance(int paSig, TForteInstance paResultDevice){
+ if(!CForteArchitecture::isInitialized()){
+ return;
+ }
+ (void) paSig;
+ RMT_DEV *poDev = static_cast<RMT_DEV*>(paResultDevice);
+ if(0 != poDev){
+ poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
+ poDev->MGR.joinResourceThread();
+ DEVLOG_INFO("FORTE finished\n");
+ delete poDev;
+ }
+}
+
+/*!\brief Creates the Device-Object
+ * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
+ * \param The result
+ */
+void createDev(const char *paMGRID, TForteInstance* paResultDevice){
+ RMT_DEV *poDev = new RMT_DEV;
+ poDev->setMGR_ID(paMGRID);
+ poDev->startDevice();
+ *paResultDevice = poDev;
+ DEVLOG_INFO("FORTE is up and running\n");
+}
+
+bool checkEndianess(){
+ volatile TForteInt16 i = 1;
+ char *p = (char *) &i;
+ if(p[0] == 1){
+ //we are on a little endian platform
+#ifdef FORTE_BIG_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
+ return false;
+#endif
+ }
+ else{
+ //we are on a big endian platform
+#ifdef FORTE_LITTLE_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
+ return false;
+#endif
+ }
+
+ return true;
+}
diff --git a/src/arch/ecos/forte_instance.h b/src/arch/ecos/forte_instance.h
index 1cd7a88..2c66534 100644
--- a/src/arch/ecos/forte_instance.h
+++ b/src/arch/ecos/forte_instance.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_sem.cpp b/src/arch/ecos/forte_sem.cpp
index 9ea8a0a..21a9801 100644
--- a/src/arch/ecos/forte_sem.cpp
+++ b/src/arch/ecos/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_sem.h b/src/arch/ecos/forte_sem.h
index a60e9af..2c94de0 100644
--- a/src/arch/ecos/forte_sem.h
+++ b/src/arch/ecos/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_sync.cpp b/src/arch/ecos/forte_sync.cpp
index 32f60b2..fa64eb5 100644
--- a/src/arch/ecos/forte_sync.cpp
+++ b/src/arch/ecos/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_sync.h b/src/arch/ecos/forte_sync.h
index 9843a5c..68d7d79 100644
--- a/src/arch/ecos/forte_sync.h
+++ b/src/arch/ecos/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_thread.cpp b/src/arch/ecos/forte_thread.cpp
index 8e54e7c..625c98e 100644
--- a/src/arch/ecos/forte_thread.cpp
+++ b/src/arch/ecos/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2016 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/forte_thread.h b/src/arch/ecos/forte_thread.h
index c5335ae..0fd81f7 100644
--- a/src/arch/ecos/forte_thread.h
+++ b/src/arch/ecos/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Carolyn Oates - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/fortealloc.h b/src/arch/ecos/fortealloc.h
index 11c05a9..6acd40c 100644
--- a/src/arch/ecos/fortealloc.h
+++ b/src/arch/ecos/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/nios2/CMakeLists.txt b/src/arch/ecos/nios2/CMakeLists.txt
index af40f5a..1e123de 100644
--- a/src/arch/ecos/nios2/CMakeLists.txt
+++ b/src/arch/ecos/nios2/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2018 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral - initial API and implementation and/or initial documentation
+# Copyright (c) 2018 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\nios2)
@@ -27,6 +28,7 @@
forte_add_sourcefile_hcpp(../forte_thread ../ecostiha ../forte_sync ../forte_sem ../forte_instance)
forte_add_sourcefile_cpp(../ecoscppinit.cpp ../../genforte_printer.cpp ../forte_architecture.cpp)
forte_add_sourcefile_h(../../forte_architecture_time.h)
+ forte_add_sourcefile_cpp(../../genforte_realFunctions.cpp ../../posix/forte_architecture_time.cpp)
if(FORTE_COM_ETH)
forte_add_handler(CFDSelectHandler ../sockhand)
diff --git a/src/arch/ecos/phycoreat91/CMakeLists.txt b/src/arch/ecos/phycoreat91/CMakeLists.txt
index 34c5e40..4292abf 100644
--- a/src/arch/ecos/phycoreat91/CMakeLists.txt
+++ b/src/arch/ecos/phycoreat91/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 -2105 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2010 -2105 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\phycoreat91)
@@ -21,6 +22,8 @@
forte_add_sourcefile_cpp(../../genforte_printer.cpp)
forte_add_sourcefile_h(../../forte_architecture_time.h)
forte_add_to_executable_cpp(main)
+ forte_add_sourcefile_cpp(../../genforte_realFunctions.cpp ../../posix/forte_architecture_time.cpp)
+
if(FORTE_COM_ETH)
forte_add_handler(CFDSelectHandler ../sockhand)
diff --git a/src/arch/ecos/phycoreat91/phycoreAT91main.cpp b/src/arch/ecos/phycoreat91/phycoreAT91main.cpp
index 03a74d6..a4908db 100644
--- a/src/arch/ecos/phycoreat91/phycoreAT91main.cpp
+++ b/src/arch/ecos/phycoreat91/phycoreAT91main.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006, 2007, 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/ecos/sockhand.h b/src/arch/ecos/sockhand.h
index d24b5c6..f7ee186 100644
--- a/src/arch/ecos/sockhand.h
+++ b/src/arch/ecos/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/fdselecthand.cpp b/src/arch/fdselecthand.cpp
index f678ae5..356d371 100644
--- a/src/arch/fdselecthand.cpp
+++ b/src/arch/fdselecthand.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
@@ -94,10 +95,7 @@
mSync.unlock();
}
else{
- if(retval == 0){
-// printf(".");
- }
- else{
+ if(retval != 0) {
#ifdef WIN32
DEVLOG_ERROR("Select failed: %d", WSAGetLastError());
#else
diff --git a/src/arch/fdselecthand.h b/src/arch/fdselecthand.h
index fc60224..46669bf 100644
--- a/src/arch/fdselecthand.h
+++ b/src/arch/fdselecthand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Patrick Smejkal
@@ -30,7 +31,7 @@
* data reception. Examples for possible file descriptors are sockets or com re
*/
-class CFDSelectHandler : public CExternalEventHandler, private CThread{
+class CFDSelectHandler : public CExternalEventHandler, private CThread {
DECLARE_HANDLER(CFDSelectHandler)
public:
typedef FORTE_SOCKET_TYPE TFileDescriptor; //!< General type definition for a file descriptor. To be used by the callback classes.
diff --git a/src/arch/forte_architecture.h b/src/arch/forte_architecture.h
index 0274008..23a699f 100644
--- a/src/arch/forte_architecture.h
+++ b/src/arch/forte_architecture.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/forte_architecture_time.h b/src/arch/forte_architecture_time.h
index 73d1580..97eb81f 100644
--- a/src/arch/forte_architecture_time.h
+++ b/src/arch/forte_architecture_time.h
@@ -1,12 +1,14 @@
/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2017 fortiss GmbH, 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
+ * Martin Melik-Merkumians - adds function for getting monotonic time in nanoseconds
*******************************************************************************/
#ifndef SRC_ARCH_FORTE_ARCHITECTURE_TIME_H_
@@ -14,6 +16,8 @@
#include <time.h>
+#include "forte_constants.h"
+
#if defined(WINCE)
#include <wce_time.h>
@@ -33,9 +37,10 @@
}
inline
-time_t forte_time(time_t* pa_time){
- return wceex_time(pa_time);
+time_t forte_time(){
+ return wceex_time(0);
}
+
#else
inline
@@ -54,9 +59,12 @@
}
inline
-time_t forte_time(time_t* pa_time){
- return time(pa_time);
+time_t forte_time(){
+ return time(0);
}
+
#endif
+uint_fast64_t getNanoSecondsMonotonic();
+
#endif /* SRC_ARCH_FORTE_ARCHITECTURE_TIME_H_ */
diff --git a/src/arch/forte_printer.h b/src/arch/forte_printer.h
index 8cc8854..e9ca1ff 100644
--- a/src/arch/forte_printer.h
+++ b/src/arch/forte_printer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/forte_realFunctions.h b/src/arch/forte_realFunctions.h
new file mode 100644
index 0000000..92a374b
--- /dev/null
+++ b/src/arch/forte_realFunctions.h
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef SRC_ARCH_FORTE_REALFUNCTIONS_H_
+#define SRC_ARCH_FORTE_REALFUNCTIONS_H_
+
+#include "datatype.h"
+
+TForteFloat forte_stringToFloat(const char* paStr, char** paEndPtr);
+
+
+#endif /* SRC_ARCH_FORTE_REALFUNCTIONS_H_ */
diff --git a/src/arch/fortenew.h b/src/arch/fortenew.h
index d07f0c5..a6e60e3 100644
--- a/src/arch/fortenew.h
+++ b/src/arch/fortenew.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2016 ACIN, nxtcontrol GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Stanislav Meduna, Monika Wenger
@@ -21,6 +22,7 @@
#ifndef FORTE_USE_DEFAULT_NEW_AND_DELETE
//With this define platforms can use the default new and delete operators provided by the standard library
//It should be set in the fortealloc.h file
+//By default, forte is built using these implementations. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=544048
/*!Collection of new and delete operators used by forte for dynamically allocating memory.
*
diff --git a/src/arch/freeRTOS/CMakeLists.txt b/src/arch/freeRTOS/CMakeLists.txt
index 4cc4a44..46573b6 100644
--- a/src/arch/freeRTOS/CMakeLists.txt
+++ b/src/arch/freeRTOS/CMakeLists.txt
@@ -1,12 +1,13 @@
#/************************************************************************************
-# * Copyright (c) 2016 - 2018 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Guru Chandrasekhara - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 - 2018 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Guru Chandrasekhara - initial API and implementation and/or initial documentation
# * Jose Cabral - Cleaning
# ************************************************************************************/
@@ -17,36 +18,35 @@
if("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP")
+ forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
set(FORTE_LOGLEVEL "NOLOG" CACHE STRING "Loglevel to use" FORCE)
SET(FORTE_FreeRTOSLwIP_INCLUDES "" CACHE STRING "Folders to include from the FreeRTOS OS and the LwIP stack")
SET(FORTE_FreeRTOSLwIP_LIB_DIR "" CACHE PATH "Only for executable: ABSOLUTE path to FreeRTOSLwIP folder with object library FORTE_FreeRTOSLwIP_LIB")
SET(FORTE_FreeRTOSLwIP_LIB "" CACHE STRING "Only for executable: FreeRTOSLwIP Library file in FORTE_FreeRTOSLwIP_DIR to be linked to forte")
- forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
forte_add_sourcefile_h(fortealloc.h)
forte_add_sourcefile_hcpp(forte_thread forte_sync freertostiha forte_sem forte_Init)
forte_add_sourcefile_cpp(forte_architecture.cpp ../genforte_printer.cpp)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ./forte_architecture_time.cpp)
+
+ forte_add_to_executable_cpp(main)
+
+ forte_add_definition("-DFORTE_LITTLE_ENDIAN")
+
+ forte_add_include_system_directories(${FORTE_FreeRTOSLwIP_INCLUDES})
if(FORTE_COM_ETH)
forte_add_handler(CFDSelectHandler sockhand)
forte_add_sourcefile_hcpp( ../fdselecthand ../bsdsocketinterf)
forte_add_sourcefile_h(../gensockhand.h)
forte_add_sourcefile_h(sockhand.h)
+
+ message("freeRTOS with LwIP arch needs the following flags to be defined (please do it in lwipopts.h):")
+ message("#define LWIP_COMPAT_SOCKETS 1")
+ message("#define LWIP_IGMP 1 //to use IP_ADD_MEMBERSHIP")
+ message("#define LWIP_TIMEVAL_PRIVATE 0 //This is optional. Set this flag if you get a compilation error about redefinition of struct timeval")
endif(FORTE_COM_ETH)
- forte_add_to_executable_cpp(main)
-
- forte_add_definition("-DFORTE_LITTLE_ENDIAN")
- forte_add_definition("-D__USE_W32_SOCKETS") #to hide the FD functions
-
- forte_add_include_directories(../${CMAKE_CURRENT_SOURCE_DIR})
-
- forte_add_include_system_directories(${FORTE_FreeRTOSLwIP_INCLUDES})
-
- forte_add_definition(-mcpu=cortex-m3 -mthumb) #CPU dependant
- forte_add_definition("-ffunction-sections -fdata-sections -fstack-usage -Wall -specs=nano.specs -DLWIP_TIMEVAL_PRIVATE=0 -fno-threadsafe-statics -fno-rtti -fno-exceptions")
-
-
endif()
diff --git a/src/arch/freeRTOS/forte_Init.cpp b/src/arch/freeRTOS/forte_Init.cpp
index 51b707f..cadadcf 100644
--- a/src/arch/freeRTOS/forte_Init.cpp
+++ b/src/arch/freeRTOS/forte_Init.cpp
@@ -1,144 +1,141 @@
-/************************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/************************************************************************************
+ * Copyright (c) 2017-2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
*
- * Contributors:
- * Milan Vathoopan - initial API and implementation and/or initial documentation
- ************************************************************************************/
-
-#include "forte_Init.h"
-
-#include "fortenew.h"
-#include "forte_architecture.h"
-#include <stdio.h>
-#include <string>
-#include "../../stdfblib/ita/RMT_DEV.h"
-
-unsigned int forte_default_port = 61499;
-
-/*!\brief Check if the correct endianess has been configured.
- *
- * If the right endianess is not set this function will end FORTE.
- */
-
-bool checkEndianess();
-void createDev(const char *paMGRID, TForteInstance* paResultInstance);
-
-void forteGlobalInitialize(void){
- CForteArchitecture::initialize();
-}
-
-void forteGlobalDeinitialize(void){
- CForteArchitecture::deinitialize();
-}
-
-int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance){
-
- if (65535 < paPort){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 == paPort){
- paPort = forte_default_port;
- }
-
- char flag[] = "-c";
- char address[16] = "localhost:";
- char port[6];
- sprintf(port, "%u", paPort);
- strcat(address, port);
-
- char* arguments[] = {flag, address};
- return forteStartInstanceGeneric(2, arguments, paResultInstance);
-}
-
-
-int forteStartInstanceGeneric(int paArgc, char *paArgv[], TForteInstance* paResultInstance){
-
- if(!CForteArchitecture::isInitialized()){
- return FORTE_ARCHITECTURE_NOT_READY;
- }
-
- if(0 == paResultInstance){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 != *paResultInstance){
- return FORTE_DEVICE_ALREADY_STARTED;
- }
-
- if (!checkEndianess()){
- return FORTE_WRONG_ENDIANESS;
- }
-
- if(paArgc <= 1){ //! Default Value (localhost:61499)
- createDev("localhost:61499", paResultInstance);
- }
- else{
- if(strcmp("-c", paArgv[0]) == 0){ //! sets the destination for the connection
- createDev(paArgv[1], paResultInstance);
- }
- else{ //! Lists the help for FORTE
- return FORTE_WRONG_PARAMETERS;
- }
- }
-
- return FORTE_OK;
-}
-
-void forteJoinInstance(TForteInstance paInstance){
- RMT_DEV *poDev = static_cast<RMT_DEV*>(paInstance);
- if(0 != poDev){
- poDev->MGR.joinResourceThread();
- }
-}
-
-void forteStopInstance(int paSig, TForteInstance paInstance){
- if(!CForteArchitecture::isInitialized()){
- return;
- }
- (void) paSig;
- RMT_DEV *poDev = static_cast<RMT_DEV*>(paInstance);
- if(0 != poDev){
- poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
- poDev->MGR.joinResourceThread();
- DEVLOG_INFO("FORTE finished\n");
- delete poDev;
- }
-}
-
-/*!\brief Creates the Device-Object
- * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
- * \param The result
- */
-void createDev(const char *paMGRID, TForteInstance* paInstance){
- RMT_DEV *device = new RMT_DEV;
- device->setMGR_ID(paMGRID);
- device->startDevice();
- *paInstance = device;
- DEVLOG_INFO("FORTE is up and running\n");
-}
-
-bool checkEndianess(){
- int i = 1;
- char *p = (char *) &i;
- if(p[0] == 1){
- //we are on a little endian platform
-#ifdef FORTE_BIG_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
- return false;
-#endif
- }
- else{
- //we are on a big endian platform
-#ifdef FORTE_LITTLE_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
- return false;
-#endif
- }
-
- return true;
-}
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Milan Vathoopan - initial API and implementation and/or initial documentation
+ * Tarik Terzimehic - make OPC UA server port setable from the command line
+ ************************************************************************************/
+
+#include "forte_Init.h"
+
+#include "fortenew.h"
+#include "forte_architecture.h"
+#include <stdio.h>
+#include <string>
+#include "../../stdfblib/ita/RMT_DEV.h"
+
+#include "../utils/mainparam_utils.h"
+
+unsigned int forte_default_port = 61499;
+
+/*!\brief Check if the correct endianess has been configured.
+ *
+ * If the right endianess is not set this function will end FORTE.
+ */
+
+bool checkEndianess();
+void createDev(const char *paMGRID, TForteInstance* paResultInstance);
+
+void forteGlobalInitialize(void) {
+ CForteArchitecture::initialize();
+}
+
+void forteGlobalDeinitialize(void) {
+ CForteArchitecture::deinitialize();
+}
+
+int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance) {
+
+ if(65535 < paPort) {
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if(0 == paPort) {
+ paPort = forte_default_port;
+ }
+
+ char flag[] = "-c";
+ char address[16] = "localhost:";
+ char port[6];
+ sprintf(port, "%u", paPort);
+ strcat(address, port);
+
+ char* arguments[] = { flag, address };
+ return forteStartInstanceGeneric(2, arguments, paResultInstance);
+}
+
+int forteStartInstanceGeneric(int paArgc, char *paArgv[], TForteInstance* paResultInstance) {
+
+ if(!CForteArchitecture::isInitialized()) {
+ return FORTE_ARCHITECTURE_NOT_READY;
+ }
+
+ if(0 == paResultInstance) {
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if(0 != *paResultInstance) {
+ return FORTE_DEVICE_ALREADY_STARTED;
+ }
+
+ if(!checkEndianess()) {
+ return FORTE_WRONG_ENDIANESS;
+ }
+
+ const char *pIpPort = parseCommandLineArguments(paArgc, paArgv);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))) {
+ createDev(pIpPort, paResultInstance);
+ } else { //! If needed call listHelp() to list the help for FORTE
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ return FORTE_OK;
+}
+
+void forteJoinInstance(TForteInstance paInstance) {
+ RMT_DEV *poDev = static_cast<RMT_DEV*>(paInstance);
+ if(0 != poDev) {
+ poDev->MGR.joinResourceThread();
+ }
+}
+
+void forteStopInstance(int paSig, TForteInstance paInstance) {
+ if(!CForteArchitecture::isInitialized()) {
+ return;
+ }
+ (void) paSig;
+ RMT_DEV *poDev = static_cast<RMT_DEV*>(paInstance);
+ if(0 != poDev) {
+ poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
+ poDev->MGR.joinResourceThread();
+ DEVLOG_INFO("FORTE finished\n");
+ delete poDev;
+ }
+}
+
+/*!\brief Creates the Device-Object
+ * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
+ * \param The result
+ */
+void createDev(const char *paMGRID, TForteInstance* paInstance) {
+ RMT_DEV *device = new RMT_DEV;
+ device->setMGR_ID(paMGRID);
+ device->startDevice();
+ *paInstance = device;
+ DEVLOG_INFO("FORTE is up and running\n");
+}
+
+bool checkEndianess() {
+ int i = 1;
+ char *p = (char *) &i;
+ if(p[0] == 1) {
+ //we are on a little endian platform
+#ifdef FORTE_BIG_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
+ return false;
+#endif
+ } else {
+ //we are on a big endian platform
+#ifdef FORTE_LITTLE_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
+ return false;
+#endif
+ }
+
+ return true;
+}
diff --git a/src/arch/freeRTOS/forte_Init.h b/src/arch/freeRTOS/forte_Init.h
index c126237..d89bb20 100644
--- a/src/arch/freeRTOS/forte_Init.h
+++ b/src/arch/freeRTOS/forte_Init.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan - initial API and implementation and/or initial documentation
@@ -18,19 +19,18 @@
*
*/
#ifndef FORTE_SHARED_PREFIX
- #define FORTE_SHARED_PREFIX
+# define FORTE_SHARED_PREFIX
#endif
#ifndef FORTE_SHARED_CALL
- #define FORTE_SHARED_CALL
+# define FORTE_SHARED_CALL
#endif
-
#ifdef __cplusplus
extern "C" {
#endif
- enum FORTE_STATUS{
+ enum FORTE_STATUS {
FORTE_OK,
FORTE_DEVICE_ALREADY_STARTED,
FORTE_WRONG_ENDIANESS,
@@ -84,6 +84,4 @@
}
#endif
-
-
#endif /* SRC_ARCH_FREERTOS_FORTE_INIT_H_ */
diff --git a/src/arch/freeRTOS/forte_architecture.cpp b/src/arch/freeRTOS/forte_architecture.cpp
index b606c5c..d4a1d25 100644
--- a/src/arch/freeRTOS/forte_architecture.cpp
+++ b/src/arch/freeRTOS/forte_architecture.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan - initial API and implementation and/or initial documentation
@@ -13,18 +14,17 @@
#include "forteinit.h"
bool CForteArchitecture::mInitialized = false;
-bool CForteArchitecture::initialize(){
- if (!mInitialized){
+bool CForteArchitecture::initialize() {
+ if(!mInitialized) {
initForte();
mInitialized = true;
}
return true;
}
-void CForteArchitecture::deinitialize(){
- if(mInitialized){
+void CForteArchitecture::deinitialize() {
+ if(mInitialized) {
mInitialized = false;
}
}
-
diff --git a/src/arch/freeRTOS/forte_architecture_time.cpp b/src/arch/freeRTOS/forte_architecture_time.cpp
new file mode 100644
index 0000000..7f03e04
--- /dev/null
+++ b/src/arch/freeRTOS/forte_architecture_time.cpp
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <FreeRTOS.h>
+#include <task.h>
+
+#include "forte_architecture_time.h"
+#include "forte_constants.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ return (static_cast<uint_fast64_t>(xTaskGetTickCount()) * (forte::core::constants::cNanosecondsPerSecond / static_cast<uint_fast64_t>(configTICK_RATE_HZ)));
+}
+
+
diff --git a/src/arch/freeRTOS/forte_sem.cpp b/src/arch/freeRTOS/forte_sem.cpp
index 1789592..bf6dcd1 100644
--- a/src/arch/freeRTOS/forte_sem.cpp
+++ b/src/arch/freeRTOS/forte_sem.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -17,36 +18,36 @@
namespace forte {
namespace arch {
- CFreeRTOSSemaphore::CFreeRTOSSemaphore(unsigned int paInitialValue){
+ CFreeRTOSSemaphore::CFreeRTOSSemaphore(unsigned int paInitialValue) {
mSemaphore = xSemaphoreCreateBinary();
}
- CFreeRTOSSemaphore::~CFreeRTOSSemaphore(){
+ CFreeRTOSSemaphore::~CFreeRTOSSemaphore() {
vSemaphoreDelete(mSemaphore);
}
- void CFreeRTOSSemaphore::inc(){
+ void CFreeRTOSSemaphore::inc() {
xSemaphoreGive(mSemaphore);
}
- void CFreeRTOSSemaphore::waitIndefinitely(){
- if(mSemaphore != NULL){
+ void CFreeRTOSSemaphore::waitIndefinitely() {
+ if(mSemaphore != NULL) {
xSemaphoreTake(mSemaphore, portMAX_DELAY);
}
}
- bool CFreeRTOSSemaphore::timedWait(const TForteUInt64 paRelativeTimeout){
- if(mSemaphore != NULL){
- return xSemaphoreTake(mSemaphore, pdMS_TO_TICKS (paRelativeTimeout / 1000000));
+ bool CFreeRTOSSemaphore::timedWait(const TForteUInt64 paRelativeTimeout) {
+ if(mSemaphore != NULL) {
+ return xSemaphoreTake(mSemaphore, pdMS_TO_TICKS(paRelativeTimeout / 1000000));
}
return false;
}
- bool CFreeRTOSSemaphore::tryNoWait(){
- if(mSemaphore != NULL){
+ bool CFreeRTOSSemaphore::tryNoWait() {
+ if(mSemaphore != NULL) {
return xSemaphoreTake(mSemaphore, 0);
}
return false;
}
- } /* namespace arch */
- } /* namespace forte */
+ } /* namespace arch */
+} /* namespace forte */
diff --git a/src/arch/freeRTOS/forte_sem.h b/src/arch/freeRTOS/forte_sem.h
index 5b6ba4b..5208dc2 100644
--- a/src/arch/freeRTOS/forte_sem.h
+++ b/src/arch/freeRTOS/forte_sem.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -12,8 +13,8 @@
#ifndef SRC_ARCH_FREERTOS_SEMAPHORE_H_
#define SRC_ARCH_FREERTOS_SEMAPHORE_H_
-#include <FreeRTOS_Source/include/FreeRTOS.h>
-#include <FreeRTOS_Source/include/semphr.h>
+#include <FreeRTOS.h>
+#include <semphr.h>
#include "../datatype.h"
namespace forte {
@@ -23,10 +24,10 @@
*
* The semaphore is initialized with the value given.
*/
- class CFreeRTOSSemaphore{
+ class CFreeRTOSSemaphore {
public:
- explicit CFreeRTOSSemaphore(unsigned int paInitialValue = 0);
+ explicit CFreeRTOSSemaphore(unsigned int paInitialValue = 0);
~CFreeRTOSSemaphore();
void inc();
@@ -49,7 +50,6 @@
SemaphoreHandle_t mSemaphore;
};
-
typedef CFreeRTOSSemaphore CSemaphore;
} /* namespace arch */
diff --git a/src/arch/freeRTOS/forte_sync.cpp b/src/arch/freeRTOS/forte_sync.cpp
index 408baac..5e24fd8 100644
--- a/src/arch/freeRTOS/forte_sync.cpp
+++ b/src/arch/freeRTOS/forte_sync.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -11,10 +12,10 @@
#include "forte_sync.h"
-CFreeRTOSSyncObject::CFreeRTOSSyncObject(){
+CFreeRTOSSyncObject::CFreeRTOSSyncObject() {
mMutexHandle = xSemaphoreCreateMutex();
}
-CFreeRTOSSyncObject::~CFreeRTOSSyncObject(){
+CFreeRTOSSyncObject::~CFreeRTOSSyncObject() {
vSemaphoreDelete(mMutexHandle);
}
diff --git a/src/arch/freeRTOS/forte_sync.h b/src/arch/freeRTOS/forte_sync.h
index 1e29e4e..82c63a6 100644
--- a/src/arch/freeRTOS/forte_sync.h
+++ b/src/arch/freeRTOS/forte_sync.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -11,8 +12,8 @@
#ifndef _SYNC_H_
#define _SYNC_H_
-#include <FreeRTOS_Source/include/FreeRTOS.h>
-#include <FreeRTOS_Source/include/semphr.h>
+#include <FreeRTOS.h>
+#include <semphr.h>
#define CSyncObject CFreeRTOSSyncObject //allows that doxygen can generate better documenation
@@ -24,26 +25,28 @@
* Note: For Mutex implementation, uncomment the xSemaphoreCreateMutex() function in sync.cpp
*/
-class CFreeRTOSSyncObject{
- private:
- protected:
- //! The posix thread mutex handle of the operating system.
- SemaphoreHandle_t mMutexHandle;
+class CFreeRTOSSyncObject {
public:
CFreeRTOSSyncObject();
~CFreeRTOSSyncObject();
- /*!\brief Lock the resource coming after the lock command
- *
- * This function blocks until it will get the lock for the coming critical section.
- */
- void lock(void){
- xSemaphoreTake(mMutexHandle, portMAX_DELAY);
- };
- //!Free the resource coming after the lock command
- void unlock(void){
- xSemaphoreGive( mMutexHandle );
- };
+ /*!\brief Lock the resource coming after the lock command
+ *
+ * This function blocks until it will get the lock for the coming critical section.
+ */
+ void lock(void) {
+ xSemaphoreTake(mMutexHandle, portMAX_DELAY);
+ }
+
+ //!Free the resource coming after the lock command
+ void unlock(void) {
+ xSemaphoreGive(mMutexHandle);
+ }
+
+ private:
+
+ //! The posix thread mutex handle of the operating system.
+ SemaphoreHandle_t mMutexHandle;
};
#endif /*SYNC_H_*/
diff --git a/src/arch/freeRTOS/forte_thread.cpp b/src/arch/freeRTOS/forte_thread.cpp
index 24a2c8d..9e85a1d 100644
--- a/src/arch/freeRTOS/forte_thread.cpp
+++ b/src/arch/freeRTOS/forte_thread.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -19,34 +20,34 @@
*/
const int CFreeRTOSThread::scmForteTaskPriority = tskIDLE_PRIORITY + 4;
-CFreeRTOSThread::CFreeRTOSThread(long paStackSize) : CThreadBase(paStackSize){
+CFreeRTOSThread::CFreeRTOSThread(long paStackSize) :
+ CThreadBase(paStackSize) {
mStack = new char[paStackSize];
}
-CFreeRTOSThread::~CFreeRTOSThread(){
+CFreeRTOSThread::~CFreeRTOSThread() {
}
-void CFreeRTOSThread::threadFunction(void *paData){
+void CFreeRTOSThread::threadFunction(void *paData) {
CThreadBase::runThread(static_cast<CFreeRTOSThread *>(paData));
/* Tasks must not attempt to return from their implementing
- function or otherwise exit.
- https://www.freertos.org/implementing-a-FreeRTOS-task.html */
+ function or otherwise exit.
+ https://www.freertos.org/implementing-a-FreeRTOS-task.html */
vTaskDelete(NULL);
}
-forte::arch::CThreadBase<TaskHandle_t, TaskHandle_t(0) , CFreeRTOSThread>::TThreadHandleType CFreeRTOSThread::createThread(long paStackSize){
- TaskHandle_t handle = 0;
+forte::arch::CThreadBase<TaskHandle_t, TaskHandle_t(0), CFreeRTOSThread>::TThreadHandleType CFreeRTOSThread::createThread(long paStackSize) {
+ TaskHandle_t handle = 0;
- if(pdPASS != xTaskCreate(threadFunction, "FORTE", paStackSize, this, scmForteTaskPriority, &handle)){
- DEVLOG_ERROR("Error: Could not create FreeRTOS Task thread!");
- }
+ if(pdPASS != xTaskCreate(threadFunction, "FORTE", paStackSize, this, scmForteTaskPriority, &handle)) {
+ DEVLOG_ERROR("Error: Could not create FreeRTOS Task thread!");
+ }
- return handle;
+ return handle;
}
-
-void CFreeRTOSThread::sleepThread(unsigned int paMilliSeconds){
- vTaskDelay(pdMS_TO_TICKS (paMilliSeconds) );
+void CFreeRTOSThread::sleepThread(unsigned int paMilliSeconds) {
+ vTaskDelay(pdMS_TO_TICKS(paMilliSeconds));
}
-void CFreeRTOSThread::setDeadline(const CIEC_TIME &paVal){
+void CFreeRTOSThread::setDeadline(const CIEC_TIME &paVal) {
}
diff --git a/src/arch/freeRTOS/forte_thread.h b/src/arch/freeRTOS/forte_thread.h
index 8be35db..d0635e2 100644
--- a/src/arch/freeRTOS/forte_thread.h
+++ b/src/arch/freeRTOS/forte_thread.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -13,16 +14,19 @@
#ifndef SRC_ARCH_FREERTOS_THREAD_H_
#define SRC_ARCH_FREERTOS_THREAD_H_
+#include <FreeRTOS.h>
+#include <task.h>
+
#include "../datatype.h"
#include "../devlog.h"
#include "../../core/datatypes/forte_time.h"
#include "../threadbase.h"
#include "forte_sync.h"
-extern "C" {
-#include <FreeRTOS_Source/include/FreeRTOS.h>
-#include <FreeRTOS_Source/include/task.h>
-}
+//Allow to set a special stack size for forte threads
+#ifndef configMINIMAL_STACK_SIZE_FORTE
+# define configMINIMAL_STACK_SIZE_FORTE configMINIMAL_STACK_SIZE
+#endif
#define CThread CFreeRTOSThread //allows that doxygen can generate better documenation
class CFreeRTOSThread;
@@ -47,7 +51,7 @@
* @param pa_nStackSize the Size of the stack the thread is allowed to use. this class will
* allocate the stack size in bytes from the heap
*/
- explicit CFreeRTOSThread(long paStackSize = configMINIMAL_STACK_SIZE);
+ explicit CFreeRTOSThread(long paStackSize = configMINIMAL_STACK_SIZE_FORTE);
/*! \brief Stops and destroys thread.
*
@@ -67,7 +71,7 @@
protected:
- void setPriority(int paPriority){
+ void setPriority(int paPriority) {
DEVLOG_DEBUG(">>>>Thread: Set Priority: %d\n", paPriority);
vTaskPrioritySet(getThreadHandle(), paPriority);
}
@@ -91,5 +95,4 @@
};
-
#endif /* SRC_ARCH_FREERTOS_THREAD_H_ */
diff --git a/src/arch/freeRTOS/fortealloc.h b/src/arch/freeRTOS/fortealloc.h
index d439465..451e8c9 100644
--- a/src/arch/freeRTOS/fortealloc.h
+++ b/src/arch/freeRTOS/fortealloc.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -13,19 +14,19 @@
//If generic malloc and free are to be used, uncomment the next line, and comment the following
//#include "../genfortealloc.h"
-#include <FreeRTOS_Source/include/FreeRTOS.h>
+#include <FreeRTOS.h>
#include "datatype.h"
#include <stdlib.h>
inline
-void forte_free(void *paData){
+void forte_free(void *paData) {
vPortFree(paData);
}
inline
-void *forte_malloc(size_t paSize){
- return pvPortMalloc(paSize);
+void *forte_malloc(size_t paSize) {
+ return pvPortMalloc(paSize);
}
#endif /* FORTEALLOC_H_ */
diff --git a/src/arch/freeRTOS/freertostiha.cpp b/src/arch/freeRTOS/freertostiha.cpp
index ac1b5f2..50448cc 100644
--- a/src/arch/freeRTOS/freertostiha.cpp
+++ b/src/arch/freeRTOS/freertostiha.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -12,38 +13,37 @@
#include "fortenew.h"
#include "freertostiha.h"
-CTimerHandler* CTimerHandler::createTimerHandler(CDeviceExecution& paDeviceExecution){
+CTimerHandler* CTimerHandler::createTimerHandler(CDeviceExecution& paDeviceExecution) {
return new CFreeRTOSTimerHandler(paDeviceExecution);
}
-CFreeRTOSTimerHandler::CFreeRTOSTimerHandler(CDeviceExecution& paDeviceExecution) : CTimerHandler(paDeviceExecution) {
- mTimer = xTimerCreate("FORTETimer",
- pdMS_TO_TICKS (1000 / getTicksPerSecond()),
- pdTRUE, ( void * ) this, vCallbackFunction);
+CFreeRTOSTimerHandler::CFreeRTOSTimerHandler(CDeviceExecution& paDeviceExecution) :
+ CTimerHandler(paDeviceExecution) {
+ mTimer = xTimerCreate("FORTETimer", pdMS_TO_TICKS(1000 / getTicksPerSecond()), pdTRUE, (void *) this, vCallbackFunction);
}
-CFreeRTOSTimerHandler::~CFreeRTOSTimerHandler(){
+CFreeRTOSTimerHandler::~CFreeRTOSTimerHandler() {
disableHandler();
xTimerDelete(mTimer, 0);
}
-void CFreeRTOSTimerHandler::enableHandler(void){
- xTimerStart(mTimer,0);
+void CFreeRTOSTimerHandler::enableHandler(void) {
+ xTimerStart(mTimer, 0);
}
-void CFreeRTOSTimerHandler::disableHandler(void){
- xTimerStop(mTimer,0);
+void CFreeRTOSTimerHandler::disableHandler(void) {
+ xTimerStop(mTimer, 0);
}
-void CFreeRTOSTimerHandler::setPriority(int paPriority){
+void CFreeRTOSTimerHandler::setPriority(int paPriority) {
}
-int CFreeRTOSTimerHandler::getPriority(void) const{
+int CFreeRTOSTimerHandler::getPriority(void) const {
return 1;
}
-void CFreeRTOSTimerHandler::vCallbackFunction(TimerHandle_t paTimer){
- static_cast<CFreeRTOSTimerHandler*>(paTimer)->nextTick();
+void CFreeRTOSTimerHandler::vCallbackFunction(TimerHandle_t paTimer) {
+ static_cast<CFreeRTOSTimerHandler*>(pvTimerGetTimerID(paTimer))->nextTick();
}
diff --git a/src/arch/freeRTOS/freertostiha.h b/src/arch/freeRTOS/freertostiha.h
index 292756f..9486276 100644
--- a/src/arch/freeRTOS/freertostiha.h
+++ b/src/arch/freeRTOS/freertostiha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -12,54 +13,46 @@
#ifndef SRC_ARCH_FREERTOS_FREERTOSTIHA_H_
#define SRC_ARCH_FREERTOS_FREERTOSTIHA_H_
+#include <FreeRTOS.h>
+#include <timers.h>
+
#include "../timerha.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <FreeRTOS_Source/include/FreeRTOS.h>
-#include <FreeRTOS_Source/include/timers.h>
-
/*! \brief External event handler for the FreeRTOS Timer.
* \ingroup FreeRTOS-HAL
*
*/
-class CFreeRTOSTimerHandler : public CTimerHandler{
-public:
- virtual ~CFreeRTOSTimerHandler();
+class CFreeRTOSTimerHandler : public CTimerHandler {
+ public:
+ virtual ~CFreeRTOSTimerHandler();
- /*!\brief Enables this event source
- *
- */
- virtual void enableHandler(void);
- /*!\brief Disable this event source
- */
- virtual void disableHandler(void);
- /*!\brief Sets the priority of the event source
- *
- * \param pa_nPriority new priority of the event source
- */
- virtual void setPriority(int paPriority);
- /*!\brief Get the current priority of the event source
- *
- * \return current priority
- */
- virtual int getPriority(void) const;
+ /*!\brief Enables this event source
+ *
+ */
+ virtual void enableHandler(void);
+ /*!\brief Disable this event source
+ */
+ virtual void disableHandler(void);
+ /*!\brief Sets the priority of the event source
+ *
+ * \param pa_nPriority new priority of the event source
+ */
+ virtual void setPriority(int paPriority);
+ /*!\brief Get the current priority of the event source
+ *
+ * \return current priority
+ */
+ virtual int getPriority(void) const;
-private:
+ private:
- explicit CFreeRTOSTimerHandler(CDeviceExecution& paDeviceExecution);
+ explicit CFreeRTOSTimerHandler(CDeviceExecution& paDeviceExecution);
- static void vCallbackFunction(TimerHandle_t paTimer);
+ static void vCallbackFunction(TimerHandle_t paTimer);
- TimerHandle_t mTimer;
+ TimerHandle_t mTimer;
- friend class CTimerHandler;
+ friend class CTimerHandler;
};
-#ifdef __cplusplus
-}
-#endif
-
#endif /* SRC_ARCH_FREERTOS_FREERTOSTIHA_H_ */
diff --git a/src/arch/freeRTOS/main.cpp b/src/arch/freeRTOS/main.cpp
index 764e86c..0330767 100644
--- a/src/arch/freeRTOS/main.cpp
+++ b/src/arch/freeRTOS/main.cpp
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -18,8 +19,8 @@
const static unsigned mainFORTE_TASK_PRIORITY = tskIDLE_PRIORITY + 1;
-void vForteTask( void* pvParameters ){
- ( void ) pvParameters;
+void vForteTask(void* pvParameters) {
+ (void) pvParameters;
RMT_DEV *poDev = new RMT_DEV;
@@ -32,13 +33,12 @@
vTaskDelete(NULL);
}
-void vStartForteServerTask(UBaseType_t uxPriority){
+void vStartForteServerTask(UBaseType_t uxPriority) {
/* Spawn the task. */
- xTaskCreate( vForteTask, "forte", 2000, NULL, uxPriority, ( TaskHandle_t * ) NULL );
+ xTaskCreate(vForteTask, "forte", 2000, NULL, uxPriority, (TaskHandle_t *) NULL);
}
-int main(void)
-{
+int main(void) {
vStartForteServerTask(mainFORTE_TASK_PRIORITY);
@@ -47,4 +47,3 @@
// Will not get here unless there is insufficient RAM.
}
-
diff --git a/src/arch/freeRTOS/sockhand.h b/src/arch/freeRTOS/sockhand.h
index 4263f62..ab7b7d8 100644
--- a/src/arch/freeRTOS/sockhand.h
+++ b/src/arch/freeRTOS/sockhand.h
@@ -1,9 +1,10 @@
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
@@ -12,8 +13,6 @@
#ifndef SRC_ARCH_FREERTOS_SOCKHAND_H_
#define SRC_ARCH_FREERTOS_SOCKHAND_H_
-#define LWIP_COMPAT_SOCKETS 1
-
#include "lwip/opt.h"
#include "lwip/sockets.h"
#include "lwip/api.h"
@@ -29,10 +28,10 @@
#include "devlog.h"
-#undef connect
-//
-inline int connect(int s, const struct sockaddr *name, socklen_t namelen){
-return lwip_connect(s, name, namelen);
+#undef connect //gets confused with connect function of conn.h and childs
+
+inline int connect(int s, const struct sockaddr *name, socklen_t namelen) {
+ return lwip_connect(s, name, namelen);
}
//these include needs to be last
diff --git a/src/arch/genforte_printer.cpp b/src/arch/genforte_printer.cpp
index 4ae1341..0b40779 100644
--- a/src/arch/genforte_printer.cpp
+++ b/src/arch/genforte_printer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/genforte_realFunctions.cpp b/src/arch/genforte_realFunctions.cpp
new file mode 100644
index 0000000..5a9e3cd
--- /dev/null
+++ b/src/arch/genforte_realFunctions.cpp
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include <stdlib.h>
+#include "forte_realFunctions.h"
+
+TForteFloat forte_stringToFloat(const char* paStr, char** paEndPtr) {
+#if defined(WIN32) || defined(__ECOS) || defined(VXWORKS)
+ return static_cast<TForteFloat>(strtod(paStr, paEndPtr));
+#else
+ return strtof(paStr, paEndPtr);
+#endif
+}
diff --git a/src/arch/genfortealloc.h b/src/arch/genfortealloc.h
index adb8b14..844bca1 100644
--- a/src/arch/genfortealloc.h
+++ b/src/arch/genfortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2013 ACIN, nxtcontrol GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Stanislav Meduna, Monika Wenger
diff --git a/src/arch/gensockhand.h b/src/arch/gensockhand.h
index fad5a60..8072884 100644
--- a/src/arch/gensockhand.h
+++ b/src/arch/gensockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/macos/CMakeLists.txt b/src/arch/macos/CMakeLists.txt
index 232ee21..be90412 100644
--- a/src/arch/macos/CMakeLists.txt
+++ b/src/arch/macos/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\macos)
@@ -24,6 +25,7 @@
forte_add_sourcefile_hcpp(../posix/forte_thread forte_sync forte_sem)
forte_add_sourcefile_cpp(../genforte_printer.cpp)
forte_add_sourcefile_h(../forte_architecture_time.h)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ../posix/forte_architecture_time.cpp)
forte_add_to_executable_cpp(../posix/main)
diff --git a/src/arch/macos/forte_sem.cpp b/src/arch/macos/forte_sem.cpp
index 9e339dd..1ee913d 100644
--- a/src/arch/macos/forte_sem.cpp
+++ b/src/arch/macos/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/macos/forte_sem.h b/src/arch/macos/forte_sem.h
index 2e76947..0a70298 100644
--- a/src/arch/macos/forte_sem.h
+++ b/src/arch/macos/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/macos/forte_sync.cpp b/src/arch/macos/forte_sync.cpp
index 3c5ce7d..30651fa 100644
--- a/src/arch/macos/forte_sync.cpp
+++ b/src/arch/macos/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2010, 2016 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic - initial API and implementation and/or initial
diff --git a/src/arch/macos/forte_sync.h b/src/arch/macos/forte_sync.h
index 527af28..2a63eb8 100644
--- a/src/arch/macos/forte_sync.h
+++ b/src/arch/macos/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2010, 2016 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic - initial API and implementation and/or initial
diff --git a/src/arch/macos/forte_thread.h b/src/arch/macos/forte_thread.h
index 354a1ea..9b7aa39 100644
--- a/src/arch/macos/forte_thread.h
+++ b/src/arch/macos/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/macos/fortealloc.h b/src/arch/macos/fortealloc.h
index eab8525..c1d36c6 100644
--- a/src/arch/macos/fortealloc.h
+++ b/src/arch/macos/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/macos/sockhand.h b/src/arch/macos/sockhand.h
index f258249..048e627 100644
--- a/src/arch/macos/sockhand.h
+++ b/src/arch/macos/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/netos/CMakeLists.txt b/src/arch/netos/CMakeLists.txt
index f871114..7a97df0 100644
--- a/src/arch/netos/CMakeLists.txt
+++ b/src/arch/netos/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Patrick Smejkal
+# Copyright (c) 2011 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Patrick Smejkal
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/arch/netos/forte_architecture_time.cpp b/src/arch/netos/forte_architecture_time.cpp
new file mode 100644
index 0000000..03cd855
--- /dev/null
+++ b/src/arch/netos/forte_architecture_time.cpp
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <stdint.h>
+
+#include "forte_architecture_time.h"
+
+#include "forte_constants.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ return forte::core::constants::cNanosecondsPerSecond < BSP_TICKS_PER_SECOND ?
+ tx_time_get() / (BSP_TICKS_PER_SECOND / forte::core::constants::cNanosecondsPerSecond) :
+ (tx_time_get() / BSP_TICKS_PER_SECOND) * forte::core::constants::cNanosecondsPerSecond;
+}
+
+
diff --git a/src/arch/netos/forte_sem.cpp b/src/arch/netos/forte_sem.cpp
index 4b23fbb..b7fd211 100644
--- a/src/arch/netos/forte_sem.cpp
+++ b/src/arch/netos/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/netos/forte_sem.h b/src/arch/netos/forte_sem.h
index b65d530..f0becd3 100644
--- a/src/arch/netos/forte_sem.h
+++ b/src/arch/netos/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/netos/forte_sync.cpp b/src/arch/netos/forte_sync.cpp
index bd58570..7275d28 100644
--- a/src/arch/netos/forte_sync.cpp
+++ b/src/arch/netos/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2010 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser
diff --git a/src/arch/netos/forte_sync.h b/src/arch/netos/forte_sync.h
index cc38ef7..606f6b9 100644
--- a/src/arch/netos/forte_sync.h
+++ b/src/arch/netos/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/arch/netos/forte_thread.cpp b/src/arch/netos/forte_thread.cpp
index 2d6e57c..024d3e4 100644
--- a/src/arch/netos/forte_thread.cpp
+++ b/src/arch/netos/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2017 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Ingo Hegny
diff --git a/src/arch/netos/forte_thread.h b/src/arch/netos/forte_thread.h
index d207651..52fc1bd 100644
--- a/src/arch/netos/forte_thread.h
+++ b/src/arch/netos/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2017 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Ingo Hegny
diff --git a/src/arch/netos/fortealloc.h b/src/arch/netos/fortealloc.h
index 04036ce..5b17a9f 100644
--- a/src/arch/netos/fortealloc.h
+++ b/src/arch/netos/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/netos/netos74/CMakeLists.txt b/src/arch/netos/netos74/CMakeLists.txt
index 82cc066..eed8a95 100644
--- a/src/arch/netos/netos74/CMakeLists.txt
+++ b/src/arch/netos/netos74/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011, 2014 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Patrick Smejkal - initial API and implementation and/or initial documentation
+# Copyright (c) 2011, 2014 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Patrick Smejkal - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\netos74)
@@ -59,6 +60,7 @@
forte_add_sourcefile_hcpp(../forte_thread ../forte_sync ../forte_sem)
forte_add_sourcefile_cpp(appconf_api.c ../root.cpp ../../genforte_printer.cpp)
forte_add_sourcefile_h(../../forte_architecture_time.h)
+ forte_add_sourcefile_cpp(../../genforte_realFunctions.cpp)
if(FORTE_COM_ETH)
forte_add_handler(CFDSelectHandler ../sockhand)
diff --git a/src/arch/netos/root.cpp b/src/arch/netos/root.cpp
index 9bdf687..32c3f24 100644
--- a/src/arch/netos/root.cpp
+++ b/src/arch/netos/root.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Rene Smodic, Alois Zoitl, Ingo Hegny
diff --git a/src/arch/netos/sockhand.h b/src/arch/netos/sockhand.h
index 9b9b78f..a26e164 100644
--- a/src/arch/netos/sockhand.h
+++ b/src/arch/netos/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/netos/txtimeha.cpp b/src/arch/netos/txtimeha.cpp
index bffb68b..6b50f4d 100644
--- a/src/arch/netos/txtimeha.cpp
+++ b/src/arch/netos/txtimeha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Ingo Hegny
diff --git a/src/arch/netos/txtimeha.h b/src/arch/netos/txtimeha.h
index 8393bfa..0a97164 100644
--- a/src/arch/netos/txtimeha.h
+++ b/src/arch/netos/txtimeha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Ingo Hegny
diff --git a/src/arch/pikeos_posix/CMakeLists.txt b/src/arch/pikeos_posix/CMakeLists.txt
index 871f147..a56088c 100644
--- a/src/arch/pikeos_posix/CMakeLists.txt
+++ b/src/arch/pikeos_posix/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2018 SYSGO AG
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Agostino Mascitti - adaption to PikeOS 4.2
+# Copyright (c) 2018 SYSGO AG
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Agostino Mascitti - adaption to PikeOS 4.2
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\pikeos)
@@ -21,6 +22,7 @@
forte_add_sourcefile_cpp(main.cpp ../genforte_printer.cpp ../posix/forte_thread.cpp pctimeha.cpp)
forte_add_sourcefile_h(../forte_architecture_time.h forte_thread.h pctimeha.h)
forte_add_sourcefile_hcpp(../utils/timespec_utils)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ../posix/forte_architecture_time.cpp)
if(FORTE_COM_ETH)
@@ -80,13 +82,12 @@
ENDIF(FORTE_POSIX_GENERATE_MAP_FILE)
forte_add_network_layer(SER OFF "ser" CPosixSerCommLayer ../posix/posixsercommlayer "Enable Forte serial line communication")
- forte_add_network_layer(MUXSER OFF "muxser" CMuxedSerCommLayer ../posix/muxedsercommlayer "Enable Forte multiplexed serial line communication")
set(FORTE_RTTI_AND_EXCEPTIONS FALSE CACHE BOOL "Enable RTTI and Exceptions")
mark_as_advanced(FORTE_RTTI_AND_EXCEPTIONS)
if(FORTE_TESTS AND FORTE_USE_TEST_CONFIG_IN_FORTE)
- forte_add_definition("-DBOOST_TEST_DYN_LINK -DFORTE_USE_DEFAULT_NEW_AND_DELETE -g -O0 --coverage -fno-inline -fno-elide-constructors -fexceptions -fsanitize=address")
+ forte_add_definition("-DBOOST_TEST_DYN_LINK -g -O0 --coverage -fno-inline -fno-elide-constructors -fexceptions -fsanitize=address")
forte_add_link_library("-fsanitize=address")
forte_add_link_library("--coverage")
else()
diff --git a/src/arch/pikeos_posix/forte_sem.h b/src/arch/pikeos_posix/forte_sem.h
index 704e8d1..f0e3fc5 100644
--- a/src/arch/pikeos_posix/forte_sem.h
+++ b/src/arch/pikeos_posix/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/forte_sync.h b/src/arch/pikeos_posix/forte_sync.h
index 8655547..8830934 100644
--- a/src/arch/pikeos_posix/forte_sync.h
+++ b/src/arch/pikeos_posix/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011, 2018 ACIN, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/forte_thread.h b/src/arch/pikeos_posix/forte_thread.h
index 8f8dd72..0391b53 100644
--- a/src/arch/pikeos_posix/forte_thread.h
+++ b/src/arch/pikeos_posix/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2017, 2018 ACIN, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Ingo Hegny, Martin Melik Merkiumians - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/fortealloc.h b/src/arch/pikeos_posix/fortealloc.h
index 1701744..f9bb852 100644
--- a/src/arch/pikeos_posix/fortealloc.h
+++ b/src/arch/pikeos_posix/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010, 2018 ACIN, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/main.cpp b/src/arch/pikeos_posix/main.cpp
index 04c086e..c51bd0a 100644
--- a/src/arch/pikeos_posix/main.cpp
+++ b/src/arch/pikeos_posix/main.cpp
@@ -1,12 +1,13 @@
/*******************************************************************************
- * Copyright (c) 2006 - 2014, 2018 ACIN, Profactor GmbH, AIT, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2006 - 2018 ACIN, Profactor GmbH, AIT, fortiss GmbH, SYSGO AG
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser, Rene Smodic,
+ * Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser, Rene Smodic
* Martin Melik Merkumians, Ingo Hegny, Filip Andren - initial API and implementation and/or initial documentation
* Agostino Mascitti - Adaption to PikeOS 4.2
*******************************************************************************/
@@ -15,6 +16,9 @@
#include <signal.h>
#include "../../stdfblib/ita/RMT_DEV.h"
+#include "../utils/mainparam_utils.h"
+
+
#ifdef CONFIG_POWERLINK_USERSTACK
#include <EplWrapper.h>
#endif
@@ -72,46 +76,29 @@
delete poDev;
}
-/*!\brief Lists the help for FORTE
- *
- */
-void listHelp(){
- printf("\nUsage of FORTE:\n");
- printf(" -h\t lists this help.\n");
- printf("\n");
- printf(" -c\t sets the destination for the connection.\n");
- printf(" \t Usage: forte -c <IP>:<Port>");
- printf("\n");
-}
-
int main(int argc, char *arg[]){
checkEndianess();
DEVLOG_INFO("FORTE starting\n");
- #ifdef POSIX_LWIP
+#ifdef POSIX_LWIP
/* Initialize the lwIP stack. */
if (_lwip_init() != 0) {
DEVLOG_ERROR("Initialization of lwIP stack failed.\n");
exit(-1);
}
- #endif
-
-
+#endif
//gdb_breakpoint();
- if(argc <= 1){ //! Default Value (localhost:61499)
- createDev("localhost:61499");
+ const char *pIpPort = parseCommandLineArguments(argc, arg);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))){
+ createDev(pIpPort);
}
- else{
- if(strcmp("-c", arg[1]) == 0){ //! sets the destination for the connection
- createDev(arg[2]);
- }
- else{ //! Lists the help for FORTE
- listHelp();
- }
+ else{ //! Lists the help for FORTE
+ listHelp();
}
+
return 0;
}
diff --git a/src/arch/pikeos_posix/muxedsercommlayer.h b/src/arch/pikeos_posix/muxedsercommlayer.h
deleted file mode 100644
index 96bb311..0000000
--- a/src/arch/pikeos_posix/muxedsercommlayer.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012, 2014, 2018 ACIN, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- * Agostino Mascitti - Adaption to PikeOS 4.2
- *******************************************************************************/
-#ifndef _PIKEOS_MUXEDSERCOMMLAYER_H_
-#define _PIKEOS_MUXEDSERCOMMLAYER_H_
-
-#include "../posix/muxedsercommlayer.h"
-
-#endif /* _PIKEOS_MUXEDSERCOMMLAYER_H_ */
diff --git a/src/arch/pikeos_posix/pctimeha.cpp b/src/arch/pikeos_posix/pctimeha.cpp
index 435fbaf..38731ac 100644
--- a/src/arch/pikeos_posix/pctimeha.cpp
+++ b/src/arch/pikeos_posix/pctimeha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2018, 2018 ACIN, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/pctimeha.h b/src/arch/pikeos_posix/pctimeha.h
index 927cb76..752148e 100644
--- a/src/arch/pikeos_posix/pctimeha.h
+++ b/src/arch/pikeos_posix/pctimeha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011, 2018 ACIN, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/posixsercommlayer.h b/src/arch/pikeos_posix/posixsercommlayer.h
index aa2bfb4..2f6c54c 100644
--- a/src/arch/pikeos_posix/posixsercommlayer.h
+++ b/src/arch/pikeos_posix/posixsercommlayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2017, 2018 ACIN, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/pikeos_posix/sockhand.h b/src/arch/pikeos_posix/sockhand.h
index c4dd1bc..39c8b21 100644
--- a/src/arch/pikeos_posix/sockhand.h
+++ b/src/arch/pikeos_posix/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015, 2018 ACIN, fortiss GmbH, SYSGO AG
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/CMakeLists.txt b/src/arch/plcnext/CMakeLists.txt
index b75881d..e508b0a 100644
--- a/src/arch/plcnext/CMakeLists.txt
+++ b/src/arch/plcnext/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2018 Johannes Kepler University
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2018 Johannes Kepler University
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\posix)
@@ -23,6 +24,7 @@
forte_add_sourcefile_cpp(../genforte_printer.cpp)
forte_add_sourcefile_h(../forte_architecture_time.h)
forte_add_sourcefile_hcpp(../utils/timespec_utils)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ../posix/forte_architecture_time.cpp)
forte_add_sourcefile_hcpp(ForteComponent ForteComponentProgramProvider ForteIOHandler ForteLibrary)
diff --git a/src/arch/plcnext/ForteComponent.cpp b/src/arch/plcnext/ForteComponent.cpp
index a7e9f91..69ca1a3 100644
--- a/src/arch/plcnext/ForteComponent.cpp
+++ b/src/arch/plcnext/ForteComponent.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteComponent.h b/src/arch/plcnext/ForteComponent.h
index 6289bad..6585c04 100644
--- a/src/arch/plcnext/ForteComponent.h
+++ b/src/arch/plcnext/ForteComponent.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteComponentProgramProvider.cpp b/src/arch/plcnext/ForteComponentProgramProvider.cpp
index 829258d..af9a717 100644
--- a/src/arch/plcnext/ForteComponentProgramProvider.cpp
+++ b/src/arch/plcnext/ForteComponentProgramProvider.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteComponentProgramProvider.h b/src/arch/plcnext/ForteComponentProgramProvider.h
index 23e8273..2aa8197 100644
--- a/src/arch/plcnext/ForteComponentProgramProvider.h
+++ b/src/arch/plcnext/ForteComponentProgramProvider.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteIOHandler.cpp b/src/arch/plcnext/ForteIOHandler.cpp
index 5133bec..d6395e5 100644
--- a/src/arch/plcnext/ForteIOHandler.cpp
+++ b/src/arch/plcnext/ForteIOHandler.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteIOHandler.h b/src/arch/plcnext/ForteIOHandler.h
index 41872d2..88c1f36 100644
--- a/src/arch/plcnext/ForteIOHandler.h
+++ b/src/arch/plcnext/ForteIOHandler.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteLibrary.cpp b/src/arch/plcnext/ForteLibrary.cpp
index 78cfc64..f3c35c9 100644
--- a/src/arch/plcnext/ForteLibrary.cpp
+++ b/src/arch/plcnext/ForteLibrary.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/ForteLibrary.h b/src/arch/plcnext/ForteLibrary.h
index 0f50e6b..8919f34 100644
--- a/src/arch/plcnext/ForteLibrary.h
+++ b/src/arch/plcnext/ForteLibrary.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/forte_sem.h b/src/arch/plcnext/forte_sem.h
index 2e12e5c..cd66813 100644
--- a/src/arch/plcnext/forte_sem.h
+++ b/src/arch/plcnext/forte_sem.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/forte_sync.h b/src/arch/plcnext/forte_sync.h
index 24ad015..c5065e2 100644
--- a/src/arch/plcnext/forte_sync.h
+++ b/src/arch/plcnext/forte_sync.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/forte_thread.h b/src/arch/plcnext/forte_thread.h
index ac83d2d..f622307 100644
--- a/src/arch/plcnext/forte_thread.h
+++ b/src/arch/plcnext/forte_thread.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/fortealloc.h b/src/arch/plcnext/fortealloc.h
index 9e2c9cd..9c1bced 100644
--- a/src/arch/plcnext/fortealloc.h
+++ b/src/arch/plcnext/fortealloc.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/plcnext/sockhand.h b/src/arch/plcnext/sockhand.h
index ee48e63..3a469e1 100644
--- a/src/arch/plcnext/sockhand.h
+++ b/src/arch/plcnext/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, fortiss GmbH, 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/CMakeLists.txt b/src/arch/posix/CMakeLists.txt
index 4f53b7a..02f720a 100644
--- a/src/arch/posix/CMakeLists.txt
+++ b/src/arch/posix/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Martin Melik Merkumians
+# Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Martin Melik Merkumians
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
@@ -24,6 +25,7 @@
forte_add_sourcefile_cpp(../genforte_printer.cpp)
forte_add_sourcefile_h(../forte_architecture_time.h)
forte_add_sourcefile_hcpp(../utils/timespec_utils)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp forte_architecture_time.cpp)
forte_add_to_executable_cpp(main)
@@ -49,13 +51,12 @@
forte_add_network_layer(SER OFF "ser" CPosixSerCommLayer posixsercommlayer "Enable Forte serial line communication")
- forte_add_network_layer(MUXSER OFF "muxser" CMuxedSerCommLayer muxedsercommlayer "Enable Forte multiplexed serial line communication")
set(FORTE_RTTI_AND_EXCEPTIONS FALSE CACHE BOOL "Enable RTTI and Exceptions")
mark_as_advanced(FORTE_RTTI_AND_EXCEPTIONS)
if(FORTE_TESTS AND FORTE_USE_TEST_CONFIG_IN_FORTE)
- forte_add_definition("-DBOOST_TEST_DYN_LINK -DFORTE_USE_DEFAULT_NEW_AND_DELETE -g -O0 --coverage -fno-inline -fno-elide-constructors -fexceptions -fsanitize=address")
+ forte_add_definition("-DBOOST_TEST_DYN_LINK -g -O0 --coverage -fno-inline -fno-elide-constructors -fno-exceptions -fsanitize=address -DBOOST_NO_EXCEPTIONS")
forte_add_link_library("-fsanitize=address")
forte_add_link_library("--coverage")
else()
diff --git a/src/arch/posix/forte_architecture_time.cpp b/src/arch/posix/forte_architecture_time.cpp
new file mode 100644
index 0000000..eba299e
--- /dev/null
+++ b/src/arch/posix/forte_architecture_time.cpp
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <time.h>
+
+#include "forte_architecture_time.h"
+#include "forte_constants.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ struct timespec now;
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ return now.tv_nsec + now.tv_sec * forte::core::constants::cNanosecondsPerSecond;
+}
+
+
diff --git a/src/arch/posix/forte_sem.cpp b/src/arch/posix/forte_sem.cpp
index c82986c..ef7cefb 100644
--- a/src/arch/posix/forte_sem.cpp
+++ b/src/arch/posix/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/forte_sem.h b/src/arch/posix/forte_sem.h
index c1cd909..2ce6be9 100644
--- a/src/arch/posix/forte_sem.h
+++ b/src/arch/posix/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/forte_sync.cpp b/src/arch/posix/forte_sync.cpp
index c4cbc18..8a76eef 100644
--- a/src/arch/posix/forte_sync.cpp
+++ b/src/arch/posix/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2010, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/forte_sync.h b/src/arch/posix/forte_sync.h
index 365186e..5dfa7d2 100644
--- a/src/arch/posix/forte_sync.h
+++ b/src/arch/posix/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/forte_thread.cpp b/src/arch/posix/forte_thread.cpp
index 32ba618..e9ffbd4 100644
--- a/src/arch/posix/forte_thread.cpp
+++ b/src/arch/posix/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2017 ACIN, fortiss GmbH, Red Hat Inc
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Martin Melik Merkiumians - initial API and implementation and/or initial documentation
@@ -30,17 +31,17 @@
DEVLOG_ERROR("Error could not get the default thread attributes! %s\n", strerror(errno));
return 0;
}
- #ifdef __CYGWIN__
+#ifdef __CYGWIN__
if (pthread_attr_setstacksize (&stAttr, paStackSize)){
DEVLOG_ERROR("Error could not set the stacksize for the thread! %s\n", strerror(errno));
return 0;
}
- #else
+#else //__CYGWIN__
if(pthread_attr_setstack(&stAttr, mStack, paStackSize)){
DEVLOG_ERROR("Error could not set the stacksize for the thread! %s\n", strerror(errno));
return 0;
}
- #endif
+#endif //__CYGWIN__
if(pthread_create(&retVal, &stAttr, threadFunction, this)){
DEVLOG_ERROR("Error could not create the thread! %s\n", strerror(errno));
return 0;
@@ -84,6 +85,6 @@
}
void CPosixThread::sleepThread(unsigned int paMilliSeconds){
- struct timespec stReq = {paMilliSeconds / 1000, 1000000 * (paMilliSeconds % 1000)};
+ struct timespec stReq = { static_cast<time_t>(paMilliSeconds / 1000), static_cast<long>(1000000 * (paMilliSeconds % 1000)) };
nanosleep(&stReq, NULL);
}
diff --git a/src/arch/posix/forte_thread.h b/src/arch/posix/forte_thread.h
index a6a53d1..9c04282 100644
--- a/src/arch/posix/forte_thread.h
+++ b/src/arch/posix/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Ingo Hegny, Martin Melik Merkiumians - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/fortealloc.h b/src/arch/posix/fortealloc.h
index eab8525..c1d36c6 100644
--- a/src/arch/posix/fortealloc.h
+++ b/src/arch/posix/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/main.cpp b/src/arch/posix/main.cpp
index b20a9db..9afb16e 100644
--- a/src/arch/posix/main.cpp
+++ b/src/arch/posix/main.cpp
@@ -1,19 +1,23 @@
/*******************************************************************************
- * Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2006 - 2018 ACIN, Profactor GmbH, AIT, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser, Rene Smodic,
* Martin Melik Merkumians, Ingo Hegny, Filip Andren - initial API and implementation and/or initial documentation
+ * Tarik Terzimehic - make OPC UA server port setable from the command line
*******************************************************************************/
#include <fortenew.h>
#include <stdio.h>
#include <signal.h>
#include "../../stdfblib/ita/RMT_DEV.h"
+#include "../utils/mainparam_utils.h"
+
#ifdef FORTE_ROS
#include <ros/ros.h>
#endif //FORTE_ROS
@@ -68,40 +72,28 @@
delete poDev;
}
-/*!\brief Lists the help for FORTE
- *
- */
-void listHelp(){
- printf("\nUsage of FORTE:\n");
- printf(" -h\t lists this help.\n");
- printf("\n");
- printf(" -c\t sets the destination for the connection.\n");
- printf(" \t Usage: forte -c <IP>:<Port>");
- printf("\n");
-}
-
int main(int argc, char *arg[]){
checkEndianess();
- if(argc <= 1){ //! Default Value (localhost:61499)
#ifdef FORTE_ROS
+ if(argc <= 1){ //! Default Value (localhost:61499)
std::string rosdistro = "indigo";
if (rosdistro == (std::string)std::getenv("ROS_DISTRO")){
DEVLOG_INFO("path to forte.exe: %s \n", arg[0]);
ros::init(argc, arg, "ros_Functionblocks_in_FORTE");
}
+ }
#endif //FORTE_ROS
- createDev("localhost:61499");
+
+ const char *pIpPort = parseCommandLineArguments(argc, arg);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))){
+ createDev(pIpPort);
}
- else{
- if(strcmp("-c", arg[1]) == 0){ //! sets the destination for the connection
- createDev(arg[2]);
- }
- else{ //! Lists the help for FORTE
- listHelp();
- }
+ else{ //! Lists the help for FORTE
+ listHelp();
}
+
return 0;
}
diff --git a/src/arch/posix/muxedsercommlayer.cpp b/src/arch/posix/muxedsercommlayer.cpp
deleted file mode 100644
index 8b82d19..0000000
--- a/src/arch/posix/muxedsercommlayer.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- *******************************************************************************/
-#include "muxedsercommlayer.h"
-#include "commfb.h"
-#include "../devlog.h"
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <criticalregion.h>
-
-using namespace forte::com_infra;
-
-CMuxedSerCommLayer::CMuxedSerPortsManager CMuxedSerCommLayer::smMuxedSerPortsManager;
-
-CMuxedSerCommLayer::CMuxedSerCommLayer(CComLayer* paUpperLayer, CBaseCommFB * paFB) :
- CComLayer(paUpperLayer, paFB), mBufFillSize(0), mFD(scmInvalidFileDescriptor),
- mInterruptResp(forte::com_infra::EComResponse::e_Nothing), mSerMuxId(0){
-
-}
-
-CMuxedSerCommLayer::~CMuxedSerCommLayer(){
- closeConnection();
-}
-
-EComResponse CMuxedSerCommLayer::sendData(void *paData, unsigned int paSize){
- if(CFDSelectHandler::scmInvalidFileDescriptor != mFD){
- //first send id
-
- mRecvBuffer[0] = mSerMuxId;
- memcpy(&(mRecvBuffer[1]), paData, paSize);
- paSize++;
-
- ssize_t nToSend = paSize;
- while(0 < nToSend){
- ssize_t nSentBytes = write(mFD, &(mRecvBuffer[0]), nToSend);
- if(nSentBytes <= 0){
- DEVLOG_ERROR("CMuxedSerCommLayer: Send failed: %s\n", strerror(errno));
- return e_ProcessDataSendFailed;
- }
- nToSend -= nSentBytes;
- paData = static_cast<char*>(paData) + nSentBytes;
- }
- }
-
- return e_ProcessDataOk;
-}
-
-EComResponse CMuxedSerCommLayer::recvData(const void *, unsigned int){
- ssize_t nReadCount = read(mFD, &mRecvBuffer[mBufFillSize], cg_unIPLayerRecvBufferSize - mBufFillSize);
-
- switch (nReadCount){
- case 0:
- DEVLOG_INFO("CMuxedSerCommLayer: Connection closed by peer\n");
- mInterruptResp = e_InitTerminated;
- closeConnection();
- break;
- case -1:
- DEVLOG_ERROR("CMuxedSerCommLayer: read failed: %s\n", strerror(errno));
- mInterruptResp = e_ProcessDataRecvFaild;
- break;
- default:
- //we successfully received data
- mBufFillSize += nReadCount;
- mInterruptResp = e_ProcessDataOk;
- break;
- }
-
- m_poFb->interruptCommFB(this);
- return mInterruptResp;
-}
-
-EComResponse CMuxedSerCommLayer::processInterrupt(){
- if(e_ProcessDataOk == mInterruptResp){
- mInterruptResp = m_poTopLayer->recvData(mRecvBuffer, mBufFillSize);
- mBufFillSize = 0;
- }
- return mInterruptResp;
-}
-
-EComResponse CMuxedSerCommLayer::openConnection(char *paLayerParameter){
- EComResponse eRetVal = e_InitInvalidId;
-
- char *acPort = strchr(paLayerParameter, ':');
- if(0 != acPort){
- *acPort = '\0';
- ++acPort;
- mSerMuxId = static_cast<TForteUInt8>(forte::core::util::strtoul(acPort, 0, 10));
- mFD = smMuxedSerPortsManager.addMuxedSerLayer(paLayerParameter, this);
- if(CFDSelectHandler::scmInvalidFileDescriptor != mFD){
- eRetVal = e_InitOk;
- }
- }
-
- return eRetVal;
-}
-
-void CMuxedSerCommLayer::closeConnection(){
- if(CFDSelectHandler::scmInvalidFileDescriptor != mFD){
- smMuxedSerPortsManager.removeMuxedSerLayer(mFD, this);
- mFD = CFDSelectHandler::scmInvalidFileDescriptor;
- }
-}
-
-//**************************************************************************************************************************
-CMuxedSerCommLayer::CMuxedSerPortsManager::CMuxedSerPortsManager(){
-
-}
-
-CFDSelectHandler::TFileDescriptor CMuxedSerCommLayer::CMuxedSerPortsManager::addMuxedSerLayer(char* paSerPort, CMuxedSerCommLayer *paComCallBack){
- CCriticalRegion criticalRegion(mSync);
- CFDSelectHandler::TFileDescriptor nRetVal = CFDSelectHandler::scmInvalidFileDescriptor;
- SSerPortEntry *mSerPortEntry = getSerPortEntry(paSerPort);
- if(0 != mSerPortEntry){
- mSerPortEntry->mConnectionsList.pushBack(paComCallBack);
- nRetVal = mSerPortEntry->mFD;
- }
- return nRetVal;
-}
-
-void CMuxedSerCommLayer::CMuxedSerPortsManager::removeMuxedSerLayer(CFDSelectHandler::TFileDescriptor paFD, CMuxedSerCommLayer *paComCallBack){
- CCriticalRegion criticalRegion(mSync);
- SSerPortEntry *mSerPortEntry = getOpendSerPortEntry(paFD);
- if(0 != mSerPortEntry){
- TConnectionContainer::Iterator itRunner(mSerPortEntry->mConnectionsList.begin());
- TConnectionContainer::Iterator itRevNode(mSerPortEntry->mConnectionsList.end());
- TConnectionContainer::Iterator itEnd(mSerPortEntry->mConnectionsList.end());
-
- while(itRunner != itEnd){
- if((*itRunner) == paComCallBack){
- if(itRevNode == itEnd){
- mSerPortEntry->mConnectionsList.popFront();
- }else{
- mSerPortEntry->mConnectionsList.eraseAfter(itRevNode);
- }
- break;
- }
-
- itRevNode = itRunner;
- ++itRunner;
- }
-
- if(mSerPortEntry->mConnectionsList.isEmpty()){
- closePort(mSerPortEntry);
- }
- }
-}
-
-EComResponse CMuxedSerCommLayer::CMuxedSerPortsManager::SSerPortEntry::recvData(const void *, unsigned int){
- EComResponse eRetVal = e_Nothing;
- char nID;
-
- ssize_t nReadCount = read(mFD, &nID, 1);
-
- if(1 == nReadCount){
-
- TConnectionContainer::Iterator itEnd(mConnectionsList.end());
- for(TConnectionContainer::Iterator itRunner = mConnectionsList.begin(), itCurrent = mConnectionsList.begin(); itRunner != itEnd;){
- itCurrent = itRunner;
- ++itRunner;
- if(nID == itCurrent->getSerMuxId()){
- eRetVal = itCurrent->recvData(0,0);
- if(e_Nothing != eRetVal){
- m_poFb = itCurrent->getCommFB();
- }
- break;
- }
- }
- }
- else{
- //FIXME handle error close connections and inform FBs
- }
-
- return eRetVal;
-}
-
-EComResponse CMuxedSerCommLayer::CMuxedSerPortsManager::SSerPortEntry::processInterrupt(){
- return e_Nothing;
-}
-
-CMuxedSerCommLayer::CMuxedSerPortsManager::SSerPortEntry *CMuxedSerCommLayer::CMuxedSerPortsManager::getSerPortEntry(char* paSerPort){
- for(TSerPortList::Iterator itRunner = mPortList.begin(); itRunner != mPortList.end(); ++itRunner){
- if(0 == strcmp(itRunner->mSerPort, paSerPort)){
- return &(*itRunner);
- }
- }
-
- TSerPortList::Iterator itRef(mPortList.back());
-//this port is not yet managed by us
- mPortList.pushBack(SSerPortEntry());
- TSerPortList::Iterator itCurrent(mPortList.back());
- SSerPortEntry *pstRetVal = &(*itCurrent);
- openPort(paSerPort, pstRetVal);
- if(CFDSelectHandler::scmInvalidFileDescriptor == pstRetVal->mFD){
- if(itCurrent == mPortList.begin()){
- mPortList.popFront();
- }
- else{
- mPortList.eraseAfter(itRef);
- }
- pstRetVal = 0;
- }
- else{
- pstRetVal->mSerPort = new char[strlen(paSerPort) + 1];
- strcpy(pstRetVal->mSerPort, paSerPort);
- }
- return pstRetVal;
-}
-
-CMuxedSerCommLayer::CMuxedSerPortsManager::SSerPortEntry *CMuxedSerCommLayer::CMuxedSerPortsManager::getOpendSerPortEntry(CFDSelectHandler::TFileDescriptor paFD){
- SSerPortEntry *pstRetVal = 0;
- for(TSerPortList::Iterator itRunner = mPortList.begin(); itRunner != mPortList.end(); ++itRunner){
- if(paFD == itRunner->mFD){
- pstRetVal = &(*itRunner);
- break;
- }
- }
- return pstRetVal;
-}
-
-void CMuxedSerCommLayer::CMuxedSerPortsManager::openPort(char* paSerPort, SSerPortEntry *paPortEntry){
- paPortEntry->mFD = open(paSerPort, O_RDWR | O_NOCTTY);
-
- if(CFDSelectHandler::scmInvalidFileDescriptor != paPortEntry->mFD){
- getExtEvHandler<CFDSelectHandler>().addComCallback(paPortEntry->mFD, paPortEntry);
- }
- else{
- DEVLOG_ERROR("CSerCommLayer: open failed: %s\n", strerror(errno));
- }
-}
-
-void CMuxedSerCommLayer::CMuxedSerPortsManager::closePort(SSerPortEntry *paSerPortEntry){
- getExtEvHandler<CFDSelectHandler>().removeComCallback(paSerPortEntry->mFD);
- close(paSerPortEntry->mFD);
-
- delete[] paSerPortEntry->mSerPort;
-
- TSerPortList::Iterator itRunner(mPortList.begin());
- TSerPortList::Iterator itRefNode(mPortList.end());
-
- while(itRunner != mPortList.end()){
- if(itRunner->mFD == paSerPortEntry->mFD){
- if(itRefNode == mPortList.end()){
- mPortList.popFront();
- }
- else{
- mPortList.eraseAfter(itRefNode);
- }
- break;
- }
-
- itRefNode = itRunner;
- ++itRunner;
- }
-}
diff --git a/src/arch/posix/muxedsercommlayer.h b/src/arch/posix/muxedsercommlayer.h
deleted file mode 100644
index f4db8de..0000000
--- a/src/arch/posix/muxedsercommlayer.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012, 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- *******************************************************************************/
-#ifndef _MUXEDSERCOMMLAYER_H_
-#define _MUXEDSERCOMMLAYER_H_
-
-#include "comlayer.h"
-#include "fdselecthand.h"
-
-class CMuxedSerCommLayer : public forte::com_infra::CComLayer{
- public:
- CMuxedSerCommLayer(forte::com_infra::CComLayer* paUpperLayer, forte::com_infra::CBaseCommFB * paFB);
- virtual ~CMuxedSerCommLayer();
-
- virtual forte::com_infra::EComResponse sendData(void *paData, unsigned int paSize);
- virtual forte::com_infra::EComResponse recvData(const void *paData, unsigned int paSize);
-
- virtual forte::com_infra::EComResponse processInterrupt();
-
- TForteUInt8 getSerMuxId() const{
- return mSerMuxId;
- }
-
- protected:
- private:
- virtual forte::com_infra::EComResponse openConnection(char *paLayerParameter);
- virtual void closeConnection();
-
- forte::com_infra::EComResponse mInterruptResp;
- char mRecvBuffer[cg_unIPLayerRecvBufferSize];
- unsigned int mBufFillSize;
- TForteUInt8 mSerMuxId;
- CFDSelectHandler::TFileDescriptor mFD; //!< file descriptor for accessing the serial device
-
- class CMuxedSerPortsManager{
-
- public:
-
- CFDSelectHandler::TFileDescriptor addMuxedSerLayer(char* paSerPort, CMuxedSerCommLayer *paComCallBack);
- void removeMuxedSerLayer(CFDSelectHandler::TFileDescriptor paFD, CMuxedSerCommLayer *paComCallBack);
-
- private:
-
- typedef CSinglyLinkedList<CMuxedSerCommLayer *> TConnectionContainer;
- class SSerPortEntry : public forte::com_infra::CComLayer{
- public:
- SSerPortEntry(): forte::com_infra::CComLayer(0, 0), mSerPort(0), mFD(scmInvalidFileDescriptor){
- }
-
- char* mSerPort;
- CFDSelectHandler::TFileDescriptor mFD;
- TConnectionContainer mConnectionsList;
-
- virtual forte::com_infra::EComResponse sendData(void *, unsigned int ){
- return forte::com_infra::e_Nothing;
- }
-
- virtual forte::com_infra::EComResponse recvData(const void *paData, unsigned int paSize);
- virtual forte::com_infra::EComResponse processInterrupt();
-
- private:
- virtual forte::com_infra::EComResponse openConnection(char *){
- return forte::com_infra::e_Nothing;
- }
-
- virtual void closeConnection(){}
- };
-
- typedef CSinglyLinkedList<SSerPortEntry> TSerPortList;
-
- CMuxedSerPortsManager();
- SSerPortEntry *getSerPortEntry(char* paSerPort);
- SSerPortEntry *getOpendSerPortEntry(CFDSelectHandler::TFileDescriptor paFD);
- void openPort(char* paSerPort, SSerPortEntry *paPortEntry);
- void closePort(SSerPortEntry *paSerPortEntry);
-
- TSerPortList mPortList;
-
- CSyncObject mSync;
-
- //needed so that CLMSUSBLayer can have a static member variable holding the manager.
- friend class CMuxedSerCommLayer;
-
- //not to be implemented
- CMuxedSerPortsManager(const CMuxedSerPortsManager &);
- CMuxedSerPortsManager &operator =(const CMuxedSerPortsManager&);
- };
-
- static CMuxedSerPortsManager smMuxedSerPortsManager;
-};
-
-#endif /* MUXEDSERCOMMLAYER_H_ */
diff --git a/src/arch/posix/pctimeha.cpp b/src/arch/posix/pctimeha.cpp
index 7160242..bf35ffc 100644
--- a/src/arch/posix/pctimeha.cpp
+++ b/src/arch/posix/pctimeha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2018 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/posix/pctimeha.h b/src/arch/posix/pctimeha.h
index 27affb5..9ca3425 100644
--- a/src/arch/posix/pctimeha.h
+++ b/src/arch/posix/pctimeha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -16,9 +17,9 @@
/*! \ingroup posix_hal
*\ingroup EXTEVHAND
- *\brief the timer handler for the pc architecture.
+ *\brief the timer handler for the pc architecture.
*/
-class CPCTimerHandler : public CTimerHandler, private CThread{
+class CPCTimerHandler : public CTimerHandler, private CThread {
public:
virtual ~CPCTimerHandler();
diff --git a/src/arch/posix/posixsercommlayer.cpp b/src/arch/posix/posixsercommlayer.cpp
index 09d9ca5..7d815eb 100644
--- a/src/arch/posix/posixsercommlayer.cpp
+++ b/src/arch/posix/posixsercommlayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -17,6 +18,8 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <sockhand.h>
+#include <criticalregion.h>
CPosixSerCommLayer::CPosixSerCommLayer(forte::com_infra::CComLayer* paUpperLayer, forte::com_infra::CBaseCommFB* paFB) :
CSerialComLayerBase(paUpperLayer, paFB){
@@ -44,6 +47,7 @@
}
forte::com_infra::EComResponse CPosixSerCommLayer::recvData(const void *, unsigned int){
+ CCriticalRegion lock(mRecvLock);
ssize_t nReadCount = read(getSerialHandler(), &mRecvBuffer[mBufFillSize], cg_unIPLayerRecvBufferSize - mBufFillSize);
switch (nReadCount){
@@ -67,7 +71,7 @@
return mInterruptResp;
}
-forte::com_infra::EComResponse CPosixSerCommLayer::openSerialConnection(const SSerialParameters& paSerialParameters, CSerialComLayerBase<CFDSelectHandler::TFileDescriptor, CFDSelectHandler::scmInvalidFileDescriptor>::TSerialHandleType* paHandleResult){
+forte::com_infra::EComResponse CPosixSerCommLayer::openSerialConnection(const SSerialParameters& paSerialParameters, CSerialComLayerBase<FORTE_SOCKET_TYPE, FORTE_INVALID_SOCKET>::TSerialHandleType* paHandleResult){
forte::com_infra::EComResponse eRetVal = forte::com_infra::e_ProcessDataNoSocket;
//as first shot take the serial interface device as param (e.g., /dev/ttyS0 )
@@ -78,6 +82,7 @@
struct termios stNewTIO;
memset(&stNewTIO, 0, sizeof(stNewTIO));
+ stNewTIO.c_line = mOldTIO.c_line;
switch (paSerialParameters.baudRate) {
case e50: stNewTIO.c_cflag |= B50; break;
@@ -97,9 +102,13 @@
case e38400: stNewTIO.c_cflag |= B38400; break;
case e57600: stNewTIO.c_cflag |= B57600; break;
case e115200: stNewTIO.c_cflag |= B115200; break;
+ case e1000000: stNewTIO.c_cflag |= B1000000; break;
default: return forte::com_infra::e_InitInvalidId; break;
}
+ stNewTIO.c_ispeed = mOldTIO.c_ispeed;
+ stNewTIO.c_ospeed = mOldTIO.c_ospeed;
+
switch (paSerialParameters.byteSize) {
case e5: stNewTIO.c_cflag |= CS5; break;
case e6: stNewTIO.c_cflag |= CS6; break;
@@ -115,7 +124,9 @@
}
switch(paSerialParameters.parity){
- case eNoParity: stNewTIO.c_cflag &= ~PARENB; break;
+ case eNoParity:
+ stNewTIO.c_cflag &= ~(PARENB | PARODD | CMSPAR);
+ break;
case eODD: stNewTIO.c_cflag |= PARENB | PARODD; break;
case eEven:
stNewTIO.c_cflag |= PARENB;
@@ -124,32 +135,38 @@
default: return forte::com_infra::e_InitInvalidId; break;
}
+ stNewTIO.c_cflag &= ~CRTSCTS; // no hardware flow control
- stNewTIO.c_cflag = CLOCAL | CREAD; /* Local line - do not change "owner" of port | Enable receiver*/
+ stNewTIO.c_cflag |= (CLOCAL | CREAD); /* Local line - do not change "owner" of port | Enable receiver*/
- stNewTIO.c_iflag = ICRNL; /* Map CR to NL | IGNPAR (was here before) Ignore parity error. TODO: Should we delete this? It was on the old code*/ ;
+ stNewTIO.c_iflag = mOldTIO.c_iflag;
+ stNewTIO.c_iflag |= IGNPAR; /* Map CR to NL | IGNPAR (was here before) Ignore parity error. TODO: Should we delete this? It was on the old code*/ ;
+ stNewTIO.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl
+ stNewTIO.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | INPCK | IUCLC); // Disable any special handling of received bytes
- stNewTIO.c_oflag = 0; //raw output
+ stNewTIO.c_oflag = mOldTIO.c_oflag;
+ stNewTIO.c_oflag &= ~(OPOST | ONLCR | OCRNL);
- stNewTIO.c_lflag = ICANON; // enable canonical input, disable echo func and don't send signals to calling programm
+ stNewTIO.c_lflag = mOldTIO.c_lflag;
+ stNewTIO.c_lflag &= ~(ICANON| ECHO | ECHOE| ECHONL | ECHOK | ISIG | IEXTEN | CRTSCTS);
- stNewTIO.c_cc[VINTR] = 0; /* Ctrl-c */
- stNewTIO.c_cc[VQUIT] = 0; /* Ctrl-\ */
- stNewTIO.c_cc[VERASE] = 0; /* del */
- stNewTIO.c_cc[VKILL] = 0; /* @ */
- stNewTIO.c_cc[VEOF] = 4; /* Ctrl-d */
- stNewTIO.c_cc[VTIME] = 0; /* inter-character timer unused */
+ stNewTIO.c_cc[VINTR] = _POSIX_VDISABLE; /* Ctrl-c */
+ stNewTIO.c_cc[VQUIT] = _POSIX_VDISABLE; /* Ctrl-\ */
+ stNewTIO.c_cc[VERASE] = _POSIX_VDISABLE; /* del */
+ stNewTIO.c_cc[VKILL] = _POSIX_VDISABLE; /* @ */
+ stNewTIO.c_cc[VEOF] = _POSIX_VDISABLE; /* Ctrl-d */
+ stNewTIO.c_cc[VTIME] = 10; /* inter-character timer unused */
stNewTIO.c_cc[VMIN] = 1; /* blocking read until 1 character arrives */
- stNewTIO.c_cc[VSWTC] = 0; /* '\0' */
- stNewTIO.c_cc[VSTART] = 0; /* Ctrl-q */
- stNewTIO.c_cc[VSTOP] = 0; /* Ctrl-s */
- stNewTIO.c_cc[VSUSP] = 0; /* Ctrl-z */
- stNewTIO.c_cc[VEOL] = 0; /* '\0' */
- stNewTIO.c_cc[VREPRINT] = 0; /* Ctrl-r */
- stNewTIO.c_cc[VDISCARD] = 0; /* Ctrl-u */
- stNewTIO.c_cc[VWERASE] = 0; /* Ctrl-w */
- stNewTIO.c_cc[VLNEXT] = 0; /* Ctrl-v */
- stNewTIO.c_cc[VEOL2] = 0; /* '\0' */
+ stNewTIO.c_cc[VSWTC] = _POSIX_VDISABLE; /* '\0' */
+ stNewTIO.c_cc[VSTART] = _POSIX_VDISABLE; /* Ctrl-q */
+ stNewTIO.c_cc[VSTOP] = _POSIX_VDISABLE; /* Ctrl-s */
+ stNewTIO.c_cc[VSUSP] = _POSIX_VDISABLE; /* Ctrl-z */
+ stNewTIO.c_cc[VEOL] = _POSIX_VDISABLE; /* '\0' */
+ stNewTIO.c_cc[VREPRINT] = _POSIX_VDISABLE; /* Ctrl-r */
+ stNewTIO.c_cc[VDISCARD] = _POSIX_VDISABLE; /* Ctrl-u */
+ stNewTIO.c_cc[VWERASE] = _POSIX_VDISABLE; /* Ctrl-w */
+ stNewTIO.c_cc[VLNEXT] = _POSIX_VDISABLE; /* Ctrl-v */
+ stNewTIO.c_cc[VEOL2] = _POSIX_VDISABLE; /* '\0' */
tcflush(fileDescriptor, TCIFLUSH);
tcsetattr(fileDescriptor, TCSANOW, &stNewTIO);
diff --git a/src/arch/posix/posixsercommlayer.h b/src/arch/posix/posixsercommlayer.h
index 15d476d..dcc0184 100644
--- a/src/arch/posix/posixsercommlayer.h
+++ b/src/arch/posix/posixsercommlayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -12,10 +13,10 @@
#define _SERCOMMLAYER_H_
#include "../../core/cominfra/serialcomlayerbase.h"
-#include "../fdselecthand.h"
+#include "../gensockhand.h"
#include <termios.h>
-class CPosixSerCommLayer : public CSerialComLayerBase<CFDSelectHandler::TFileDescriptor, CFDSelectHandler::scmInvalidFileDescriptor>{
+class CPosixSerCommLayer : public CSerialComLayerBase<FORTE_SOCKET_TYPE, FORTE_INVALID_SOCKET>{
public:
CPosixSerCommLayer(forte::com_infra::CComLayer* paUpperLayer, forte::com_infra::CBaseCommFB * paFB);
virtual ~CPosixSerCommLayer();
@@ -25,7 +26,7 @@
protected:
private:
- virtual forte::com_infra::EComResponse openSerialConnection(const SSerialParameters& paSerialParameters, CSerialComLayerBase<CFDSelectHandler::TFileDescriptor, CFDSelectHandler::scmInvalidFileDescriptor>::TSerialHandleType* paHandleResult);
+ virtual forte::com_infra::EComResponse openSerialConnection(const SSerialParameters& paSerialParameters, CSerialComLayerBase<FORTE_SOCKET_TYPE, FORTE_INVALID_SOCKET>::TSerialHandleType* paHandleResult);
virtual void closeConnection();
struct termios mOldTIO; //!< buffer for the existing sercom settings
diff --git a/src/arch/posix/sockhand.h b/src/arch/posix/sockhand.h
index 7801bc0..13fb2bb 100644
--- a/src/arch/posix/sockhand.h
+++ b/src/arch/posix/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/CMakeLists.txt b/src/arch/rcX/CMakeLists.txt
index 7527b70..7da65f1 100644
--- a/src/arch/rcX/CMakeLists.txt
+++ b/src/arch/rcX/CMakeLists.txt
@@ -1,12 +1,13 @@
#/*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\rcX)
@@ -41,13 +42,14 @@
forte_add_sourcefile_hcpp(forte_thread rcXUtilities forte_sync forte_sem forte_instance)
forte_add_sourcefile_h(fortealloc.h ../forte_architecture_time.h)
forte_add_sourcefile_cpp(forte_architecture.cpp ../genforte_printer.cpp)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp forte_architecture_time.cpp)
if(FORTE_COM_ETH)
forte_add_sourcefile_hcpp(rcXSocketInterface)
forte_add_sourcefile_h(sockhand.h)
endif(FORTE_COM_ETH)
- forte_add_definition("-D__RCX__ -D__${FORTE_NETX_CPU} -c -mlong-calls -mcpu=${ARCH_NETX} -fshort-enums -gdwarf-2 -Wall -O0 -mapcs -mthumb-interwork -fsigned-char -mlittle-endian -marm -mno-apcs-frame -ffunction-sections -fdata-sections -Wl,–gc-sections -msoft-float -mfpu=vfp -mfloat-abi=soft -mthumb-interwork -nostdlib -mcpu=arm966e-s -mthumb -T")# -static-libstdc++ -static-libgcc")# -mabi=apcs-gnu")# -xc")#
+ forte_add_definition("-D__RCX__ -D__${FORTE_NETX_CPU} -c -mlong-calls -mcpu=${ARCH_NETX} -fshort-enums -gdwarf-2 -Wall -O0 -mapcs -mthumb-interwork -fsigned-char -mlittle-endian -marm -mno-apcs-frame -ffunction-sections -fdata-sections -Wl,-gc-sections -msoft-float -mfpu=vfp -mfloat-abi=soft -mthumb-interwork -nostdlib -mcpu=arm966e-s -mthumb -T")# -static-libstdc++ -static-libgcc")# -mabi=apcs-gnu")# -xc")#
forte_add_definition("-W -Wall -Wextra -Woverloaded-virtual -Wconversion -DFORTE_LITTLE_ENDIAN -ggdb")
forte_add_definition("-fno-threadsafe-statics")
diff --git a/src/arch/rcX/forte_architecture.cpp b/src/arch/rcX/forte_architecture.cpp
index 1ae539e..11efa08 100644
--- a/src/arch/rcX/forte_architecture.cpp
+++ b/src/arch/rcX/forte_architecture.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_architecture_time.cpp b/src/arch/rcX/forte_architecture_time.cpp
new file mode 100644
index 0000000..12f6245
--- /dev/null
+++ b/src/arch/rcX/forte_architecture_time.cpp
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <stdint.h>
+#include <AP_Sys.h>
+
+#include "forte_architecture_time.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ return rX_SysGetSystemTicks() * rX_SysGetSystemCycletime() *
+ (forte::core::constants::cNanosecondsPerSecond / forte::core::constants::cMicrosecondsPerSecond);
+}
+
diff --git a/src/arch/rcX/forte_instance.cpp b/src/arch/rcX/forte_instance.cpp
index af369a9..7724e48 100644
--- a/src/arch/rcX/forte_instance.cpp
+++ b/src/arch/rcX/forte_instance.cpp
@@ -1,137 +1,136 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/*******************************************************************************
+ * Copyright (c) 2017-2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
*
- * Contributors:
- * Jose Cabral - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#include "forte_instance.h"
-
-#include "fortenew.h"
-#include "forte_architecture.h"
-#include <stdio.h>
-#include <string>
-#include "../../stdfblib/ita/RMT_DEV.h"
-
-unsigned int forte_default_port = 61499;
-
-/*!\brief Check if the correct endianess has been configured.
- *
- * If the right endianess is not set this function will end FORTE.
- */
-bool checkEndianess();
-
-void createDev(const char *pa_acMGRID, TForteInstance* pa_resultDevice);
-
-void forteGlobalInitialize(void){
- CForteArchitecture::initialize();
-}
-
-void forteGlobalDeinitialize(void){
- CForteArchitecture::deinitialize();
-}
-
-int forteStartInstance(unsigned int pa_port, TForteInstance* pa_resultDevice){
-
- if (65535 < pa_port){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 == pa_port){
- pa_port = forte_default_port;
- }
-
- char flag[] = "-c";
- char address[16] = "localhost:";
- char port[6];
- sprintf(port, "%u", pa_port);
- strcat(address, port);
-
- char* arguments[] = {flag, address};
- return forteStartInstanceGeneric(2, arguments, pa_resultDevice);
-}
-
-
-int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* pa_resultDevice){
-
- if(!CForteArchitecture::isInitialized()){
- return FORTE_ARCHITECTURE_NOT_READY;
- }
-
- if(0 == pa_resultDevice){
- return FORTE_WRONG_PARAMETERS;
- }
-
- if (0 != *pa_resultDevice){
- return FORTE_DEVICE_ALREADY_STARTED;
- }
-
- if (!checkEndianess()){
- return FORTE_WRONG_ENDIANESS;
- }
-
- if(argc <= 1){ //! Default Value (localhost:61499)
- createDev("localhost:61499", pa_resultDevice);
- }
- else{
- if(strcmp("-c", arg[0]) == 0){ //! sets the destination for the connection
- createDev(arg[1], pa_resultDevice);
- }
- else{ //! Lists the help for FORTE
- return FORTE_WRONG_PARAMETERS;
- }
- }
-
- return FORTE_OK;
-}
-
-void forteStopInstance(int pa_nSig, TForteInstance pa_resultDevice){
- if(!CForteArchitecture::isInitialized()){
- return;
- }
- (void) pa_nSig;
- RMT_DEV *poDev = static_cast<RMT_DEV*>(pa_resultDevice);
- if(0 != poDev){
- poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
- poDev->MGR.joinResourceThread();
- DEVLOG_INFO("FORTE finished\n");
- delete poDev;
- }
-}
-
-/*!\brief Creates the Device-Object
- * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
- * \param The result
- */
-void createDev(const char *pa_acMGRID, TForteInstance* pa_resultDevice){
- RMT_DEV *poDev = new RMT_DEV;
- poDev->setMGR_ID(pa_acMGRID);
- poDev->startDevice();
- *pa_resultDevice = poDev;
- DEVLOG_INFO("FORTE is up and running\n");
-}
-
-bool checkEndianess(){
- int i = 1;
- char *p = (char *) &i;
- if(p[0] == 1){
- //we are on a little endian platform
-#ifdef FORTE_BIG_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
- return false;
-#endif
- }
- else{
- //we are on a big endian platform
-#ifdef FORTE_LITTLE_ENDIAN
- DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
- return false;
-#endif
- }
-
- return true;
-}
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "forte_instance.h"
+
+#include "fortenew.h"
+#include "forte_architecture.h"
+#include <stdio.h>
+#include <string>
+#include "../../stdfblib/ita/RMT_DEV.h"
+
+#include "../utils/mainparam_utils.h"
+
+unsigned int forte_default_port = 61499;
+
+/*!\brief Check if the correct endianess has been configured.
+ *
+ * If the right endianess is not set this function will end FORTE.
+ */
+bool checkEndianess();
+
+void createDev(const char *pa_acMGRID, TForteInstance* pa_resultDevice);
+
+void forteGlobalInitialize(void){
+ CForteArchitecture::initialize();
+}
+
+void forteGlobalDeinitialize(void){
+ CForteArchitecture::deinitialize();
+}
+
+int forteStartInstance(unsigned int pa_port, TForteInstance* pa_resultDevice){
+
+ if (65535 < pa_port){
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if (0 == pa_port){
+ pa_port = forte_default_port;
+ }
+
+ char flag[] = "-c";
+ char address[16] = "localhost:";
+ char port[6];
+ sprintf(port, "%u", pa_port);
+ strcat(address, port);
+
+ char* arguments[] = {flag, address};
+ return forteStartInstanceGeneric(2, arguments, pa_resultDevice);
+}
+
+
+int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* pa_resultDevice){
+
+ if(!CForteArchitecture::isInitialized()){
+ return FORTE_ARCHITECTURE_NOT_READY;
+ }
+
+ if(0 == pa_resultDevice){
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ if (0 != *pa_resultDevice){
+ return FORTE_DEVICE_ALREADY_STARTED;
+ }
+
+ if (!checkEndianess()){
+ return FORTE_WRONG_ENDIANESS;
+ }
+
+ const char *pIpPort = parseCommandLineArguments(argc, arg);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))){
+ createDev(pIpPort, pa_resultDevice);
+ }
+ else{ //! If needed call listHelp() to list the help for FORTE
+ return FORTE_WRONG_PARAMETERS;
+ }
+
+ return FORTE_OK;
+}
+
+void forteStopInstance(int pa_nSig, TForteInstance pa_resultDevice){
+ if(!CForteArchitecture::isInitialized()){
+ return;
+ }
+ (void) pa_nSig;
+ RMT_DEV *poDev = static_cast<RMT_DEV*>(pa_resultDevice);
+ if(0 != poDev){
+ poDev->changeFBExecutionState(cg_nMGM_CMD_Kill);
+ poDev->MGR.joinResourceThread();
+ DEVLOG_INFO("FORTE finished\n");
+ delete poDev;
+ }
+}
+
+/*!\brief Creates the Device-Object
+ * \param pa_acMGRID A string containing IP and Port like [IP]:[Port]
+ * \param The result
+ */
+void createDev(const char *pa_acMGRID, TForteInstance* pa_resultDevice){
+ RMT_DEV *poDev = new RMT_DEV;
+ poDev->setMGR_ID(pa_acMGRID);
+ poDev->startDevice();
+ *pa_resultDevice = poDev;
+ DEVLOG_INFO("FORTE is up and running\n");
+}
+
+bool checkEndianess(){
+ int i = 1;
+ char *p = (char *) &i;
+ if(p[0] == 1){
+ //we are on a little endian platform
+#ifdef FORTE_BIG_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a little endian platform and have configured big endian!\n");
+ return false;
+#endif
+ }
+ else{
+ //we are on a big endian platform
+#ifdef FORTE_LITTLE_ENDIAN
+ DEVLOG_ERROR("Wrong endianess configured! You are on a big endian platform and have configured little endian!\n");
+ return false;
+#endif
+ }
+
+ return true;
+}
diff --git a/src/arch/rcX/forte_instance.h b/src/arch/rcX/forte_instance.h
index 4433752..f4ae46e 100644
--- a/src/arch/rcX/forte_instance.h
+++ b/src/arch/rcX/forte_instance.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_sem.cpp b/src/arch/rcX/forte_sem.cpp
index 481dfc2..70b7063 100644
--- a/src/arch/rcX/forte_sem.cpp
+++ b/src/arch/rcX/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_sem.h b/src/arch/rcX/forte_sem.h
index 998e1bf..e34b807 100644
--- a/src/arch/rcX/forte_sem.h
+++ b/src/arch/rcX/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_sync.cpp b/src/arch/rcX/forte_sync.cpp
index 15ed379..4fa9061 100644
--- a/src/arch/rcX/forte_sync.cpp
+++ b/src/arch/rcX/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_sync.h b/src/arch/rcX/forte_sync.h
index eac0471..7d1198b 100644
--- a/src/arch/rcX/forte_sync.h
+++ b/src/arch/rcX/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_thread.cpp b/src/arch/rcX/forte_thread.cpp
index 2f1ed3e..a65aa48 100644
--- a/src/arch/rcX/forte_thread.cpp
+++ b/src/arch/rcX/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/forte_thread.h b/src/arch/rcX/forte_thread.h
index 1f6c208..16d9822 100644
--- a/src/arch/rcX/forte_thread.h
+++ b/src/arch/rcX/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/fortealloc.h b/src/arch/rcX/fortealloc.h
index bfa5c91..3cad69c 100644
--- a/src/arch/rcX/fortealloc.h
+++ b/src/arch/rcX/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXSocketInterface.cpp b/src/arch/rcX/rcXSocketInterface.cpp
index 06731ec..61715bc 100644
--- a/src/arch/rcX/rcXSocketInterface.cpp
+++ b/src/arch/rcX/rcXSocketInterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXSocketInterface.h b/src/arch/rcX/rcXSocketInterface.h
index 575b164..aa9ef69 100644
--- a/src/arch/rcX/rcXSocketInterface.h
+++ b/src/arch/rcX/rcXSocketInterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXTimerHandler.cpp b/src/arch/rcX/rcXTimerHandler.cpp
index 4377255..e88387d 100644
--- a/src/arch/rcX/rcXTimerHandler.cpp
+++ b/src/arch/rcX/rcXTimerHandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXTimerHandler.h b/src/arch/rcX/rcXTimerHandler.h
index d1eb0a5..0747aaa 100644
--- a/src/arch/rcX/rcXTimerHandler.h
+++ b/src/arch/rcX/rcXTimerHandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXUtilities.cpp b/src/arch/rcX/rcXUtilities.cpp
index cc8d431..89892c4 100644
--- a/src/arch/rcX/rcXUtilities.cpp
+++ b/src/arch/rcX/rcXUtilities.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/rcXUtilities.h b/src/arch/rcX/rcXUtilities.h
index 60ad8f3..87837c0 100644
--- a/src/arch/rcX/rcXUtilities.h
+++ b/src/arch/rcX/rcXUtilities.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/rcX/sockhand.h b/src/arch/rcX/sockhand.h
index a757150..bee02a9 100644
--- a/src/arch/rcX/sockhand.h
+++ b/src/arch/rcX/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/threadbase.h b/src/arch/threadbase.h
index eff4950..f3a2755 100644
--- a/src/arch/threadbase.h
+++ b/src/arch/threadbase.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -14,6 +15,7 @@
#include "../core/datatypes/forte_time.h"
#include <forte_sem.h>
+#include <forte_sync.h>
namespace forte {
namespace arch {
@@ -139,6 +141,12 @@
*/
volatile bool mAlive;
+ /*! \brief Mutex to avoid two different threads accessing start() or end() at the same time
+ * If two threads call start() at the same time, the thread will be created twice. A similar problem with end().
+ * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=547620
+ */
+ CSyncObject mThreadMutex;
+
//we don't want that threads can be copied or assigned therefore the copy constructor and assignment operator are declared private
//but not implemented
CThreadBase(const CThreadBase&);
diff --git a/src/arch/threadbase.tpp b/src/arch/threadbase.tpp
index e393a74..3b12736 100644
--- a/src/arch/threadbase.tpp
+++ b/src/arch/threadbase.tpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -31,6 +32,7 @@
template <typename TThreadHandle, TThreadHandle nullHandle, typename ThreadDeletePolicy>
void CThreadBase<TThreadHandle, nullHandle, ThreadDeletePolicy>::start(void){
+ CCriticalRegion criticalRegion(mThreadMutex);
if(nullHandle == mThreadHandle){
mThreadHandle = createThread(mStackSize);
if(nullHandle == mThreadHandle){
@@ -42,6 +44,7 @@
template <typename TThreadHandle, TThreadHandle nullHandle, typename ThreadDeletePolicy>
void CThreadBase<TThreadHandle, nullHandle, ThreadDeletePolicy>::end(void) {
+ CCriticalRegion criticalRegion(mThreadMutex);
if(nullHandle != mThreadHandle){
setAlive(false);
join();
diff --git a/src/arch/timerha.cpp b/src/arch/timerha.cpp
index 7d63f01..78b4749 100644
--- a/src/arch/timerha.cpp
+++ b/src/arch/timerha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Thomas Strasser, Ingo Hegny
@@ -17,8 +18,6 @@
DEFINE_HANDLER(CTimerHandler)
-CTimerHandler *CTimerHandler::smFORTETimer = 0;
-
CTimerHandler::CTimerHandler(CDeviceExecution& paDeviceExecution) : CExternalEventHandler(paDeviceExecution),
mForteTime(0), mTimedFBList(0){
}
@@ -28,7 +27,7 @@
void CTimerHandler::registerTimedFB(STimedFBListEntry *paTimerListEntry, const CIEC_TIME &paTimeInterval) {
//calculate the correct interval based on time-base and timer ticks per seconds
- paTimerListEntry->mInterval = static_cast<TForteUInt32>((paTimeInterval * getTicksPerSecond()) / FORTE_TIME_BASE_UNITS_PER_SECOND);
+ paTimerListEntry->mInterval = static_cast<TForteUInt32>((paTimeInterval * getTicksPerSecond()) / cgForteTimeBaseUnitsPerSecond);
{
CCriticalRegion criticalRegion(mSync);
addTimedFBEntry(paTimerListEntry);
@@ -40,9 +39,9 @@
paTimerListEntry->mNext = 0;
// Correct null intervals that can lead to event queue overflow to 10 ms
- if (paTimerListEntry->mInterval == 0)
+ if(paTimerListEntry->mInterval == 0) {
paTimerListEntry->mTimeOut += (getTicksPerSecond() > 100) ? getTicksPerSecond() / 100 : 1;
-
+ }
if (0 == mTimedFBList) {
mTimedFBList = paTimerListEntry;
} else {
diff --git a/src/arch/timerha.h b/src/arch/timerha.h
index 3e3f54c..2f471d5 100644
--- a/src/arch/timerha.h
+++ b/src/arch/timerha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Monika Wenger, Ingo Hegny
@@ -39,9 +40,6 @@
DECLARE_HANDLER(CTimerHandler);
public:
- /*!\brief Pointer to a general timer used for code outside FBs, like devlog, TIME() and so on
- */
- static CTimerHandler *smFORTETimer;
/*!\brief create the timer handler and set the parameter pointer with the the new timer handler.
*
* This function is not implemented in the standardtimerhandler and has to be implemented in the specific implementation.
diff --git a/src/arch/utils/CMakeLists.txt b/src/arch/utils/CMakeLists.txt
index ec9f210..9ae3007 100644
--- a/src/arch/utils/CMakeLists.txt
+++ b/src/arch/utils/CMakeLists.txt
@@ -1,15 +1,17 @@
-#*******************************************************************************
-# * Copyright (c) 2018 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik Merkumians
-# * - initial API and implementation and/or initial documentation
-# *******************************************************************************/
-
-SET(SOURCE_GROUP ${SOURCE_GROUP}\\utils)
-
-# currently do add anything per default
+#*******************************************************************************
+# Copyright (c) 2018 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik Merkumians
+# * - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+SET(SOURCE_GROUP ${SOURCE_GROUP}\\utils)
+
+# currently do add anything per default
+forte_add_sourcefile_hcpp(mainparam_utils)
\ No newline at end of file
diff --git a/src/arch/utils/mainparam_utils.cpp b/src/arch/utils/mainparam_utils.cpp
new file mode 100644
index 0000000..50ee541
--- /dev/null
+++ b/src/arch/utils/mainparam_utils.cpp
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Tarik Terzimehic
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include <forte_config.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*!\brief Lists the help for FORTE
+ *
+ */
+void listHelp(void){
+ printf("Usage: forte [options]\n");
+ printf("Options:\n");
+ printf("%-20s Display this information\n", " -h");
+ printf("%-20s Set the listening IP and port for the incoming connections\n", " -c <IP>:<port>");
+#ifdef FORTE_SUPPORT_BOOT_FILE
+ printf("%-20s Set the boot-file where to read from to load the applications\n", " -f <file>");
+#endif
+#ifdef FORTE_COM_OPC_UA
+ printf("%-20s Set the listening port for the OPC UA connection\n", " -o <Port>");
+#endif //FORTE_COM_OPC_UA
+}
+
+/*!\brief Parses the command line arguments passed to the main function
+ *
+ */
+const char *parseCommandLineArguments(int argc, char *arg[]){
+
+ const char *pIpPort = "localhost:61499"; //! Default Value (localhost:61499)
+
+ if(argc > 1) {
+ for(size_t i = 1; i < static_cast<size_t>(argc); i += 2) {
+ if('-' == arg[i][0]) {
+ switch(arg[i][1]){
+ case 'c': //! sets the destination for the connection
+ pIpPort = arg[i + 1];
+ break;
+#ifdef FORTE_SUPPORT_BOOT_FILE
+ case 'f': //! sets the boot-file to be used
+ gCommandLineBootFile = arg[i + 1];
+ break;
+#endif //FORTE_SUPPORT_BOOT_FILE
+#ifdef FORTE_COM_OPC_UA
+ case 'o': //! Retrieves OPCUA server port number entered from the command line
+ gOpcuaServerPort = static_cast<TForteUInt16>(atoi(arg[i + 1]));
+ break;
+#endif //FORTE_COM_OPC_UA
+ default: //! Unknown parameter or -h -> Lists the help for FORTE
+ return "";
+ }
+ } else { //! Unknown parameter -> Lists the help for FORTE
+ return "";
+ }
+ }
+ }
+
+ return pIpPort;
+}
diff --git a/src/arch/utils/mainparam_utils.h b/src/arch/utils/mainparam_utils.h
new file mode 100644
index 0000000..1153d27
--- /dev/null
+++ b/src/arch/utils/mainparam_utils.h
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Tarik Terzimehic
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef SRC_ARCH_UTILS_MAINPARAM_UTILS_H_
+#define SRC_ARCH_UTILS_MAINPARAM_UTILS_H_
+
+/*!\brief Lists the help for FORTE
+ *
+ */
+void listHelp(void);
+
+/*!\brief Parses the command line arguments passed to the main function
+ *
+ */
+const char *parseCommandLineArguments(int argc, char *arg[]);
+
+
+#endif /* SRC_ARCH_UTILS_MAINPARAM_UTILS_H_ */
diff --git a/src/arch/utils/timespec_utils.cpp b/src/arch/utils/timespec_utils.cpp
index 30773af..704cc21 100644
--- a/src/arch/utils/timespec_utils.cpp
+++ b/src/arch/utils/timespec_utils.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians
@@ -38,10 +39,8 @@
if(lhs->tv_sec > rhs->tv_sec) {
return false;
}
- if(lhs->tv_sec == rhs->tv_sec) {
- if(lhs->tv_nsec >= rhs->tv_nsec) {
- return false;
- }
+ if(lhs->tv_sec == rhs->tv_sec && lhs->tv_nsec >= rhs->tv_nsec) {
+ return false;
}
return true;
}
diff --git a/src/arch/utils/timespec_utils.h b/src/arch/utils/timespec_utils.h
index 430aee1..2fa1aaa 100644
--- a/src/arch/utils/timespec_utils.h
+++ b/src/arch/utils/timespec_utils.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians
diff --git a/src/arch/vxworks/CMakeLists.txt b/src/arch/vxworks/CMakeLists.txt
index 052a003..fece748 100644
--- a/src/arch/vxworks/CMakeLists.txt
+++ b/src/arch/vxworks/CMakeLists.txt
@@ -1,12 +1,13 @@
#/*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\vxworks)
@@ -26,6 +27,7 @@
forte_add_sourcefile_h(../forte_architecture_time.h)
forte_add_sourcefile_hcpp(../utils/timespec_utils)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp forte_architecture_time.cpp)
SET(FORTE_VXWORKS_FIND_DIR_AUTOMATICALLY ON CACHE BOOL "Selects the rest of needed directories from the CMAKE_FIND_ROOT_PATH")
SET(FORTE_VXWORKS_VSB_CONFIG_FILE "" CACHE STRING "VSB Configuration file")
@@ -95,7 +97,7 @@
forte_add_custom_configuration("#define PRIuFAST64 \"I64u\"")
- forte_add_custom_configuration("typedef unsigned long long uint_fast64_t\\\;")
+ forte_add_custom_configuration("typedef unsigned long long uint_fast64_t\;")
endif()
\ No newline at end of file
diff --git a/src/arch/vxworks/forte_architecture_time.cpp b/src/arch/vxworks/forte_architecture_time.cpp
new file mode 100644
index 0000000..9b565f4
--- /dev/null
+++ b/src/arch/vxworks/forte_architecture_time.cpp
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <timer.h>
+
+#include "forte_architecture_time.h"
+#include "forte_constants.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ return (forte::core::constants::cNanosecondsPerSecond > timerFreq()) ?
+ sysTimestamp() / (timerFreq() / forte::core::constants::cNanosecondsPerSecond) :
+ (sysTimestamp() / timerFreq()) * forte::core::constants::cNanosecondsPerSecond; /// forte::core::constants::cNanosecondsPerSecond) * sysClkRateGet();
+}
diff --git a/src/arch/vxworks/forte_sem.cpp b/src/arch/vxworks/forte_sem.cpp
index 1046d51..151efe1 100644
--- a/src/arch/vxworks/forte_sem.cpp
+++ b/src/arch/vxworks/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/forte_sem.h b/src/arch/vxworks/forte_sem.h
index bf0bb67..7bd5259 100644
--- a/src/arch/vxworks/forte_sem.h
+++ b/src/arch/vxworks/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/forte_sync.cpp b/src/arch/vxworks/forte_sync.cpp
index cabd949..788e1f4 100644
--- a/src/arch/vxworks/forte_sync.cpp
+++ b/src/arch/vxworks/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/forte_sync.h b/src/arch/vxworks/forte_sync.h
index c976992..50af369 100644
--- a/src/arch/vxworks/forte_sync.h
+++ b/src/arch/vxworks/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/forte_thread.cpp b/src/arch/vxworks/forte_thread.cpp
index e028e45..8ad1917 100644
--- a/src/arch/vxworks/forte_thread.cpp
+++ b/src/arch/vxworks/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/forte_thread.h b/src/arch/vxworks/forte_thread.h
index 657c972..b3044f0 100644
--- a/src/arch/vxworks/forte_thread.h
+++ b/src/arch/vxworks/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/fortealloc.h b/src/arch/vxworks/fortealloc.h
index 704237d..7cd1b2c 100644
--- a/src/arch/vxworks/fortealloc.h
+++ b/src/arch/vxworks/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/main.cpp b/src/arch/vxworks/main.cpp
index 910ed11..52a52f5 100644
--- a/src/arch/vxworks/main.cpp
+++ b/src/arch/vxworks/main.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/vxworks/sockhand.h b/src/arch/vxworks/sockhand.h
index ae44ff7..9626b97 100644
--- a/src/arch/vxworks/sockhand.h
+++ b/src/arch/vxworks/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/CMakeLists.txt b/src/arch/win32/CMakeLists.txt
index 5b010f0..52d6c4e 100644
--- a/src/arch/win32/CMakeLists.txt
+++ b/src/arch/win32/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Gerhard Ebenhofer, Martin Melik-Merkumians - initial API and implementation and/or initial documentation
+# Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Gerhard Ebenhofer, Martin Melik-Merkumians - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\win32)
@@ -20,7 +21,8 @@
forte_add_sourcefile_h(fortealloc.h ../forte_architecture_time.h)
forte_add_sourcefile_hcpp(forte_thread forte_sync forte_sem)
- forte_add_sourcefile_cpp(forte_architecture.cpp winforte_printer.cpp)
+ forte_add_sourcefile_cpp(forte_architecture.cpp forte_architecture_time.cpp winforte_printer.cpp)
+ forte_add_sourcefile_cpp(../genforte_realFunctions.cpp)
forte_add_sourcefile_hcpp(forte_instance)
forte_add_to_executable_cpp(main)
@@ -58,6 +60,9 @@
if(MINGW)
#force MINGW to statically link libc and lib stdc++ so that no mingw dlls are needed for forte.exe
forte_add_link_flags("-static-libgcc -static-libstdc++")
+ elseif(MSVC)
+ forte_add_definition("-wd4595") #warning 4595: 'operator delete/delete[]': non-member operator new or delete functions may not be declared inline
+ forte_add_definition("-wd4290") #warning 4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow). A function is declared using exception specification, which Visual C++ accepts but does not implement. (from new/delete warning)
endif()
forte_add_definition("-D_CRT_SECURE_NO_DEPRECATE")
@@ -65,10 +70,10 @@
forte_add_definition("-D_SCL_SECURE_NO_WARNINGS")
forte_add_definition("-D_CRT_SECURE_NO_WARNINGS")
forte_add_definition("-D_NO_W32_PSEUDO_MODIFIERS") #takes care of IN, OUT and OPTIONAL in mingw
-
+
if(FORTE_TESTS AND FORTE_USE_TEST_CONFIG_IN_FORTE)
- forte_add_definition("-DBOOST_TEST_NO_LIB -DFORTE_USE_DEFAULT_NEW_AND_DELETE")
+ forte_add_definition("-DBOOST_TEST_NO_LIB")
endif(FORTE_TESTS AND FORTE_USE_TEST_CONFIG_IN_FORTE)
diff --git a/src/arch/win32/externtimeha.cpp b/src/arch/win32/externtimeha.cpp
index bb994bd..d29a7cd 100644
--- a/src/arch/win32/externtimeha.cpp
+++ b/src/arch/win32/externtimeha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011, 2013 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/externtimeha.h b/src/arch/win32/externtimeha.h
index a252cd8..a590e99 100644
--- a/src/arch/win32/externtimeha.h
+++ b/src/arch/win32/externtimeha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_architecture.cpp b/src/arch/win32/forte_architecture.cpp
index abba973..c97e7ec 100644
--- a/src/arch/win32/forte_architecture.cpp
+++ b/src/arch/win32/forte_architecture.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_architecture_time.cpp b/src/arch/win32/forte_architecture_time.cpp
new file mode 100644
index 0000000..a6f3824
--- /dev/null
+++ b/src/arch/win32/forte_architecture_time.cpp
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - Adds getNanoSecondsMonotonic
+ *******************************************************************************/
+
+#include <windows.h>
+
+#include "forte_architecture_time.h"
+#include "forte_constants.h"
+
+uint_fast64_t getNanoSecondsMonotonic() {
+ LARGE_INTEGER performance_counter;
+ LARGE_INTEGER performance_frequency;
+
+ QueryPerformanceCounter(&performance_counter);
+ QueryPerformanceFrequency(&performance_frequency);
+
+ return static_cast<uint_fast64_t>(performance_counter.QuadPart * forte::core::constants::cNanosecondsPerSecond
+ / performance_frequency.QuadPart);
+}
+
+
diff --git a/src/arch/win32/forte_instance.cpp b/src/arch/win32/forte_instance.cpp
index 12c1ec4..dab53e2 100644
--- a/src/arch/win32/forte_instance.cpp
+++ b/src/arch/win32/forte_instance.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_instance.h b/src/arch/win32/forte_instance.h
index dc6309f..f128357 100644
--- a/src/arch/win32/forte_instance.h
+++ b/src/arch/win32/forte_instance.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_sem.cpp b/src/arch/win32/forte_sem.cpp
index 4ff71d9..7cd4e37 100644
--- a/src/arch/win32/forte_sem.cpp
+++ b/src/arch/win32/forte_sem.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_sem.h b/src/arch/win32/forte_sem.h
index 2acf5de..b0a556d 100644
--- a/src/arch/win32/forte_sem.h
+++ b/src/arch/win32/forte_sem.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2018 fortiss GmbH, TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_sync.cpp b/src/arch/win32/forte_sync.cpp
index 643d518..d0ab000 100644
--- a/src/arch/win32/forte_sync.cpp
+++ b/src/arch/win32/forte_sync.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010, 2011, 2017 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_sync.h b/src/arch/win32/forte_sync.h
index c3d98ae..bde0fa6 100644
--- a/src/arch/win32/forte_sync.h
+++ b/src/arch/win32/forte_sync.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2013, 2017 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik-Merkumians - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_thread.cpp b/src/arch/win32/forte_thread.cpp
index 1363f13..4a8711e 100644
--- a/src/arch/win32/forte_thread.cpp
+++ b/src/arch/win32/forte_thread.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2017 ACIN, Profactor GmbH, AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/forte_thread.h b/src/arch/win32/forte_thread.h
index 31c7c8e..1eb6e7f 100644
--- a/src/arch/win32/forte_thread.h
+++ b/src/arch/win32/forte_thread.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2017 ACIN, Profactor GmbH, AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser - initial API and
diff --git a/src/arch/win32/fortealloc.h b/src/arch/win32/fortealloc.h
index 1bd45a2..41f8527 100644
--- a/src/arch/win32/fortealloc.h
+++ b/src/arch/win32/fortealloc.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2016 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
@@ -12,11 +13,6 @@
#ifndef FORTEALLOC_H_
#define FORTEALLOC_H_
-//on win32 environments use default new operator
-#ifndef FORTE_USE_DEFAULT_NEW_AND_DELETE
- #define FORTE_USE_DEFAULT_NEW_AND_DELETE
-#endif
-
//on win32 environments we are typically happy with the generic alloc implementation based on malloc and free
#include "../genfortealloc.h"
diff --git a/src/arch/win32/main.cpp b/src/arch/win32/main.cpp
index 585c0a1..21b3a18 100644
--- a/src/arch/win32/main.cpp
+++ b/src/arch/win32/main.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
- * Copyright (c) 2010 - 2017 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2010 - 2018 ACIN, Profactor GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
@@ -12,6 +13,8 @@
#include "../forte_architecture.h"
#include "../devlog.h"
#include "../../stdfblib/ita/RMT_DEV.h"
+#include "../utils/mainparam_utils.h"
+
#include <stdio.h>
#include <signal.h>
@@ -54,34 +57,22 @@
delete poDev;
}
-/*!\brief Lists the help for FORTE
- *
- */
-void listHelp(){
- printf("\nUsage of FORTE:\n");
- printf(" -h\t lists this help.\n");
- printf("\n");
- printf(" -c\t sets the destination for the connection.\n");
- printf(" \t Usage: forte -c <IP>:<Port>");
- printf("\n");
-}
-
int main(int argc, char *arg[]){
if(CForteArchitecture::initialize()){
- if(argc <= 1){ //! Default Value (localhost:61499)
- createDev("localhost:61499");
+
+ const char *pIpPort = parseCommandLineArguments(argc, arg);
+ if((0 != strlen(pIpPort)) && (NULL != strchr(pIpPort, ':'))){
+ createDev(pIpPort);
}
- else{
- if(strcmp("-c", arg[1]) == 0){ //! sets the destination for the connection
- createDev(arg[2]);
- }
- else{ //! Lists the help for FORTE
- listHelp();
- }
+ else{ //! Lists the help for FORTE
+ listHelp();
}
+
CForteArchitecture::deinitialize();
- }else{
+
+ }
+ else{
DEVLOG_ERROR("Architecture could not be initialized\n");
}
return 0;
diff --git a/src/arch/win32/pctimeha.cpp b/src/arch/win32/pctimeha.cpp
index 5a1cab1..a73cfb7 100644
--- a/src/arch/win32/pctimeha.cpp
+++ b/src/arch/win32/pctimeha.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010, 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/pctimeha.h b/src/arch/win32/pctimeha.h
index 96bd34f..066b833 100644
--- a/src/arch/win32/pctimeha.h
+++ b/src/arch/win32/pctimeha.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010, 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/serlayer/CMakeLists.txt b/src/arch/win32/serlayer/CMakeLists.txt
index 2db0907..b5a4f54 100644
--- a/src/arch/win32/serlayer/CMakeLists.txt
+++ b/src/arch/win32/serlayer/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik-Merkumians - initial API and implementation and/or initial documentation
+# Copyright (c) 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_network_layer(SER OFF "ser" CWin32SerComLayer cwin32sercomlayer "Enable Forte serial line communication")
if(FORTE_COM_SER)
diff --git a/src/arch/win32/serlayer/cwin32sercomhandler.cpp b/src/arch/win32/serlayer/cwin32sercomhandler.cpp
index d64c449..f99cf8c 100644
--- a/src/arch/win32/serlayer/cwin32sercomhandler.cpp
+++ b/src/arch/win32/serlayer/cwin32sercomhandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/serlayer/cwin32sercomhandler.h b/src/arch/win32/serlayer/cwin32sercomhandler.h
index 4029276..1d0c89b 100644
--- a/src/arch/win32/serlayer/cwin32sercomhandler.h
+++ b/src/arch/win32/serlayer/cwin32sercomhandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/serlayer/cwin32sercomlayer.cpp b/src/arch/win32/serlayer/cwin32sercomlayer.cpp
index 9e7a6cc..5f72a2e 100644
--- a/src/arch/win32/serlayer/cwin32sercomlayer.cpp
+++ b/src/arch/win32/serlayer/cwin32sercomlayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/serlayer/cwin32sercomlayer.h b/src/arch/win32/serlayer/cwin32sercomlayer.h
index ca27829..b31a138 100644
--- a/src/arch/win32/serlayer/cwin32sercomlayer.h
+++ b/src/arch/win32/serlayer/cwin32sercomlayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/sockhand.h b/src/arch/win32/sockhand.h
index d794339..a3a8ef7 100644
--- a/src/arch/win32/sockhand.h
+++ b/src/arch/win32/sockhand.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/win32socketinterf.cpp b/src/arch/win32/win32socketinterf.cpp
index f8c104a..fd1a508 100644
--- a/src/arch/win32/win32socketinterf.cpp
+++ b/src/arch/win32/win32socketinterf.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny, Gerhard Ebenhofer, Thomas Strasser
diff --git a/src/arch/win32/win32socketinterf.h b/src/arch/win32/win32socketinterf.h
index cabc11c..186b553 100644
--- a/src/arch/win32/win32socketinterf.h
+++ b/src/arch/win32/win32socketinterf.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny - initial API and implementation and/or initial documentation
diff --git a/src/arch/win32/winforte_printer.cpp b/src/arch/win32/winforte_printer.cpp
index 202d7b8..0cad77e 100644
--- a/src/arch/win32/winforte_printer.cpp
+++ b/src/arch/win32/winforte_printer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 83bb157..6e649dd 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -1,13 +1,14 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2016 Profactor GmbH, ACIN, fortiss GmbH
+# Copyright (c) 2010 - 2016 Profactor GmbH, ACIN, fortiss GmbH
# * 2018 Johannes Kepler University
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Micheal Hofmann, Alois Zoitl, Gerhard Ebenhofer, Monika Wenger
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Micheal Hofmann, Alois Zoitl, Gerhard Ebenhofer, Monika Wenger
# * - initial implementation and rework communication infrastructure
# * Martin Jobst - adapt for LUA integration
# * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
@@ -25,7 +26,7 @@
forte_add_sourcefile_hcpp(conn dataconn eventconn)
-forte_add_sourcefile_h (esfb.h event.h mgmcmd.h fortenode.h fortelist.h convert_functions.h genfb.h)
+forte_add_sourcefile_h (esfb.h event.h mgmcmd.h fortenode.h fortelist.h genfb.h)
forte_add_sourcefile_hcpp(simplefb basicfb cfb device devexec )
forte_add_sourcefile_hcpp(extevhan funcbloc fbcontainer if2indco)
forte_add_sourcefile_hcpp(resource stringdict typelib ecet)
diff --git a/src/core/adapter.cpp b/src/core/adapter.cpp
index 7becd47..0722e8d 100644
--- a/src/core/adapter.cpp
+++ b/src/core/adapter.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
-* Copyright (c) 2008 - 2015 ACIN, fortiss GmbH, 2018 TU Vienna/ACIN
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Ingo Hegny, Alois Zoitl
-* - initial implementation and rework communication infrastructure
-* Martin Melik-Merkumians - fixes connect, prepares for working AnyAdapter
-*******************************************************************************/
+ * Copyright (c) 2008 - 2015 ACIN, fortiss GmbH, 2018 TU Vienna/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Ingo Hegny, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes connect, prepares for working AnyAdapter
+ *******************************************************************************/
#include <string.h>
#include "adapter.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
diff --git a/src/core/adapter.h b/src/core/adapter.h
index 67c3de7..b298689 100644
--- a/src/core/adapter.h
+++ b/src/core/adapter.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2008 - 2015 ACIN, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny, Alois Zoitl, Martin Melik Merkumians
diff --git a/src/core/adapterconn.cpp b/src/core/adapterconn.cpp
index cf5679e..1838b62 100644
--- a/src/core/adapterconn.cpp
+++ b/src/core/adapterconn.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2008 - 2015 ACIN, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny, Alois Zoitl
@@ -46,9 +47,9 @@
typifyAnyAdapter(socket, mPlug);
if((socket->isSocket()) && (socket->isCompatible(mPlug))){
- if(((mPlug->connect(socket, this)) && (socket->connect(mPlug, this)))){
+ if(mPlug->connect(socket, this) && socket->connect(mPlug, this)) {
mSocket = socket;
- addDestination(SConnectionPoint(paDstFB, portId));
+ addDestination(CConnectionPoint(paDstFB, portId));
retVal = e_RDY;
}
else{
@@ -77,7 +78,7 @@
TPortId portId = paDstFB->getAdapterPortId(paDstPortNameId);
if(cg_unInvalidPortId != portId){
- retVal = CConnection::removeDestination(SConnectionPoint(paDstFB, portId));
+ retVal = CConnection::removeDestination(CConnectionPoint(paDstFB, portId));
if(e_RDY == retVal){
performDisconnect();
}
diff --git a/src/core/adapterconn.h b/src/core/adapterconn.h
index ad37ffc..176df4a 100644
--- a/src/core/adapterconn.h
+++ b/src/core/adapterconn.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2008 - 2015 ACIN, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny, Alois Zoitl, Monika Wenger
@@ -27,9 +28,7 @@
virtual EMGMResponse connect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
virtual EMGMResponse connectToCFBInterface(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
-#ifndef FORTE_CLASS_0
virtual EMGMResponse disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
-#endif
CAdapter *getPlug(){
return mPlug;
diff --git a/src/core/anyadapter.cpp b/src/core/anyadapter.cpp
index 47d3780..0f29f42 100644
--- a/src/core/anyadapter.cpp
+++ b/src/core/anyadapter.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 fortiss GmbH, 2018 TU Vienna/ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -17,12 +18,13 @@
#include "anyadapter_gen.cpp"
#endif
-DEFINE_ADAPTER_TYPE(CAnyAdapter, g_nStringIdANY_ADAPTER)
+DEFINE_GENERIC_ADAPTER_TYPE(CAnyAdapter, g_nStringIdANY_ADAPTER)
const SFBInterfaceSpec CAnyAdapter::scm_stFBInterfaceSpec = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
CAnyAdapter::CAnyAdapter(CStringDictionary::TStringId pa_anAdapterInstanceName, CResource *pa_poSrcRes, bool pa_bIsPlug) :
- CAdapter(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_anAdapterInstanceName, &scm_stFBInterfaceSpec, pa_bIsPlug, 0, 0), m_ParentFB(0){
+ CAdapter(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_anAdapterInstanceName, &scm_stFBInterfaceSpec, pa_bIsPlug, 0, 0), m_ParentFB(0),
+ m_nParentAdapterlistID(0){
memset(&m_stCurrentFBInterfaceSpec, 0, sizeof(SFBInterfaceSpec));
}
diff --git a/src/core/anyadapter.h b/src/core/anyadapter.h
index fac18da..787bc5e 100644
--- a/src/core/anyadapter.h
+++ b/src/core/anyadapter.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/basicfb.cpp b/src/core/basicfb.cpp
index 97fd2d3..1bcd969 100644
--- a/src/core/basicfb.cpp
+++ b/src/core/basicfb.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <string.h>
#include "basicfb.h"
@@ -22,18 +24,15 @@
cm_pstVarInternals(pa_pstVarInternals){
m_aoInternals = 0;
- if((0 != cm_pstVarInternals) && (0 != pa_acBasicFBVarsData)){
- if(cm_pstVarInternals->m_nNumIntVars){
- pa_acBasicFBVarsData +=
- genFBVarsDataSize(m_pstInterfaceSpec->m_nNumDIs, m_pstInterfaceSpec->m_nNumDOs, m_pstInterfaceSpec->m_nNumAdapters);
+ if((0 != cm_pstVarInternals) && (cm_pstVarInternals->m_nNumIntVars) && (0 != pa_acBasicFBVarsData)) {
+ pa_acBasicFBVarsData += genFBVarsDataSize(m_pstInterfaceSpec->m_nNumDIs, m_pstInterfaceSpec->m_nNumDOs, m_pstInterfaceSpec->m_nNumAdapters);
- m_aoInternals = reinterpret_cast<CIEC_ANY *>(pa_acBasicFBVarsData);
+ m_aoInternals = reinterpret_cast<CIEC_ANY *>(pa_acBasicFBVarsData);
- const CStringDictionary::TStringId *pnDataIds = cm_pstVarInternals->m_aunIntVarsDataTypeNames;
- for(int i = 0; i < cm_pstVarInternals->m_nNumIntVars; ++i){
- createDataPoint(&pnDataIds, pa_acBasicFBVarsData);
- pa_acBasicFBVarsData += sizeof(CIEC_ANY);
- }
+ const CStringDictionary::TStringId *pnDataIds = cm_pstVarInternals->m_aunIntVarsDataTypeNames;
+ for(int i = 0; i < cm_pstVarInternals->m_nNumIntVars; ++i) {
+ createDataPoint(&pnDataIds, pa_acBasicFBVarsData);
+ pa_acBasicFBVarsData += sizeof(CIEC_ANY);
}
}
}
@@ -51,11 +50,8 @@
CIEC_ANY *poRetVal = CFunctionBlock::getVar(paNameList, paNameListSize);
if((0 == poRetVal) && (1 == paNameListSize)){
poRetVal = getInternalVar(*paNameList);
- if(0 == poRetVal){
- //TODO consider if this can also be an string ID in a differnt way
- if(!strcmp("$ECC", CStringDictionary::getInstance().get(*paNameList))){
+ if(0 == poRetVal && !strcmp("$ECC", CStringDictionary::getInstance().get(*paNameList))) { //TODO consider if this can also be an string ID in a differnt way
poRetVal = &m_nECCState;
- }
}
}
return poRetVal;
diff --git a/src/core/basicfb.h b/src/core/basicfb.h
index 5388301..590d57a 100644
--- a/src/core/basicfb.h
+++ b/src/core/basicfb.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Gunnar Grabmair, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Gunnar Grabmair, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _BASICFB_H_
#define _BASICFB_H_
diff --git a/src/core/cfb.cpp b/src/core/cfb.cpp
index 772c442..81853a3 100644
--- a/src/core/cfb.cpp
+++ b/src/core/cfb.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Gunnar Grabmaier, Gerhard Ebenhofer,
- * Martin Melik Merkumians, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Gunnar Grabmaier, Gerhard Ebenhofer,
+ * Martin Melik Merkumians, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <string.h>
#include "cfb.h"
#include "adapter.h"
diff --git a/src/core/cfb.h b/src/core/cfb.h
index 6f95e23..7b1faa7 100644
--- a/src/core/cfb.h
+++ b/src/core/cfb.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Gunnar Grabmaier, Gerhard Ebenhofer,
- * Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Gunnar Grabmaier, Gerhard Ebenhofer,
+ * Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _CFB_H_
#define _CFB_H_
diff --git a/src/core/cominfra/CMakeLists.txt b/src/core/cominfra/CMakeLists.txt
index d38a263..ad9d0ce 100644
--- a/src/core/cominfra/CMakeLists.txt
+++ b/src/core/cominfra/CMakeLists.txt
@@ -1,16 +1,18 @@
################################################################################
- # Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
- # All rights reserved. This program and the accompanying materials
- # are made available under the terms of the Eclipse Public License v1.0
- # which accompanies this distribution, and is available at
- # http://www.eclipse.org/legal/epl-v10.html
- #
- # Contributors:
- # Alois Zoitl, Michael Hofmann
- # - initial implementation and rework communication infrastructure
- # Martin Melik-Merkumians, Monika Wenger
- # - add raw communication layer for ONE STRING input and ONE STRING output
- ################################################################################
+# Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Michael Hofmann
+# - initial implementation and rework communication infrastructure
+# Martin Melik-Merkumians, Monika Wenger
+# - add raw communication layer for ONE STRING input and ONE STRING output
+################################################################################
#############################################################################
# Core
@@ -18,12 +20,12 @@
forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
forte_add_sourcefile_h(comtypes.h comlayersmanager.h)
-forte_add_sourcefile_hcpp(basecommfb commfb comlayer comlayer_async)
+forte_add_sourcefile_hcpp(basecommfb commfb comlayer)
# Will be created in top-level-cmake-file
forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/core/cominfra/comlayersmanager.cpp) # created file
+forte_add_network_layer(ETH ON "ip" CIPComLayer ipcomlayer "Enable Forte Com Ethernet") #adding this first we make sure that sockhand.h is included first
forte_add_network_layer(FBDK ON "fbdk" CFBDKASN1ComLayer fbdkasn1layer "Enable Forte Com FBDK")
-forte_add_network_layer(ETH ON "ip" CIPComLayer ipcomlayer "Enable Forte Com Ethernet")
forte_add_network_layer(LOCAL ON "loc" CLocalComLayer localcomlayer "Enable Forte local communication")
forte_add_network_layer(RAW ON "raw" CRawDataComLayer rawdatacomlayer "Enable Forte raw communication")
diff --git a/src/core/cominfra/basecommfb.cpp b/src/core/cominfra/basecommfb.cpp
index 6be1acf..9eb117e 100644
--- a/src/core/cominfra/basecommfb.cpp
+++ b/src/core/cominfra/basecommfb.cpp
@@ -1,18 +1,20 @@
/*******************************************************************************
- * Copyright (c) 2006-2014 ACIN, Profactor GmbH, fortiss GmbH
- * 2018 Johannes Kepler University, 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Rene Smodic, Alois Zoitl, Michael Hofmann, Martin Melik Merkumians,
- * Patrick Smejkal
- * - initial implementation and rework communication infrastructure
- * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
- * Martin Melik Merkumians - removes usage of unsecure function
- *******************************************************************************/
+ * Copyright (c) 2006-2014 ACIN, Profactor GmbH, fortiss GmbH
+ * 2018 Johannes Kepler University, 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Rene Smodic, Alois Zoitl, Michael Hofmann, Martin Melik Merkumians,
+ * Patrick Smejkal
+ * - initial implementation and rework communication infrastructure
+ * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
+ * Martin Melik Merkumians - removes usage of unsecure function
+ *******************************************************************************/
#include "basecommfb.h"
#include "comlayer.h"
diff --git a/src/core/cominfra/basecommfb.h b/src/core/cominfra/basecommfb.h
index 2589c50..5b73233 100644
--- a/src/core/cominfra/basecommfb.h
+++ b/src/core/cominfra/basecommfb.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2006-2015 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Thomas Strasser, Alois Zoitl, Michael Hofmann,
diff --git a/src/core/cominfra/comCallback.h b/src/core/cominfra/comCallback.h
index 27c1005..5e6556f 100644
--- a/src/core/cominfra/comCallback.h
+++ b/src/core/cominfra/comCallback.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial implementation and rework communication infrastructure
diff --git a/src/core/cominfra/comlayer.cpp b/src/core/cominfra/comlayer.cpp
index b3499d5..9199088 100644
--- a/src/core/cominfra/comlayer.cpp
+++ b/src/core/cominfra/comlayer.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- * Michael Hofmann - rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ * Michael Hofmann - rework communication infrastructure
+ *******************************************************************************/
#include "comlayer.h"
#include "commfb.h"
diff --git a/src/core/cominfra/comlayer.h b/src/core/cominfra/comlayer.h
index 6a4c7b2..9f65773 100644
--- a/src/core/cominfra/comlayer.h
+++ b/src/core/cominfra/comlayer.h
@@ -1,16 +1,18 @@
/*******************************************************************************
- * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- * Michael Hofmann - rework communication infrastructure
- * Ingo Hegny - fix doxygen-documentation inconsistencies
- * Martin Melik-Merkumians - add serial communication layer for ONE input and ONE output
- *******************************************************************************/
+ * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and Profactor GmbH.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ * Michael Hofmann - rework communication infrastructure
+ * Ingo Hegny - fix doxygen-documentation inconsistencies
+ * Martin Melik-Merkumians - add serial communication layer for ONE input and ONE output
+ *******************************************************************************/
#ifndef _COMLAYER_H_
#define _COMLAYER_H_
diff --git a/src/core/cominfra/comlayer_async.cpp b/src/core/cominfra/comlayer_async.cpp
deleted file mode 100644
index c236d4b..0000000
--- a/src/core/cominfra/comlayer_async.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stefan Profanter - initial implementation
- *******************************************************************************/
-
-#include "comlayer_async.h"
-#include <devlog.h>
-#include <criticalregion.h>
-
-forte::com_infra::CComLayerAsync::CComLayerAsync(forte::com_infra::CComLayer *pa_poUpperLayer, forte::com_infra::CBaseCommFB *pa_poComFB) :
- CComLayer(pa_poUpperLayer, pa_poComFB), mCurrentCallId(0){
-
-}
-
-forte::com_infra::CComLayerAsync::~CComLayerAsync() {
- setAlive(false);
- mSuspendSemaphore.inc();
-}
-
-void forte::com_infra::CComLayerAsync::run() {
- while(isAlive()){
-
- mSuspendSemaphore.waitIndefinitely();
-
- while (isAlive() && !mAsyncCalls.isEmpty()) {
- SAsyncData first(*mAsyncCalls.begin());
- first.mResult = handleAsyncCall(first.mCallId, first.mPayload);
- {
- CCriticalRegion criticalRegion(mAsyncResultsMutex);
- mAsyncResults.pushBack(first);
- }
- handleAsyncEvent();
- mAsyncCalls.popFront();
- }
- }
-}
-
-unsigned int forte::com_infra::CComLayerAsync::callAsync(void *payload) {
- if (!isAlive()) {
- DEVLOG_ERROR("start() has to be called before callAsync\n");
- return 0;
- }
-
- mCurrentCallId++;
- if (mCurrentCallId == 0){
- // handle overflow. Do not return 0
- mCurrentCallId = 1;
- }
- mAsyncCalls.pushBack(SAsyncData(mCurrentCallId, payload, 0));
- mSuspendSemaphore.inc();
- return mCurrentCallId;
-}
-
-forte::com_infra::EComResponse forte::com_infra::CComLayerAsync::processInterrupt() {
- if (mAsyncResults.isEmpty())
- return processInterruptChild();
-
- CCriticalRegion criticalRegion(mAsyncResultsMutex);
- while (isAlive() && !mAsyncResults.isEmpty()) {
- const SAsyncData &value = *(mAsyncResults.begin());
- handleAsyncCallResult(value.mCallId, value.mPayload, value.mResult);
- mAsyncResults.popFront();
- }
- return processInterruptChild();
-}
-
-forte::com_infra::EComResponse forte::com_infra::CComLayerAsync::processInterruptChild() {
- return e_ProcessDataOk;
-}
diff --git a/src/core/cominfra/comlayer_async.h b/src/core/cominfra/comlayer_async.h
deleted file mode 100644
index afd2439..0000000
--- a/src/core/cominfra/comlayer_async.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stefan Profanter - initial implementation
- *******************************************************************************/
-
-
-#ifndef FORTE_COMLAYER_ASYNC_H
-#define FORTE_COMLAYER_ASYNC_H
-
-#include "comlayer.h"
-#include "../extevhan.h"
-#include "../fortelist.h"
-#include <forte_thread.h>
-#include <forte_sync.h>
-#include <forte_sem.h>
-
-namespace forte {
- namespace com_infra {
-
-
- class CComLayerAsync: public CComLayer, protected CThread{
- public:
- virtual ~CComLayerAsync();
-
- protected:
- CComLayerAsync(CComLayer* pa_poUpperLayer, CBaseCommFB* pa_poComFB);
- virtual void run();
-
- unsigned int callAsync(void *payload);
-
- virtual void* handleAsyncCall(const unsigned int callId, void *payload) = 0;
-
- virtual void handleAsyncCallResult(const unsigned int callId, void *payload, void *result) = 0;
-
- virtual void handleAsyncEvent() = 0;
-
- virtual EComResponse processInterruptChild();
-
- private:
- virtual EComResponse processInterrupt();
-
- struct SAsyncData {
- const unsigned int mCallId;
- void *mPayload;
- void *mResult;
-
- SAsyncData(unsigned int paCallId, void *paPayload, void *paResult) :
- mCallId(paCallId), mPayload(paPayload), mResult(paResult){
- }
- };
-
-
- typedef CSinglyLinkedList<SAsyncData> TAsynchDataList;
- TAsynchDataList mAsyncCalls;
- TAsynchDataList mAsyncResults;
- unsigned int mCurrentCallId;
-
-
- CSyncObject mAsyncResultsMutex;
- CSemaphore mSuspendSemaphore;
- };
-
- }
-}
-
-#endif //FORTE_COMLAYER_ASYNC_H
diff --git a/src/core/cominfra/comlayersmanager.cpp.in b/src/core/cominfra/comlayersmanager.cpp.in
index 400603f..3836e36 100644
--- a/src/core/cominfra/comlayersmanager.cpp.in
+++ b/src/core/cominfra/comlayersmanager.cpp.in
@@ -1,18 +1,20 @@
/*******************************************************************************
- * Copyright (c) 2010, 2011 ACIN and Profactor GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- * Ingo Hegny - moved encoding of adapter-event-ids to a single point
- * Michael Hofmann - rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010, 2011 ACIN and Profactor GmbH.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ * Ingo Hegny - moved encoding of adapter-event-ids to a single point
+ * Michael Hofmann - rework communication infrastructure
+ *******************************************************************************/
+
#include <fortenew.h>
#include "comlayersmanager.h"
-#include "basecommfb.h"
#include <string.h>
${LAYERMANAGER_INCLUDE}
diff --git a/src/core/cominfra/comlayersmanager.h b/src/core/cominfra/comlayersmanager.h
index 01a8144..8a7a230 100644
--- a/src/core/cominfra/comlayersmanager.h
+++ b/src/core/cominfra/comlayersmanager.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2011 TU Wien ACIN and Profactor GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- * Michael Hofmann - communication infrastructure based on layer
- *******************************************************************************/
+ * Copyright (c) 2007 - 2011 TU Wien ACIN and Profactor GmbH.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ * Michael Hofmann - communication infrastructure based on layer
+ *******************************************************************************/
#ifndef _COMLAYERSMANAGER_H_
#define _COMLAYERSMANAGER_H_
diff --git a/src/core/cominfra/commfb.cpp b/src/core/cominfra/commfb.cpp
index 9e0f430..0f61ad7 100644
--- a/src/core/cominfra/commfb.cpp
+++ b/src/core/cominfra/commfb.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2006-2014 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Michael Hofmann, Martin Melik Merkumians,
@@ -52,10 +53,10 @@
return retVal;
}
-void CCommFB::executeEvent(int pa_nEIID) {
+void CCommFB::executeEvent(int paEIID) {
EComResponse resp = e_Nothing;
- switch (pa_nEIID) {
+ switch (paEIID) {
case scm_nEventINITID:
if (true == QI()) {
resp = openConnection();
@@ -75,12 +76,11 @@
break;
}
- if (resp & e_Terminated) {
- if (m_eCommServiceType == e_Server) {
+ if(resp & e_Terminated) {
+ if(m_eCommServiceType == e_Server && scm_nEventINITID != paEIID) { //if e_Terminated happened in INIT event, server shouldn't be silent
//servers will not send information on client termination and should silently start to listen again
resp = e_Nothing;
- }
- else {
+ } else {
//subscribers and clients will close the connection and inform the user
closeConnection();
}
@@ -139,7 +139,7 @@
break;
}
}
- if (0 != sParamA) // search for 2nd underscore
+ if(0 != sParamA) { // search for 2nd underscore
for (i = i + 1; i < inlength - 1; i++) {
if (tempstring[i] == '_') {
tempstring[i] = '\0';
@@ -147,7 +147,7 @@
break;
}
}
-
+ }
if (0 == sParamB){ // no underscore found
return false;
}
@@ -210,11 +210,11 @@
diDataTypeNames[0] = g_nStringIdBOOL;
diNames[0] = g_nStringIdQI;
- #ifdef FORTE_USE_WSTRING_DATATYPE
+#ifdef FORTE_USE_WSTRING_DATATYPE
diDataTypeNames[1] = g_nStringIdWSTRING;
- #else
+#else //FORTE_USE_WSTRING_DATATYPE
diDataTypeNames[1] = g_nStringIdSTRING;
- #endif
+#endif //FORTE_USE_WSTRING_DATATYPE
diNames[1] = g_nStringIdID;
}
diff --git a/src/core/cominfra/commfb.h b/src/core/cominfra/commfb.h
index c87c732..cbb59f7 100644
--- a/src/core/cominfra/commfb.h
+++ b/src/core/cominfra/commfb.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2006-2015 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Thomas Strasser, Alois Zoitl, Michael Hofmann,
diff --git a/src/core/cominfra/comtypes.h b/src/core/cominfra/comtypes.h
index d4eead9..829962e 100644
--- a/src/core/cominfra/comtypes.h
+++ b/src/core/cominfra/comtypes.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2010-2013 TU Wien ACIN.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- * Martin Melik-Merkumians - fix typo in forte::com_infra::EComConnectionState
- *******************************************************************************/
+ * Copyright (c) 2010-2013 TU Wien ACIN.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fix typo in forte::com_infra::EComConnectionState
+ *******************************************************************************/
#ifndef _COMTYPES_H_
#define _COMTYPES_H_
diff --git a/src/core/cominfra/fbdkasn1layer.cpp b/src/core/cominfra/fbdkasn1layer.cpp
index 0af2e63..dea9eee 100644
--- a/src/core/cominfra/fbdkasn1layer.cpp
+++ b/src/core/cominfra/fbdkasn1layer.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2010-2013 TU Wien ACIN, Profactor GmbH, nxtControl GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Ingo Hegny, Michael Hofmann, Stanislav Meduna,
- * Martin Melik Merkumians
- * - initial implementation, rework communication infrastructure, bug fixes
- *******************************************************************************/
+ * Copyright (c) 2010-2013 TU Wien ACIN, Profactor GmbH, nxtControl GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Michael Hofmann, Stanislav Meduna,
+ * Martin Melik Merkumians
+ * - initial implementation, rework communication infrastructure, bug fixes
+ *******************************************************************************/
#include "fbdkasn1layer.h"
#include "basecommfb.h"
#include "../../arch/timerha.h"
@@ -123,8 +125,8 @@
return eRetVal;
}
-EComResponse CFBDKASN1ComLayer::recvData(const void *pa_pvData, unsigned int pa_unSize){
- TForteByte *recvData = (TForteByte *) pa_pvData;
+EComResponse CFBDKASN1ComLayer::recvData(const void *paData, unsigned int paSize){
+ TForteByte *receivedData = const_cast<TForteByte*>(static_cast<const TForteByte *>(paData));
EComResponse eRetVal = e_Nothing;
if(m_poFb != 0){
@@ -135,16 +137,16 @@
// TODO: only copy if necessary
if(0 == mDeserBufPos){
- usedBuffer = recvData;
- usedBufferSize = pa_unSize;
+ usedBuffer = receivedData;
+ usedBufferSize = paSize;
}
else{
- if((pa_unSize + mDeserBufPos) > mDeserBufSize){
- resizeDeserBuffer(pa_unSize + mDeserBufPos);
+ if((paSize + mDeserBufPos) > mDeserBufSize){
+ resizeDeserBuffer(paSize + mDeserBufPos);
}
- memcpy((mDeserBuf + mDeserBufPos), recvData, pa_unSize);
+ memcpy((mDeserBuf + mDeserBufPos), receivedData, paSize);
usedBuffer = mDeserBuf;
- mDeserBufPos = mDeserBufPos + pa_unSize;
+ mDeserBufPos = mDeserBufPos + paSize;
usedBufferSize = mDeserBufPos;
}
int nBuf;
@@ -186,9 +188,9 @@
usedBufferSize -= nBuf;
usedBuffer += nBuf;
-
- // required if e.g. the first element is an bool and the second element is "fragmented" - otherwise the resize in the buffer will not be resized
- recvData += nBuf;
+
+ // required if e.g. the first element is an bool and the second element is "fragmented" - otherwise the resize in the buffer will not be resized
+ receivedData += nBuf;
if(mDOPos >= unNumRD){
mDOPos = 0;
@@ -359,21 +361,21 @@
if(nRetVal <= pa_nStreamSize){
const TForteByte* acDataPtr = pa_roDataPoint.getConstDataPtr();
- #ifdef FORTE_LITTLE_ENDIAN
- #if defined(__ARMEL__) && ! defined(__VFP_FP__) // Little endian ARM with old mixed endian FPA float ABI needs to swap
+#ifdef FORTE_LITTLE_ENDIAN
+# if defined(__ARMEL__) && ! defined(__VFP_FP__) // Little endian ARM with old mixed endian FPA float ABI needs to swap
if(CIEC_ANY::e_LREAL == pa_roDataPoint.getDataTypeID()) {
TForteUInt32 anSwapped[2];
anSwapped[0] = reinterpret_cast<const TForteUInt32 *>(acDataPtr)[1];
anSwapped[1] = reinterpret_cast<const TForteUInt32 *>(acDataPtr)[0];
acDataPtr = reinterpret_cast<const TForteByte*>(&anSwapped[0]);
}
- #endif
+# endif //defined(__ARMEL__) && ! defined(__VFP_FP__)
for(int i = 0; i < nRetVal; i++){
pa_pcBytes[(nRetVal - 1) - i] = acDataPtr[i];
}
- #endif
+#endif //FORTE_LITTLE_ENDIAN
- #ifdef FORTE_BIG_ENDIAN
+#ifdef FORTE_BIG_ENDIAN
if(CIEC_ANY::e_REAL != pa_roDataPoint.getDataTypeID()){
for (int i = 0; i < nRetVal; i++){
pa_pcBytes[(nRetVal - 1) - i] = acDataPtr[(sizeof(CIEC_ANY::TLargestUIntValueType) - 1)-i];
@@ -384,7 +386,7 @@
pa_pcBytes[(nRetVal - 1) - i] = acDataPtr[(sizeof(TForteFloat) - 1) - i];
}
}
- #endif
+#endif //FORTE_BIG_ENDIAN
}
else{
nRetVal = -1;
@@ -427,13 +429,13 @@
int CFBDKASN1ComLayer::serializeValueWString(TForteByte* pa_pcBytes, int pa_nStreamSize, const CIEC_WSTRING & pa_roWString){
int nRetVal = -1;
- if (pa_nStreamSize < 2)
+ if (pa_nStreamSize < 2) {
return -1;
-
+ }
nRetVal = pa_roWString.toUTF16(pa_pcBytes + 2, pa_nStreamSize - 2);
- if (nRetVal < 0 || nRetVal > 131070)
+ if (nRetVal < 0 || nRetVal > 131070) {
return -1;
-
+ }
pa_pcBytes[0] = (TForteByte) ((nRetVal >> 9) & 0x00FF);
pa_pcBytes[1] = (TForteByte) ((nRetVal >> 1) & 0x00FF);
nRetVal += 2;
@@ -552,15 +554,12 @@
int CFBDKASN1ComLayer::deserializeDataPoint(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_ANY &pa_roCIECData){
int nRetVal = -1;
- if(0 < pa_nStreamSize){
- if(e_APPLICATION == (pa_pcBytes[0] & e_APPLICATION)){
- if(deserializeTag(*pa_pcBytes, pa_roCIECData)){
- nRetVal = deserializeValue(pa_pcBytes + 1, pa_nStreamSize - 1, pa_roCIECData) + 1;
- }
- else{
- DEVLOG_ERROR("Datatype error\n");
- nRetVal = -2;
- }
+ if(0 < pa_nStreamSize && e_APPLICATION == (pa_pcBytes[0] & e_APPLICATION)) {
+ if(deserializeTag(*pa_pcBytes, pa_roCIECData)) {
+ nRetVal = deserializeValue(pa_pcBytes + 1, pa_nStreamSize - 1, pa_roCIECData) + 1;
+ } else {
+ DEVLOG_ERROR("Datatype error\n");
+ nRetVal = -2;
}
}
return nRetVal;
@@ -649,26 +648,24 @@
*((CIEC_ANY::TLargestUIntValueType *) acDataPtr) = 0;
//we only need to check for SINT, INT, and DINT as LINT will fill all bytes
- if(pa_roIECData.getDataTypeID() <= CIEC_ANY::e_DINT){
- if(pa_pcBytes[0] & 0x80){
- //we received a negative number set all bits to true
- *((CIEC_ANY::TLargestIntValueType *) acDataPtr) = -1;
- }
+ if(pa_roIECData.getDataTypeID() <= CIEC_ANY::e_DINT && (pa_pcBytes[0] & 0x80)) {
+ //we received a negative number set all bits to true
+ *((CIEC_ANY::TLargestIntValueType *) acDataPtr) = -1;
}
- #ifdef FORTE_LITTLE_ENDIAN
+#ifdef FORTE_LITTLE_ENDIAN
for(int i = 0; i < nValueSize; i++){
acDataPtr[i] = pa_pcBytes[(nValueSize - 1) - i];
}
- #if defined(__ARMEL__) && ! defined(__VFP_FP__) // Little endian ARM with old mixed endian FPA float ABI needs to swap
+# if defined(__ARMEL__) && ! defined(__VFP_FP__) // Little endian ARM with old mixed endian FPA float ABI needs to swap
if(CIEC_ANY::e_LREAL == pa_roIECData.getDataTypeID()) {
TForteUInt32 nTmp = reinterpret_cast<const TForteUInt32 *>(acDataPtr)[1];
((TForteUInt32 *) acDataPtr)[1] = reinterpret_cast<const TForteUInt32 *>(acDataPtr)[0];
reinterpret_cast<TForteUInt32 *>(acDataPtr)[0] = nTmp;
}
- #endif
- #endif
- #ifdef FORTE_BIG_ENDIAN
+# endif //defined(__ARMEL__) && ! defined(__VFP_FP__)
+#endif //FORTE_LITTLE_ENDIAN
+#ifdef FORTE_BIG_ENDIAN
if(CIEC_ANY:: e_REAL != pa_roIECData.getDataTypeID()){
for (unsigned int i=0; i < nValueSize;i++){
acDataPtr[(sizeof(CIEC_ANY::TLargestUIntValueType) - 1) - i] = pa_pcBytes[(nValueSize - 1) - i];
@@ -679,7 +676,7 @@
acDataPtr[(sizeof(TForteFloat) - 1) - i] = pa_pcBytes[(nValueSize - 1) - i];
}
}
- #endif
+#endif //FORTE_BIG_ENDIAN
nRetVal = nValueSize;
}
return nRetVal;
@@ -700,9 +697,8 @@
int nRetVal = -1;
if(pa_nStreamSize >= 2){
TForteUInt16 unStringSize = static_cast<TForteUInt16>(((static_cast<TForteUInt16>(pa_pcBytes[0]) << 8) & 0xFF00) + (static_cast<TForteUInt16>(pa_pcBytes[1]) & 0x00FF));
- if(pa_nStreamSize >= (unStringSize * 2 + 2)){
- if (pa_roIECData.fromUTF16(pa_pcBytes + 2, unStringSize*2))
- nRetVal = unStringSize * 2 + 2;
+ if(pa_nStreamSize >= (unStringSize * 2 + 2) && pa_roIECData.fromUTF16(pa_pcBytes + 2, unStringSize*2)) {
+ nRetVal = unStringSize * 2 + 2;
}
}
return nRetVal;
@@ -714,7 +710,6 @@
if(pa_nStreamSize >= 2){
TForteUInt16 unStringSize = static_cast<TForteUInt16>(((((TForteUInt16) pa_pcBytes[0]) << 8) & 0xFF00) + ((TForteUInt16) pa_pcBytes[1] & 0x00FF));
if(pa_nStreamSize >= (unStringSize + 2)){
-// DEVLOG_INFO("reserve %i - pa_pcBytes[0]: 0x%x pa_pcBytes[1]: 0x%x \n", unStringSize, pa_pcBytes[0], pa_pcBytes[1]);
pa_roIECData.assign((const char*)&(pa_pcBytes[2]), unStringSize);
nRetVal = 2 + unStringSize;
}
@@ -763,14 +758,16 @@
nValueLen = deserializeValue(pa_pcBytes, pa_nStreamSize, *pa_roArray[i]);
}
else{
- if (poBufVal == 0)
+ if(poBufVal == 0) {
poBufVal = pa_roArray[0]->clone(0);
+ }
nValueLen = deserializeValue(pa_pcBytes, pa_nStreamSize, *poBufVal);
}
//size of the elements is given by the array datatype
if(nValueLen <= 0) {
- if (poBufVal != 0)
+ if(poBufVal != 0) {
delete poBufVal;
+ }
return nValueLen;
}
pa_nStreamSize -= nValueLen;
@@ -853,9 +850,9 @@
#ifdef FORTE_SUPPORT_ARRAYS
case CIEC_ANY::e_ARRAY:
unRetVal += 3;
- if (((CIEC_ARRAY&)pa_roCIECData).getElementDataTypeID() == CIEC_ANY::e_BOOL)
+ if(((CIEC_ARRAY&) pa_roCIECData).getElementDataTypeID() == CIEC_ANY::e_BOOL) {
unRetVal += ((CIEC_ARRAY&)pa_roCIECData).size();
- else {
+ } else {
for(TForteUInt16 j = 0; j < ((CIEC_ARRAY&)pa_roCIECData).size(); ++j){
unRetVal += getRequiredSerializationSize(*(((CIEC_ARRAY&)pa_roCIECData)[j]));
}
diff --git a/src/core/cominfra/fbdkasn1layer.h b/src/core/cominfra/fbdkasn1layer.h
index 69f4f0d..38514ec 100644
--- a/src/core/cominfra/fbdkasn1layer.h
+++ b/src/core/cominfra/fbdkasn1layer.h
@@ -1,17 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2010-2013 fortiss, TU Wien ACIN and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure, bug fixes
- * Michael Hofmann - option for custom datatypes send by fbdkasn1layer
- * Monika Wenger - rename datatype files to forte_datatype
- * Ingo Hegny - serialize/deserialize for STRUCT, changed datatype for IP-communication
- * Stanislav Meduna - make serializeNull and isNull public
- *******************************************************************************/
+ * Copyright (c) 2010-2013 fortiss, TU Wien ACIN and others.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure, bug fixes
+ * Michael Hofmann - option for custom datatypes send by fbdkasn1layer
+ * Monika Wenger - rename datatype files to forte_datatype
+ * Ingo Hegny - serialize/deserialize for STRUCT, changed datatype for IP-communication
+ * Stanislav Meduna - make serializeNull and isNull public
+ *******************************************************************************/
#ifndef _FBDKASN1LAYER_H_
#define _FBDKASN1LAYER_H_
@@ -166,11 +168,11 @@
static int serializeValueString(TForteByte* pa_pcBytes, int pa_nStreamSize, const CIEC_STRING & pa_roString);
#ifdef FORTE_USE_WSTRING_DATATYPE
static int serializeValueWString(TForteByte* pa_pcBytes, int pa_nStreamSize, const CIEC_WSTRING & pa_roWString);
-#endif
+#endif //FORTE_USE_WSTRING_DATATYPE
static int serializeValueStruct(TForteByte* pa_pcBytes, int pa_nStreamSize, const CIEC_STRUCT & pa_roWString);
- #ifdef FORTE_SUPPORT_ARRAYS
+#ifdef FORTE_SUPPORT_ARRAYS
static int serializeArray(TForteByte* pa_pcBytes, int pa_nStreamSize, const CIEC_ARRAY &pa_roArray);
- #endif
+#endif //FORTE_SUPPORT_ARRAYS
/**@}*/
@@ -191,12 +193,12 @@
static int deserializeValueTime(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_TIME &pa_roIECData);
#ifdef FORTE_USE_WSTRING_DATATYPE
static int deserializeValueWString(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_WSTRING &pa_roIECData);
-#endif
+#endif //FORTE_USE_WSTRING_DATATYPE
static int deserializeValueString(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_STRING &pa_roIECData);
#ifdef FORTE_SUPPORT_ARRAYS
static int deserializeArray(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_ARRAY &pa_roArray);
static int deserializeValueBoolArray(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_ARRAY &pa_roArray, TForteUInt16 pa_unDecodedArraySize);
-#endif
+#endif //FORTE_SUPPORT_ARRAYS
static int deserializeValueStruct(const TForteByte* pa_pcBytes, int pa_nStreamSize, CIEC_STRUCT &pa_roIECData);
/**@}*/
diff --git a/src/core/cominfra/ipcomlayer.cpp b/src/core/cominfra/ipcomlayer.cpp
index c025862..3ebabb0 100644
--- a/src/core/cominfra/ipcomlayer.cpp
+++ b/src/core/cominfra/ipcomlayer.cpp
@@ -1,17 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation, rework communication infrastructureand bug fixes
- * Ingo Hegny - changed datatype for IP-communication
- * Martin Melik-Merkumians - fix typo in forte::com_infra::EComConnectionState, serial communication support for WIN32
- * Michael Hofmann - fix for fragmented packets
- * Patrik Smejkal - rename interrupt in interruptCCommFB
- *******************************************************************************/
+ * Copyright (c) 2010-2014 fortiss, TU Wien ACIN and others.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation, rework communication infrastructure and bug fixes
+ * Ingo Hegny - changed datatype for IP-communication
+ * Martin Melik-Merkumians - fix typo in forte::com_infra::EComConnectionState, serial communication support for WIN32
+ * Michael Hofmann - fix for fragmented packets
+ * Patrik Smejkal - rename interrupt in interruptCCommFB
+ *******************************************************************************/
#include "ipcomlayer.h"
#include "../../arch/devlog.h"
#include "commfb.h"
@@ -91,6 +93,7 @@
//TODO move this to the processInterrupt()
mSocketID = CIPComSocketHandler::acceptTCPConnection(mListeningID);
if(CIPComSocketHandler::scmInvalidSocketDescriptor != mSocketID){
+ DEVLOG_INFO("Connection established by client\n");
getExtEvHandler<CIPComSocketHandler>().addComCallback(mSocketID, this);
m_eConnectionState = e_Connected;
}
diff --git a/src/core/cominfra/ipcomlayer.h b/src/core/cominfra/ipcomlayer.h
index 83ecc4c..135a29a 100644
--- a/src/core/cominfra/ipcomlayer.h
+++ b/src/core/cominfra/ipcomlayer.h
@@ -1,20 +1,23 @@
/*******************************************************************************
- * Copyright (c) 2010-2015 fortiss, TU Wien ACIN and Profactor GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation, rework communication infrastructure and bug fixes
- * Michael Hofmann - layer based communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010-2015 fortiss, TU Wien ACIN and Profactor GmbH.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation, rework communication infrastructure and bug fixes
+ * Michael Hofmann - layer based communication infrastructure
+ *******************************************************************************/
#ifndef IPCOMLAYER_H_
#define IPCOMLAYER_H_
+#include <sockhand.h>
#include <forte_config.h>
#include "comlayer.h"
-#include <sockhand.h>
+
namespace forte {
diff --git a/src/core/cominfra/localcomlayer.cpp b/src/core/cominfra/localcomlayer.cpp
index 6d4b418..74b7bf4 100644
--- a/src/core/cominfra/localcomlayer.cpp
+++ b/src/core/cominfra/localcomlayer.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011-2014 fortiss and TU Wien ACIN.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and bug fixes
- * Patrik Smejkal - rename interrupt in interruptCCommFB
- *******************************************************************************/
+ * Copyright (c) 2011-2014 fortiss and TU Wien ACIN.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and bug fixes
+ * Patrik Smejkal - rename interrupt in interruptCCommFB
+ *******************************************************************************/
#include "localcomlayer.h"
#include "commfb.h"
#include "../resource.h"
@@ -93,9 +95,9 @@
}
/********************** CLocalCommGroupsManager *************************************/
-CLocalComLayer::SLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::registerPubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer){
+CLocalComLayer::CLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::registerPubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer){
CCriticalRegion criticalRegion(m_oSync);
- SLocalCommGroup *poGroup = findLocalCommGroup(pa_nID);
+ CLocalCommGroup *poGroup = findLocalCommGroup(pa_nID);
if(0 == poGroup){
poGroup = createLocalCommGroup(pa_nID);
}
@@ -104,7 +106,7 @@
return poGroup;
}
-void CLocalComLayer::CLocalCommGroupsManager::unregisterPubl(SLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer){
+void CLocalComLayer::CLocalCommGroupsManager::unregisterPubl(CLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer){
CCriticalRegion criticalRegion(m_oSync);
removeListEntry(pa_poGroup->m_lPublList, pa_poLayer);
@@ -114,9 +116,9 @@
}
-CLocalComLayer::SLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::registerSubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer){
+CLocalComLayer::CLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::registerSubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer){
CCriticalRegion criticalRegion(m_oSync);
- SLocalCommGroup *poGroup = findLocalCommGroup(pa_nID);
+ CLocalCommGroup *poGroup = findLocalCommGroup(pa_nID);
if(0 == poGroup){
poGroup = createLocalCommGroup(pa_nID);
}
@@ -125,7 +127,7 @@
return poGroup;
}
-void CLocalComLayer::CLocalCommGroupsManager::unregisterSubl(SLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer){
+void CLocalComLayer::CLocalCommGroupsManager::unregisterSubl(CLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer){
CCriticalRegion criticalRegion(m_oSync);
removeListEntry(pa_poGroup->m_lSublList, pa_poLayer);
@@ -134,11 +136,11 @@
}
}
-CLocalComLayer::SLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::findLocalCommGroup(CStringDictionary::TStringId pa_nID){
- SLocalCommGroup *poGroup = 0;
+CLocalComLayer::CLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::findLocalCommGroup(CStringDictionary::TStringId pa_nID){
+ CLocalCommGroup *poGroup = 0;
if(!m_lstLocalCommGroups.isEmpty()){
- CSinglyLinkedList<SLocalCommGroup>::Iterator it = m_lstLocalCommGroups.begin();
+ CSinglyLinkedList<CLocalCommGroup>::Iterator it = m_lstLocalCommGroups.begin();
while(it != m_lstLocalCommGroups.end()){
if((*it).m_nGroupName == pa_nID){
poGroup = &(*it);
@@ -151,9 +153,9 @@
return poGroup;
}
-CLocalComLayer::SLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::createLocalCommGroup(CStringDictionary::TStringId pa_nID){
- m_lstLocalCommGroups.pushFront(SLocalCommGroup(pa_nID));
- CSinglyLinkedList<SLocalCommGroup>::Iterator it = m_lstLocalCommGroups.begin();
+CLocalComLayer::CLocalCommGroup* CLocalComLayer::CLocalCommGroupsManager::createLocalCommGroup(CStringDictionary::TStringId pa_nID){
+ m_lstLocalCommGroups.pushFront(CLocalCommGroup(pa_nID));
+ CSinglyLinkedList<CLocalCommGroup>::Iterator it = m_lstLocalCommGroups.begin();
return &(*it);
}
@@ -176,9 +178,9 @@
}
}
-void CLocalComLayer::CLocalCommGroupsManager::removeCommGroup(SLocalCommGroup *pa_poGroup){
- CSinglyLinkedList<SLocalCommGroup>::Iterator itRunner = m_lstLocalCommGroups.begin();
- CSinglyLinkedList<SLocalCommGroup>::Iterator itRevNode = m_lstLocalCommGroups.end();
+void CLocalComLayer::CLocalCommGroupsManager::removeCommGroup(CLocalCommGroup *pa_poGroup){
+ CSinglyLinkedList<CLocalCommGroup>::Iterator itRunner = m_lstLocalCommGroups.begin();
+ CSinglyLinkedList<CLocalCommGroup>::Iterator itRevNode = m_lstLocalCommGroups.end();
while(itRunner != m_lstLocalCommGroups.end()){
if((*itRunner).m_nGroupName == pa_poGroup->m_nGroupName){
diff --git a/src/core/cominfra/localcomlayer.h b/src/core/cominfra/localcomlayer.h
index 53335e6..d1be687 100644
--- a/src/core/cominfra/localcomlayer.h
+++ b/src/core/cominfra/localcomlayer.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2011-2014 fortiss and TU Wien ACIN.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011-2014 fortiss and TU Wien ACIN.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef LOCALCOMLAYER_H_
#define LOCALCOMLAYER_H_
@@ -37,23 +39,22 @@
return e_ProcessDataOk;
}
- protected:
private:
virtual EComResponse openConnection(char *pa_acLayerParameter);
virtual void closeConnection();
void setRDs(CLocalComLayer *pa_poSublLayer, CIEC_ANY *pa_aSDs, unsigned int pa_unNumSDs);
- struct SLocalCommGroup{
-
- explicit SLocalCommGroup(CStringDictionary::TStringId pa_nGroupName) :
+ class CLocalCommGroup {
+ public:
+ explicit CLocalCommGroup(CStringDictionary::TStringId pa_nGroupName) :
m_nGroupName(pa_nGroupName), m_lPublList(), m_lSublList(){
}
- SLocalCommGroup(const SLocalCommGroup& pa_roLocalCommGroup) :
+ CLocalCommGroup(const CLocalCommGroup& pa_roLocalCommGroup) :
m_nGroupName(pa_roLocalCommGroup.m_nGroupName), m_lPublList(), m_lSublList(){
}
- ~SLocalCommGroup(){
+ ~CLocalCommGroup(){
}
CStringDictionary::TStringId m_nGroupName;
@@ -65,19 +66,18 @@
public:
- SLocalCommGroup* registerPubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer);
- void unregisterPubl(SLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer);
+ CLocalCommGroup* registerPubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer);
+ void unregisterPubl(CLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer);
- SLocalCommGroup* registerSubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer);
- void unregisterSubl(SLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer);
+ CLocalCommGroup* registerSubl(const CStringDictionary::TStringId pa_nID, CLocalComLayer *pa_poLayer);
+ void unregisterSubl(CLocalCommGroup *pa_poGroup, CLocalComLayer *pa_poLayer);
- protected:
private:
CLocalCommGroupsManager(){};
- SLocalCommGroup* findLocalCommGroup(CStringDictionary::TStringId pa_nID);
- SLocalCommGroup* createLocalCommGroup(CStringDictionary::TStringId pa_nID);
- void removeCommGroup(SLocalCommGroup *pa_poGroup);
+ CLocalCommGroup* findLocalCommGroup(CStringDictionary::TStringId pa_nID);
+ CLocalCommGroup* createLocalCommGroup(CStringDictionary::TStringId pa_nID);
+ void removeCommGroup(CLocalCommGroup *pa_poGroup);
static void removeListEntry(CSinglyLinkedList<CLocalComLayer*> &pa_rlstList, CLocalComLayer *pa_poLayer);
@@ -85,7 +85,7 @@
*/
CSyncObject m_oSync;
- CSinglyLinkedList<SLocalCommGroup> m_lstLocalCommGroups;
+ CSinglyLinkedList<CLocalCommGroup> m_lstLocalCommGroups;
friend class CLocalComLayer;
@@ -97,7 +97,7 @@
static CLocalCommGroupsManager sm_oLocalCommGroupsManager;
- SLocalCommGroup *m_poLocalCommGroup;
+ CLocalCommGroup *m_poLocalCommGroup;
};
}
diff --git a/src/core/cominfra/rawdatacomlayer.cpp b/src/core/cominfra/rawdatacomlayer.cpp
index aadf8af..1ab4707 100644
--- a/src/core/cominfra/rawdatacomlayer.cpp
+++ b/src/core/cominfra/rawdatacomlayer.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2013-2015 TU Wien ACIN and fortiss.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians, Monika Wenger
- * - initial implementation
- *******************************************************************************/
+ * Copyright (c) 2013-2015 TU Wien ACIN and fortiss.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians, Monika Wenger
+ * - initial implementation
+ *******************************************************************************/
#include "rawdatacomlayer.h"
#include <forte_any.h>
#include <forte_string.h>
diff --git a/src/core/cominfra/rawdatacomlayer.h b/src/core/cominfra/rawdatacomlayer.h
index e518579..014fc72 100644
--- a/src/core/cominfra/rawdatacomlayer.h
+++ b/src/core/cominfra/rawdatacomlayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013-2015 TU Wien ACIN and fortiss.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Monika Wenger
diff --git a/src/core/cominfra/serialcomlayerbase.h b/src/core/cominfra/serialcomlayerbase.h
index 6fea22a..870f387 100644
--- a/src/core/cominfra/serialcomlayerbase.h
+++ b/src/core/cominfra/serialcomlayerbase.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -65,6 +66,7 @@
e115200 = 115200,
e128000 = 128000,
e256000 = 256000,
+ e1000000 = 1000000,
};
enum EForteSerialByteSize{
@@ -100,11 +102,12 @@
char mTerminationSymbol[3]; //**< Space for CR, LF, or CR/LF + Terminating \0
forte::com_infra::EComResponse openConnection(char *paLayerParameter);
virtual forte::com_infra::EComResponse openSerialConnection(const SSerialParameters& paSerialParameters, TSerialHandle* paHandleResult) = 0;
- static const unsigned int mMaxRecvBuffer = 22;
+ static const unsigned int mMaxRecvBuffer = 1000;
forte::com_infra::EComResponse mInterruptResp;
char mRecvBuffer[mMaxRecvBuffer];
unsigned int mBufFillSize;
+ CSyncObject mRecvLock;
TSerialHandle mSerialHandle;
TSerialHandle getSerialHandler(){
diff --git a/src/core/cominfra/serialcomlayerbase.tpp b/src/core/cominfra/serialcomlayerbase.tpp
index e1c66d7..0af035b 100644
--- a/src/core/cominfra/serialcomlayerbase.tpp
+++ b/src/core/cominfra/serialcomlayerbase.tpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -11,6 +12,7 @@
#include "serialcomlayerbase.h"
#include "../utils/parameterParser.h"
+#include <criticalregion.h>
template <typename TThreadHandle, TThreadHandle nullHandle>
CSerialComLayerBase<TThreadHandle, nullHandle>::CSerialComLayerBase(forte::com_infra::CComLayer* paUpperLayer,
@@ -27,6 +29,7 @@
template <typename TThreadHandle, TThreadHandle nullHandle>
forte::com_infra::EComResponse CSerialComLayerBase<TThreadHandle, nullHandle>::processInterrupt(){
if(forte::com_infra::e_ProcessDataOk == mInterruptResp){
+ CCriticalRegion lock(mRecvLock);
switch (m_eConnectionState){
case forte::com_infra::e_Connected:
if(0 != m_poTopLayer){
@@ -47,7 +50,7 @@
template <typename TThreadHandle, TThreadHandle nullHandle>
forte::com_infra::EComResponse CSerialComLayerBase<TThreadHandle, nullHandle>::openConnection(char *paLayerParameter) {
//Create Serial Com Handle
- CParameterParser parser(paLayerParameter, mNoOfParameters);
+ CParameterParser parser(paLayerParameter, ',', mNoOfParameters);
if(mNoOfParameters != parser.parseParameters()){
return forte::com_infra::e_InitInvalidId;
}
@@ -79,6 +82,7 @@
case e115200: break;
case e128000: break;
case e256000: break;
+ case e1000000: break;
//all other numbers are invalid!
default: return forte::com_infra::e_InitInvalidId; break;
}
@@ -136,5 +140,9 @@
return forte::com_infra::e_InitInvalidId;
}
- return openSerialConnection(parsedParameters, &mSerialHandle);
+ forte::com_infra::EComResponse resp = openSerialConnection(parsedParameters, &mSerialHandle);
+ if(forte::com_infra::e_InitOk == resp){
+ m_eConnectionState = forte::com_infra::e_Connected;
+ }
+ return resp;
}
diff --git a/src/core/conn.cpp b/src/core/conn.cpp
index c164ca1..1d03b8d 100644
--- a/src/core/conn.cpp
+++ b/src/core/conn.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Ingo Hegny,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Ingo Hegny,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <string.h>
#include "conn.h"
@@ -16,7 +18,7 @@
mSourceId(paSrcFB, paSrcPortId){
}
-EMGMResponse CConnection::addDestination(const SConnectionPoint &paDestPoint){
+EMGMResponse CConnection::addDestination(const CConnectionPoint &paDestPoint){
EMGMResponse retval = e_INVALID_STATE;
if(!dstExists(paDestPoint)){ // check if there is up to now no such fan out with this destination
@@ -26,8 +28,7 @@
return retval;
}
-#ifndef FORTE_CLASS_0
-EMGMResponse CConnection::removeDestination(const SConnectionPoint &paDestPoint){
+EMGMResponse CConnection::removeDestination(const CConnectionPoint &paDestPoint){
EMGMResponse retval = e_INVALID_STATE;
TDestinationIdList::Iterator itRunner = mDestinationIds.begin();
@@ -50,14 +51,13 @@
return retval;
}
-#endif
void CConnection::setSource(CFunctionBlock *paSrcFB, TPortId paSrcPortId){
mSourceId.mFB = paSrcFB;
mSourceId.mPortId = paSrcPortId;
}
-bool CConnection::dstExists(const SConnectionPoint &paDestPoint){
+bool CConnection::dstExists(const CConnectionPoint &paDestPoint){
bool bRetVal = false;
for(TDestinationIdList::Iterator it = mDestinationIds.begin();
it != mDestinationIds.end(); ++it){
diff --git a/src/core/conn.h b/src/core/conn.h
index 38863d0..2024178 100644
--- a/src/core/conn.h
+++ b/src/core/conn.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
- * Michael Hofmann
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
+ * Michael Hofmann
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _CONN_H_
#define _CONN_H_
@@ -17,21 +19,22 @@
#include "mgmcmd.h"
#include "stringdict.h"
-//forward declaration of a few classes to reduce includefile dependencies
+//forward declaration of a few classes to reduce include file dependencies
class CFunctionBlock;
-struct SConnectionPoint{
+class CConnectionPoint {
+ public:
CFunctionBlock *mFB;
TPortId mPortId;
- SConnectionPoint(CFunctionBlock *paFB, TPortId paPortId) :
+ CConnectionPoint(CFunctionBlock *paFB, TPortId paPortId) :
mFB(paFB), mPortId(paPortId){
}
- SConnectionPoint():mFB(0), mPortId(0) {
+ CConnectionPoint():mFB(0), mPortId(0) {
}
- bool operator==(const SConnectionPoint & paRight) const{
+ bool operator==(const CConnectionPoint & paRight) const{
return ((mFB == paRight.mFB) && (mPortId == paRight.mPortId));
}
};
@@ -70,7 +73,6 @@
virtual EMGMResponse connectToCFBInterface(CFunctionBlock *paDstFB,
CStringDictionary::TStringId paDstPortNameId) = 0;
-#ifndef FORTE_CLASS_0
/*! \brief Disconnects the connection.
*
* With this command the connection is removed and the FBs are set to appropriate states.
@@ -88,7 +90,6 @@
*/
virtual EMGMResponse disconnect(CFunctionBlock *paDstFB,
CStringDictionary::TStringId paDstPortNameId) = 0;
- #endif
/*! \brief Check if there are destinations added to this connection
*
@@ -104,30 +105,28 @@
/*! \brief Get the source string of the connection
*/
- const SConnectionPoint& getSourceId(void) const{
+ const CConnectionPoint& getSourceId(void) const{
return mSourceId;
}
/*! \brief Get list of destinations of the connection
*/
- const CSinglyLinkedList<SConnectionPoint>& getDestinationList(void) const {
+ const CSinglyLinkedList<CConnectionPoint>& getDestinationList(void) const {
return mDestinationIds;
}
protected:
- EMGMResponse addDestination(const SConnectionPoint &paDestPoint);
- #ifndef FORTE_CLASS_0
- EMGMResponse removeDestination(const SConnectionPoint &paDestPoint);
- #endif
+ EMGMResponse addDestination(const CConnectionPoint &paDestPoint);
+ EMGMResponse removeDestination(const CConnectionPoint &paDestPoint);
void setSource(CFunctionBlock *paSrcFB, TPortId paSrcPortId);
//!Non const version
- SConnectionPoint& getSourceId(void){
+ CConnectionPoint& getSourceId(void){
return mSourceId;
}
- typedef CSinglyLinkedList<SConnectionPoint> TDestinationIdList;
+ typedef CSinglyLinkedList<CConnectionPoint> TDestinationIdList;
/*!\brief a list of destinations the connection is connected to.
*
@@ -140,12 +139,12 @@
*
* The source is identified by a FB pointer and the port ID
*/
- SConnectionPoint mSourceId;
+ CConnectionPoint mSourceId;
private:
//! Check if there is already a connection within this connection with the same dst.
- bool dstExists(const SConnectionPoint &paDestPoint);
+ bool dstExists(const CConnectionPoint &paDestPoint);
};
#endif /*_CONN_H_*/
diff --git a/src/core/convert_functions.h b/src/core/convert_functions.h
deleted file mode 100644
index 7ca45a1..0000000
--- a/src/core/convert_functions.h
+++ /dev/null
@@ -1,1528 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
-* 2018 TU Vienna/ACIN
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
-* Matthias Plasch,
-* - initial implementation and rework communication infrastructure
-* Martin Melik-Merkumians - fixes DT_TO_TOD
-* Martin Melik-Merkumians - removes invalid casts, update implementation
-* to use new cast function
-*******************************************************************************/
-#ifndef CONVERT_FUNCTIONS_H_
-#define CONVERT_FUNCTIONS_H_
-
-#include "datatypes/forte_any.h"
-#include "datatypes/forte_bool.h"
-#include "datatypes/forte_byte.h"
-#include "datatypes/forte_dint.h"
-#include "datatypes/forte_dword.h"
-#include "datatypes/forte_int.h"
-#include "datatypes/forte_lint.h"
-#include "datatypes/forte_lreal.h"
-#include "datatypes/forte_lword.h"
-#include "datatypes/forte_real.h"
-#include "datatypes/forte_sint.h"
-#include "datatypes/forte_udint.h"
-#include "datatypes/forte_uint.h"
-#include "datatypes/forte_ulint.h"
-#include "datatypes/forte_usint.h"
-#include "datatypes/forte_word.h"
-#include "datatypes/forte_string.h"
-#include "datatypes/forte_wstring.h"
-#include "datatypes/forte_time.h"
-#include "datatypes/forte_time_of_day.h"
-#include "datatypes/forte_date_and_time.h"
-#include "datatypes/forte_date.h"
-#include "datatypes/forte_struct.h"
-#include "datatypes/forte_array.h"
-#include <math.h>
-
-//some compilers don't have this definition or is behind __STDC_CONSTANT_MACROS.
-//since this definition is only used here, we define it instead of enabling __STDC_CONSTANT_MACROS globally,
-//because it's not easy to detect which compilers will or not have this definition
-#ifndef UINT64_C
-# define UINT64_C(x) (x##ULL)
-#endif
-
-
-/*! \file
- * This file implements the type conversion functions as defined by IEC 61131-3 in subclause 2.5.1.5.1
- */
-
-inline void stringConverter(CIEC_ANY_STRING &paString, const CIEC_ANY &paVal){
- TForteUInt16 bufferSize = paVal.csmStringBufferSize[paVal.getDataTypeID()];
- paString.reserve(static_cast<TForteUInt16>(bufferSize));
- char *pacBuffer = paString.getValue();
- int nWrittenBytes = paVal.toString(pacBuffer, bufferSize);
- nWrittenBytes = nWrittenBytes > -1 ? nWrittenBytes : 0;
- paString.assign(pacBuffer, static_cast<TForteUInt16>(nWrittenBytes));
-}
-
-//********************************************************************************************
-// DT_TO_** functions
-//********************************************************************************************
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_DATE DT_TO_DATE(const CIEC_DATE_AND_TIME &paVal){
- TForteUInt64 nBuffer = paVal;
- time_t t = static_cast<time_t>(nBuffer / 1000);
- struct tm *ptm = forte_localtime(&t);
-
- if(0 == ptm){
- return CIEC_DATE(0);
- }
-
- ptm->tm_hour = 0;
- ptm->tm_min = 0;
- ptm->tm_sec = 0;
-
- t = forte_mktime(ptm);
- if((time_t) -1 == t){
- return CIEC_DATE(0);
- }
-
- return CIEC_DATE(t * 1000ULL);
-}
-
-inline const CIEC_DATE_AND_TIME DATE_TO_DT(const CIEC_DATE &paVal){
- return CIEC_DATE_AND_TIME((TForteUInt64) paVal);
-}
-
-inline const CIEC_TIME_OF_DAY DT_TO_TOD(const CIEC_DATE_AND_TIME &paVal){
- TForteUInt64 nBuffer = paVal;
- time_t t = static_cast<time_t>(nBuffer / 1000);
- struct tm *ptm = forte_localtime(&t);
-
- if(0 == ptm){
- return CIEC_TIME_OF_DAY(0);
- }
-
- return CIEC_TIME_OF_DAY(static_cast<TForteUInt64>((ptm->tm_hour * UINT64_C(3600) + ptm->tm_min * UINT64_C(60) + ptm->tm_sec) * UINT64_C(1000) + (nBuffer % UINT64_C(1000))));
-}
-#endif
-
-//********************************************************************************************
-// WSTRING_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_BOOL WSTRING_TO_BOOL(const CIEC_WSTRING &paVal){
- CIEC_BOOL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_BYTE WSTRING_TO_BYTE(const CIEC_WSTRING &paVal){
- CIEC_BYTE tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_DWORD WSTRING_TO_DWORD(const CIEC_WSTRING &paVal){
- CIEC_DWORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_WORD WSTRING_TO_WORD(const CIEC_WSTRING &paVal){
- CIEC_WORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_DINT WSTRING_TO_DINT(const CIEC_WSTRING &paVal){
- CIEC_DINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_INT WSTRING_TO_INT(const CIEC_WSTRING &paVal){
- CIEC_INT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_UINT WSTRING_TO_UINT(const CIEC_WSTRING &paVal){
- CIEC_UINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_UDINT WSTRING_TO_UDINT(const CIEC_WSTRING &paVal){
- CIEC_UDINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_USINT WSTRING_TO_USINT(const CIEC_WSTRING &paVal){
- CIEC_USINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_STRING WSTRING_TO_STRING(const CIEC_WSTRING &paVal){
- CIEC_STRING tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_TIME WSTRING_TO_TIME(const CIEC_WSTRING &paVal){
- CIEC_TIME tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_SINT WSTRING_TO_SINT(const CIEC_WSTRING &paVal){
- CIEC_SINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL WSTRING_TO_REAL(const CIEC_WSTRING &paVal){
- CIEC_REAL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL WSTRING_TO_LREAL(const CIEC_WSTRING &paVal){
- CIEC_LREAL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT WSTRING_TO_LINT(const CIEC_WSTRING &paVal){
- CIEC_LINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_LWORD WSTRING_TO_LWORD(const CIEC_WSTRING &paVal){
- CIEC_LWORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_ULINT WSTRING_TO_ULINT(const CIEC_WSTRING &paVal){
- CIEC_ULINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-#endif
-
-//********************************************************************************************
-// STRING_TO_* functions
-//********************************************************************************************
-inline const CIEC_INT STRING_TO_INT(const CIEC_STRING &paVal){
- CIEC_INT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_UINT STRING_TO_UINT(const CIEC_STRING &paVal){
- CIEC_UINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_USINT STRING_TO_USINT(const CIEC_STRING &paVal){
- CIEC_USINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_SINT STRING_TO_SINT(const CIEC_STRING &paVal){
- CIEC_SINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_DINT STRING_TO_DINT(const CIEC_STRING &paVal){
- CIEC_DINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_UDINT STRING_TO_UDINT(const CIEC_STRING &paVal){
- CIEC_UDINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_BOOL STRING_TO_BOOL(const CIEC_STRING &paVal){
- CIEC_BOOL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_BYTE STRING_TO_BYTE(const CIEC_STRING &paVal){
- CIEC_BYTE tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_WORD STRING_TO_WORD(const CIEC_STRING &paVal){
- CIEC_WORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_DWORD STRING_TO_DWORD(const CIEC_STRING &paVal){
- CIEC_DWORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_TIME STRING_TO_TIME(const CIEC_STRING &paVal){
- CIEC_TIME tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL STRING_TO_REAL(const CIEC_STRING &paVal){
- CIEC_REAL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL STRING_TO_LREAL(const CIEC_STRING &paVal){
- CIEC_LREAL tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT STRING_TO_ULINT(const CIEC_STRING &paVal){
- CIEC_ULINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_LINT STRING_TO_LINT(const CIEC_STRING &paVal){
- CIEC_LINT tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-
-inline const CIEC_LWORD STRING_TO_LWORD(const CIEC_STRING &paVal){
- CIEC_LWORD tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING STRING_TO_WSTRING(const CIEC_STRING &paVal){
- CIEC_WSTRING tempVal;
- const char *pacBuffer = paVal.getValue();
- tempVal.fromString(pacBuffer);
- return tempVal;
-}
-#endif
-
-//********************************************************************************************
-// LREAL_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_LREAL_DATATYPE
-
-inline const CIEC_LWORD LREAL_TO_LWORD(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL LREAL_TO_REAL(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_USINT LREAL_TO_USINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_UDINT LREAL_TO_UDINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT LREAL_TO_UINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_ULINT LREAL_TO_ULINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-
-inline const CIEC_LINT LREAL_TO_LINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-
-inline const CIEC_DINT LREAL_TO_DINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_SINT LREAL_TO_SINT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_INT LREAL_TO_INT(const CIEC_LREAL &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_STRING LREAL_TO_STRING(const CIEC_LREAL &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING LREAL_TO_WSTRING(const CIEC_LREAL &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-#endif
-
-//********************************************************************************************
-// REAL_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_REAL_DATATYPE
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT REAL_TO_LINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-
-inline const CIEC_ULINT REAL_TO_ULINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-
-inline const CIEC_LREAL REAL_TO_LREAL(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-inline const CIEC_DINT REAL_TO_DINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_SINT REAL_TO_SINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_INT REAL_TO_INT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_USINT REAL_TO_USINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_UINT REAL_TO_UINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_UDINT REAL_TO_UDINT(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_STRING REAL_TO_STRING(const CIEC_REAL &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING REAL_TO_WSTRING(const CIEC_REAL &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-inline const CIEC_DWORD REAL_TO_DWORD(const CIEC_REAL &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-#endif
-
-//********************************************************************************************
-// TIME_TO_* functions
-//********************************************************************************************
-inline const CIEC_STRING TIME_TO_STRING(const CIEC_TIME &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING TIME_TO_WSTRING(const CIEC_TIME &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// BOOL_TO_* functions
-//********************************************************************************************
-inline const CIEC_BYTE BOOL_TO_BYTE(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_DINT BOOL_TO_DINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_DWORD BOOL_TO_DWORD(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_INT BOOL_TO_INT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT BOOL_TO_LINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD BOOL_TO_LWORD(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-inline const CIEC_SINT BOOL_TO_SINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT BOOL_TO_UDINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT BOOL_TO_UINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT BOOL_TO_ULINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT BOOL_TO_USINT(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD BOOL_TO_WORD(const CIEC_BOOL &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING BOOL_TO_STRING(const CIEC_BOOL &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING BOOL_TO_WSTRING(const CIEC_BOOL &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// BYTE_TO_* functions
-//********************************************************************************************
-
-inline const CIEC_DINT BYTE_TO_DINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_DWORD BYTE_TO_DWORD(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_INT BYTE_TO_INT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT BYTE_TO_LINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD BYTE_TO_LWORD(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-inline const CIEC_SINT BYTE_TO_SINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT BYTE_TO_UDINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT BYTE_TO_UINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT BYTE_TO_ULINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT BYTE_TO_USINT(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD BYTE_TO_WORD(const CIEC_BYTE &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING BYTE_TO_STRING(const CIEC_BYTE &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING BYTE_TO_WSTRING(const CIEC_BYTE &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// DINT_TO_* functions
-//********************************************************************************************
-inline const CIEC_BYTE DINT_TO_BYTE(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_DWORD DINT_TO_DWORD(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_INT DINT_TO_INT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT DINT_TO_LINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL DINT_TO_LREAL(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD DINT_TO_LWORD(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL DINT_TO_REAL(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT DINT_TO_SINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT DINT_TO_UDINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT DINT_TO_UINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT DINT_TO_ULINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT DINT_TO_USINT(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD DINT_TO_WORD(const CIEC_DINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING DINT_TO_STRING(const CIEC_DINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING DINT_TO_WSTRING(const CIEC_DINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// DWORD_TO_* functions
-//********************************************************************************************
-inline const CIEC_DINT DWORD_TO_DINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE DWORD_TO_BYTE(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT DWORD_TO_INT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT DWORD_TO_LINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD DWORD_TO_LWORD(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL DWORD_TO_REAL(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT DWORD_TO_SINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT DWORD_TO_UDINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT DWORD_TO_UINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT DWORD_TO_ULINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT DWORD_TO_USINT(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD DWORD_TO_WORD(const CIEC_DWORD &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING DWORD_TO_STRING(const CIEC_DWORD &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING DWORD_TO_WSTRING(const CIEC_DWORD &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// LWORD_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_64BIT_DATATYPES
-
-inline const CIEC_DINT LWORD_TO_DINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE LWORD_TO_BYTE(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT LWORD_TO_INT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_LINT LWORD_TO_LINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL LWORD_TO_LREAL(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-inline const CIEC_DWORD LWORD_TO_DWORD(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_SINT LWORD_TO_SINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT LWORD_TO_UDINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT LWORD_TO_UINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_ULINT LWORD_TO_ULINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-
-inline const CIEC_USINT LWORD_TO_USINT(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD LWORD_TO_WORD(const CIEC_LWORD &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING LWORD_TO_STRING(const CIEC_LWORD &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING LWORD_TO_WSTRING(const CIEC_LWORD &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-#endif
-
-//********************************************************************************************
-// UDINT_TO_* functions
-//********************************************************************************************
-inline const CIEC_DINT UDINT_TO_DINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE UDINT_TO_BYTE(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT UDINT_TO_INT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT UDINT_TO_LINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL UDINT_TO_LREAL(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD UDINT_TO_LWORD(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL UDINT_TO_REAL(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT UDINT_TO_SINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_DWORD UDINT_TO_DWORD(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_UINT UDINT_TO_UINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT UDINT_TO_ULINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT UDINT_TO_USINT(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD UDINT_TO_WORD(const CIEC_UDINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING UDINT_TO_STRING(const CIEC_UDINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING UDINT_TO_WSTRING(const CIEC_UDINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// UINT_TO_* functions
-//********************************************************************************************
-inline const CIEC_DINT UINT_TO_DINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_INT UINT_TO_INT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_BYTE UINT_TO_BYTE(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT UINT_TO_LINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL UINT_TO_LREAL(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD UINT_TO_LWORD(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL UINT_TO_REAL(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT UINT_TO_SINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_DWORD UINT_TO_DWORD(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_UDINT UINT_TO_UDINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT UINT_TO_ULINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT UINT_TO_USINT(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD UINT_TO_WORD(const CIEC_UINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING UINT_TO_STRING(const CIEC_UINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING UINT_TO_WSTRING(const CIEC_UINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// ULINT_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_64BIT_DATATYPES
-
-inline const CIEC_DINT ULINT_TO_DINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE ULINT_TO_BYTE(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT ULINT_TO_INT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_LINT ULINT_TO_LINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL ULINT_TO_LREAL(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-inline const CIEC_DWORD ULINT_TO_DWORD(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL ULINT_TO_REAL(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT ULINT_TO_SINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT ULINT_TO_UDINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT ULINT_TO_UINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_LWORD ULINT_TO_LWORD(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-
-inline const CIEC_USINT ULINT_TO_USINT(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD ULINT_TO_WORD(const CIEC_ULINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING ULINT_TO_STRING(const CIEC_ULINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING ULINT_TO_WSTRING(const CIEC_ULINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-#endif
-
-//********************************************************************************************
-// USINT_TO_* functions
-//********************************************************************************************
-inline const CIEC_DINT USINT_TO_DINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE USINT_TO_BYTE(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT USINT_TO_INT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT USINT_TO_LINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL USINT_TO_LREAL(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD USINT_TO_LWORD(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL USINT_TO_REAL(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT USINT_TO_SINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_DWORD USINT_TO_DWORD(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_UDINT USINT_TO_UDINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT USINT_TO_ULINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_UINT USINT_TO_UINT(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_WORD USINT_TO_WORD(const CIEC_USINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING USINT_TO_STRING(const CIEC_USINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING USINT_TO_WSTRING(const CIEC_USINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// WORD_TO_* functions
-//********************************************************************************************
-inline const CIEC_DINT WORD_TO_DINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_BYTE WORD_TO_BYTE(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_INT WORD_TO_INT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT WORD_TO_LINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD WORD_TO_LWORD(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-inline const CIEC_SINT WORD_TO_SINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_DWORD WORD_TO_DWORD(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_UDINT WORD_TO_UDINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT WORD_TO_ULINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT WORD_TO_USINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_UINT WORD_TO_UINT(const CIEC_WORD &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_STRING WORD_TO_STRING(const CIEC_WORD &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING WORD_TO_WSTRING(const CIEC_WORD &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// INT_TO_* functions
-//********************************************************************************************
-inline const CIEC_BYTE INT_TO_BYTE(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_DWORD INT_TO_DWORD(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_DINT INT_TO_DINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT INT_TO_LINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL INT_TO_LREAL(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD INT_TO_LWORD(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL INT_TO_REAL(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT INT_TO_SINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT INT_TO_UDINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_INT INT_TO_UINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT INT_TO_ULINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT INT_TO_USINT(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD INT_TO_WORD(const CIEC_INT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING INT_TO_STRING(const CIEC_INT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING INT_TO_WSTRING(const CIEC_INT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// LINT_TO_* functions
-//********************************************************************************************
-#ifdef FORTE_USE_64BIT_DATATYPES
-
-inline const CIEC_BYTE LINT_TO_BYTE(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_DWORD LINT_TO_DWORD(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_DINT LINT_TO_DINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-inline const CIEC_INT LINT_TO_INT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL LINT_TO_LREAL(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-inline const CIEC_LWORD LINT_TO_LWORD(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL LINT_TO_REAL(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_SINT LINT_TO_SINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_SINT>(paVal);
-}
-
-inline const CIEC_UDINT LINT_TO_UDINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT LINT_TO_UINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-inline const CIEC_ULINT LINT_TO_ULINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-
-inline const CIEC_USINT LINT_TO_USINT(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD LINT_TO_WORD(const CIEC_LINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING LINT_TO_STRING(const CIEC_LINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING LINT_TO_WSTRING(const CIEC_LINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-#endif
-
-//********************************************************************************************
-// SINT_TO_* functions
-//********************************************************************************************
-inline const CIEC_BYTE SINT_TO_BYTE(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_BYTE>(paVal);
-}
-
-inline const CIEC_DWORD SINT_TO_DWORD(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_DWORD>(paVal);
-}
-
-inline const CIEC_DINT SINT_TO_DINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_DINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LINT SINT_TO_LINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_LINT>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_LREAL_DATATYPE
-inline const CIEC_LREAL SINT_TO_LREAL(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_LREAL>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD SINT_TO_LWORD(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_LWORD>(paVal);
-}
-#endif
-
-#ifdef FORTE_USE_REAL_DATATYPE
-inline const CIEC_REAL SINT_TO_REAL(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_REAL>(paVal);
-}
-#endif
-
-inline const CIEC_INT SINT_TO_INT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_INT>(paVal);
-}
-
-inline const CIEC_UDINT SINT_TO_UDINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_UDINT>(paVal);
-}
-
-inline const CIEC_UINT SINT_TO_UINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_UINT>(paVal);
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT SINT_TO_ULINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_ULINT>(paVal);
-}
-#endif
-
-inline const CIEC_USINT SINT_TO_USINT(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_USINT>(paVal);
-}
-
-inline const CIEC_WORD SINT_TO_WORD(const CIEC_SINT &paVal){
- return CIEC_ANY::cast<CIEC_WORD>(paVal);
-}
-
-inline const CIEC_STRING SINT_TO_STRING(const CIEC_SINT &paVal){
- CIEC_STRING string;
- stringConverter(string, paVal);
- return string;
-}
-
-#ifdef FORTE_USE_WSTRING_DATATYPE
-inline const CIEC_WSTRING SINT_TO_WSTRING(const CIEC_SINT &paVal){
- CIEC_WSTRING string;
- stringConverter(string, paVal);
- return string;
-}
-#endif
-
-//********************************************************************************************
-// *_BCD_TO_** functions
-//********************************************************************************************
-inline const CIEC_USINT BYTE_BCD_TO_USINT(const CIEC_BYTE &paVal){
- return CIEC_USINT(static_cast<TForteUInt8>((paVal / 16 * 10) + (paVal % 16)));
-}
-
-inline const CIEC_UINT WORD_BCD_TO_UINT(const CIEC_WORD &paVal){
- return CIEC_UINT(static_cast<TForteUInt16>(BYTE_BCD_TO_USINT(CIEC_BYTE(static_cast<TForteByte>(paVal >> 8))) * 100 + BYTE_BCD_TO_USINT(CIEC_BYTE(static_cast<TForteByte>(paVal & 0xff)))));
-}
-
-inline const CIEC_UDINT DWORD_BCD_TO_UDINT(const CIEC_DWORD &paVal){
- return CIEC_UDINT(static_cast<TForteUInt32>(WORD_BCD_TO_UINT(CIEC_WORD(static_cast<TForteWord>(paVal >> 16))) * 10000 + WORD_BCD_TO_UINT(CIEC_WORD(static_cast<TForteWord>(paVal & 0xffff)))));
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_ULINT LWORD_BCD_TO_ULINT(const CIEC_LWORD &paVal){
- return CIEC_ULINT(static_cast<TForteUInt64>(DWORD_BCD_TO_UDINT(CIEC_DWORD(static_cast<TForteDWord>(paVal >> 32))) * 100000000 + DWORD_BCD_TO_UDINT(CIEC_DWORD(static_cast<TForteDWord>(paVal & 0xffffffff)))));
-}
-#endif
-
-//********************************************************************************************
-// **_TO_BCD_* functions
-//********************************************************************************************
-inline const CIEC_BYTE USINT_TO_BCD_BYTE(const CIEC_USINT &paVal){
- return CIEC_BYTE(static_cast<TForteByte>(paVal / 10 * 16 + paVal % 10));
-}
-
-inline const CIEC_WORD UINT_TO_BCD_WORD(const CIEC_UINT &paVal){
- return CIEC_WORD(static_cast<TForteWord>((static_cast<TForteWord>(USINT_TO_BCD_BYTE(static_cast<TForteUInt8>(paVal / 100))) << 8) + static_cast<TForteWord>(USINT_TO_BCD_BYTE(static_cast<TForteUInt8>(paVal % 100)))));
-}
-
-inline const CIEC_DWORD UDINT_TO_BCD_DWORD(const CIEC_UDINT &paVal){
- return CIEC_DWORD(static_cast<TForteDWord>((static_cast<TForteDWord>(UINT_TO_BCD_WORD(static_cast<TForteUInt16>(paVal / 10000))) << 16) + static_cast<TForteDWord>(UINT_TO_BCD_WORD(static_cast<TForteUInt16>(paVal % 10000)))));
-}
-
-#ifdef FORTE_USE_64BIT_DATATYPES
-inline const CIEC_LWORD ULINT_TO_BCD_LWORD(const CIEC_ULINT &paVal){
- return CIEC_LWORD(static_cast<TForteLWord>((static_cast<TForteLWord>(UDINT_TO_BCD_DWORD(static_cast<TForteUInt32>(paVal / 100000000))) << 32) + static_cast<TForteLWord>(UDINT_TO_BCD_DWORD(static_cast<TForteUInt32>(paVal % 100000000)))));
-}
-#endif
-#endif /* CONVERT_FUNCTIONS_H_ */
diff --git a/src/core/dataconn.cpp b/src/core/dataconn.cpp
index 22deff4..bdb2882 100644
--- a/src/core/dataconn.cpp
+++ b/src/core/dataconn.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Rene Smodic, Gunnar Grabmaier, Ingo Hegny,
- * Matthias Plasch
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Rene Smodic, Gunnar Grabmaier, Ingo Hegny,
+ * Matthias Plasch
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "dataconn.h"
#include "funcbloc.h"
@@ -27,7 +29,6 @@
CDataConnection::~CDataConnection(){
if(0 != m_poValue){
m_poValue->~CIEC_ANY();
- ;
}
}
@@ -71,14 +72,13 @@
}
}
-#ifndef FORTE_CLASS_0
EMGMResponse
CDataConnection::disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId){
EMGMResponse retval = e_NO_SUCH_OBJECT;
TPortId dstPortId = paDstFB->getDIID(paDstPortNameId);
if(cg_unInvalidPortId != dstPortId){
- retval = CConnection::removeDestination(SConnectionPoint(paDstFB, dstPortId));
+ retval = CConnection::removeDestination(CConnectionPoint(paDstFB, dstPortId));
if(e_RDY == retval){
// the CConnection class didn't respond an error
paDstFB->connectDI(dstPortId, 0);
@@ -86,7 +86,6 @@
}
return retval;
}
-#endif
void CDataConnection::readData(CIEC_ANY *pa_poValue) const{
if(m_poValue){
@@ -141,12 +140,10 @@
}
if(e_RDY == retVal){
- retVal = CConnection::addDestination(SConnectionPoint(paDstFB, paDstPortId));
- if(e_RDY == retVal){
- if(!paDstFB->connectDI(paDstPortId, this)){
- retVal = e_INVALID_STATE;
- mDestinationIds.popFront(); //empty the list so that the have created connection is not here anymore
- }
+ retVal = CConnection::addDestination(CConnectionPoint(paDstFB, paDstPortId));
+ if(e_RDY == retVal && !paDstFB->connectDI(paDstPortId, this)) {
+ retVal = e_INVALID_STATE;
+ mDestinationIds.popFront(); //empty the list so that the have created connection is not here anymore
}
}
return retVal;
diff --git a/src/core/dataconn.h b/src/core/dataconn.h
index 0b94a65..2fff062 100644
--- a/src/core/dataconn.h
+++ b/src/core/dataconn.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Rene Smodic, Gunnar Grabmaier, Ingo Hegny,
- * Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Rene Smodic, Gunnar Grabmaier, Ingo Hegny,
+ * Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _DATACONN_H_
#define _DATACONN_H_
@@ -29,9 +31,7 @@
virtual EMGMResponse connectToCFBInterface(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
- #ifndef FORTE_CLASS_0
- virtual EMGMResponse disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
- #endif
+ virtual EMGMResponse disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
/*! \brief Write connection data value.
*
diff --git a/src/core/datatypes/CMakeLists.txt b/src/core/datatypes/CMakeLists.txt
index 2b129b9..a28e6e0 100644
--- a/src/core/datatypes/CMakeLists.txt
+++ b/src/core/datatypes/CMakeLists.txt
@@ -1,14 +1,16 @@
-#*******************************************************************************
-# * Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Michael Hofmann, Alois Zoitl, Monika Wenger, Gerhard Ebenhofer
-# * - initial implementation and rework communication infrastructure
-# *******************************************************************************/
+################################################################################
+# Copyright (c) 2010 - 2014 Profactor GmbH, ACIN, fortiss GmbH
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Michael Hofmann, Alois Zoitl, Monika Wenger, Gerhard Ebenhofer
+# - initial implementation and rework communication infrastructure
+################################################################################
#############################################################################
@@ -16,6 +18,8 @@
#############################################################################
forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+forte_add_subdirectory(convert)
+
forte_add_sourcefile_hcpp(forte_any_elementary forte_int forte_sint)
forte_add_sourcefile_hcpp(forte_dint forte_udint forte_uint)
forte_add_sourcefile_hcpp(forte_usint forte_dword forte_word)
diff --git a/src/core/datatypes/convert/BcdConvertFunctions.h b/src/core/datatypes/convert/BcdConvertFunctions.h
new file mode 100644
index 0000000..413c8aa
--- /dev/null
+++ b/src/core/datatypes/convert/BcdConvertFunctions.h
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_BCDCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_BCDCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// *_BCD_TO_** functions
+//********************************************************************************************
+inline const CIEC_USINT BYTE_BCD_TO_USINT(const CIEC_BYTE &paVal) {
+ return CIEC_USINT(static_cast<TForteUInt8>((paVal / 16 * 10) + (paVal % 16)));
+}
+
+inline const CIEC_UINT WORD_BCD_TO_UINT(const CIEC_WORD &paVal) {
+ return CIEC_UINT(
+ static_cast<TForteUInt16>(BYTE_BCD_TO_USINT(CIEC_BYTE(static_cast<TForteByte>(paVal >> 8))) * 100
+ + BYTE_BCD_TO_USINT(CIEC_BYTE(static_cast<TForteByte>(paVal & 0xff)))));
+}
+
+inline const CIEC_UDINT DWORD_BCD_TO_UDINT(const CIEC_DWORD &paVal) {
+ return CIEC_UDINT(
+ static_cast<TForteUInt32>(WORD_BCD_TO_UINT(CIEC_WORD(static_cast<TForteWord>(paVal >> 16))) * 10000
+ + WORD_BCD_TO_UINT(CIEC_WORD(static_cast<TForteWord>(paVal & 0xffff)))));
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT LWORD_BCD_TO_ULINT(const CIEC_LWORD &paVal){
+ return CIEC_ULINT(static_cast<TForteUInt64>(DWORD_BCD_TO_UDINT(CIEC_DWORD(static_cast<TForteDWord>(paVal >> 32))) * 100000000 + DWORD_BCD_TO_UDINT(CIEC_DWORD(static_cast<TForteDWord>(paVal & 0xffffffff)))));
+}
+#endif
+
+//********************************************************************************************
+// **_TO_BCD_* functions
+//********************************************************************************************
+inline const CIEC_BYTE USINT_TO_BCD_BYTE(const CIEC_USINT &paVal) {
+ return CIEC_BYTE(static_cast<TForteByte>(paVal / 10 * 16 + paVal % 10));
+}
+
+inline const CIEC_WORD UINT_TO_BCD_WORD(const CIEC_UINT &paVal) {
+ return CIEC_WORD(
+ static_cast<TForteWord>((static_cast<TForteWord>(USINT_TO_BCD_BYTE(static_cast<TForteUInt8>(paVal / 100))) << 8)
+ + static_cast<TForteWord>(USINT_TO_BCD_BYTE(static_cast<TForteUInt8>(paVal % 100)))));
+}
+
+inline const CIEC_DWORD UDINT_TO_BCD_DWORD(const CIEC_UDINT &paVal) {
+ return CIEC_DWORD(
+ static_cast<TForteDWord>((static_cast<TForteDWord>(UINT_TO_BCD_WORD(static_cast<TForteUInt16>(paVal / 10000))) << 16)
+ + static_cast<TForteDWord>(UINT_TO_BCD_WORD(static_cast<TForteUInt16>(paVal % 10000)))));
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD ULINT_TO_BCD_LWORD(const CIEC_ULINT &paVal){
+ return CIEC_LWORD(static_cast<TForteLWord>((static_cast<TForteLWord>(UDINT_TO_BCD_DWORD(static_cast<TForteUInt32>(paVal / 100000000))) << 32) + static_cast<TForteLWord>(UDINT_TO_BCD_DWORD(static_cast<TForteUInt32>(paVal % 100000000)))));
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_BCDCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/BoolToConvertFunctions.h b/src/core/datatypes/convert/BoolToConvertFunctions.h
new file mode 100644
index 0000000..9003943
--- /dev/null
+++ b/src/core/datatypes/convert/BoolToConvertFunctions.h
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_BOOLTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_BOOLTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// BOOL_TO_* functions
+//********************************************************************************************
+inline const CIEC_BYTE BOOL_TO_BYTE(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_DINT BOOL_TO_DINT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_DWORD BOOL_TO_DWORD(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_INT BOOL_TO_INT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT BOOL_TO_LINT(const CIEC_BOOL &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD BOOL_TO_LWORD(const CIEC_BOOL &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+inline const CIEC_SINT BOOL_TO_SINT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT BOOL_TO_UDINT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT BOOL_TO_UINT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT BOOL_TO_ULINT(const CIEC_BOOL &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT BOOL_TO_USINT(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD BOOL_TO_WORD(const CIEC_BOOL &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING BOOL_TO_STRING(const CIEC_BOOL &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING BOOL_TO_WSTRING(const CIEC_BOOL &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_BOOLTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/ByteToConvertFunctions.h b/src/core/datatypes/convert/ByteToConvertFunctions.h
new file mode 100644
index 0000000..bac5980
--- /dev/null
+++ b/src/core/datatypes/convert/ByteToConvertFunctions.h
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_BYTETOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_BYTETOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// BYTE_TO_* functions
+//********************************************************************************************
+
+inline const CIEC_DINT BYTE_TO_DINT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_DWORD BYTE_TO_DWORD(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_INT BYTE_TO_INT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT BYTE_TO_LINT(const CIEC_BYTE &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD BYTE_TO_LWORD(const CIEC_BYTE &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+inline const CIEC_SINT BYTE_TO_SINT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT BYTE_TO_UDINT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT BYTE_TO_UINT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT BYTE_TO_ULINT(const CIEC_BYTE &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT BYTE_TO_USINT(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD BYTE_TO_WORD(const CIEC_BYTE &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING BYTE_TO_STRING(const CIEC_BYTE &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING BYTE_TO_WSTRING(const CIEC_BYTE &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_BYTETOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/CMakeLists.txt b/src/core/datatypes/convert/CMakeLists.txt
new file mode 100644
index 0000000..82e9c2e
--- /dev/null
+++ b/src/core/datatypes/convert/CMakeLists.txt
@@ -0,0 +1,18 @@
+#*******************************************************************************
+# Copyright (c) 2019 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - adds package convert in core/datatypes
+
+# *******************************************************************************/
+#############################################################################
+# Core/datatypes/convert
+#############################################################################
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_h(convert_functions.h)
\ No newline at end of file
diff --git a/src/core/datatypes/convert/DateAndTimeToConvertFunctions.h b/src/core/datatypes/convert/DateAndTimeToConvertFunctions.h
new file mode 100644
index 0000000..140ae3b
--- /dev/null
+++ b/src/core/datatypes/convert/DateAndTimeToConvertFunctions.h
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_DATEANDTIMETOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_DATEANDTIMETOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// DT_TO_** functions
+//********************************************************************************************
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_DATE DT_TO_DATE(const CIEC_DATE_AND_TIME &paVal){
+ TForteUInt64 nBuffer = paVal;
+ time_t t = static_cast<time_t>(nBuffer / 1000);
+ struct tm *ptm = forte_localtime(&t);
+
+ if(0 == ptm){
+ return CIEC_DATE(0);
+ }
+
+ ptm->tm_hour = 0;
+ ptm->tm_min = 0;
+ ptm->tm_sec = 0;
+
+ t = forte_mktime(ptm);
+ if((time_t) -1 == t){
+ return CIEC_DATE(0);
+ }
+
+ return CIEC_DATE(t * 1000ULL);
+}
+
+inline const CIEC_DATE_AND_TIME DATE_TO_DT(const CIEC_DATE &paVal){
+ return CIEC_DATE_AND_TIME((TForteUInt64) paVal);
+}
+
+inline const CIEC_TIME_OF_DAY DT_TO_TOD(const CIEC_DATE_AND_TIME &paVal){
+ TForteUInt64 nBuffer = paVal;
+ time_t t = static_cast<time_t>(nBuffer / 1000);
+ struct tm *ptm = forte_localtime(&t);
+
+ if(0 == ptm){
+ return CIEC_TIME_OF_DAY(0);
+ }
+
+ return CIEC_TIME_OF_DAY(static_cast<TForteUInt64>((ptm->tm_hour * UINT64_C(3600) + ptm->tm_min * UINT64_C(60) + ptm->tm_sec) * UINT64_C(1000) + (nBuffer % UINT64_C(1000))));
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_DATEANDTIMETOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/DintToConvertFunctions.h b/src/core/datatypes/convert/DintToConvertFunctions.h
new file mode 100644
index 0000000..6ce0d8d
--- /dev/null
+++ b/src/core/datatypes/convert/DintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_DINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_DINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// DINT_TO_* functions
+//********************************************************************************************
+inline const CIEC_BYTE DINT_TO_BYTE(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_DWORD DINT_TO_DWORD(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_INT DINT_TO_INT(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT DINT_TO_LINT(const CIEC_DINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL DINT_TO_LREAL(const CIEC_DINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD DINT_TO_LWORD(const CIEC_DINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL DINT_TO_REAL(const CIEC_DINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT DINT_TO_SINT(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT DINT_TO_UDINT(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT DINT_TO_UINT(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT DINT_TO_ULINT(const CIEC_DINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT DINT_TO_USINT(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD DINT_TO_WORD(const CIEC_DINT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING DINT_TO_STRING(const CIEC_DINT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING DINT_TO_WSTRING(const CIEC_DINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_DINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/DwordToConvertFunctions.h b/src/core/datatypes/convert/DwordToConvertFunctions.h
new file mode 100644
index 0000000..ed3ecc8
--- /dev/null
+++ b/src/core/datatypes/convert/DwordToConvertFunctions.h
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_DWORDTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_DWORDTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// DWORD_TO_* functions
+//********************************************************************************************
+inline const CIEC_DINT DWORD_TO_DINT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE DWORD_TO_BYTE(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT DWORD_TO_INT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT DWORD_TO_LINT(const CIEC_DWORD &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD DWORD_TO_LWORD(const CIEC_DWORD &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL DWORD_TO_REAL(const CIEC_DWORD &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT DWORD_TO_SINT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT DWORD_TO_UDINT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT DWORD_TO_UINT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT DWORD_TO_ULINT(const CIEC_DWORD &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT DWORD_TO_USINT(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD DWORD_TO_WORD(const CIEC_DWORD &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING DWORD_TO_STRING(const CIEC_DWORD &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING DWORD_TO_WSTRING(const CIEC_DWORD &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_DWORDTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/IntToConvertFunctions.h b/src/core/datatypes/convert/IntToConvertFunctions.h
new file mode 100644
index 0000000..cddc1af
--- /dev/null
+++ b/src/core/datatypes/convert/IntToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_INTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_INTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// INT_TO_* functions
+//********************************************************************************************
+inline const CIEC_BYTE INT_TO_BYTE(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_DWORD INT_TO_DWORD(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_DINT INT_TO_DINT(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT INT_TO_LINT(const CIEC_INT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL INT_TO_LREAL(const CIEC_INT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD INT_TO_LWORD(const CIEC_INT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL INT_TO_REAL(const CIEC_INT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT INT_TO_SINT(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT INT_TO_UDINT(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_INT INT_TO_UINT(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT INT_TO_ULINT(const CIEC_INT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT INT_TO_USINT(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD INT_TO_WORD(const CIEC_INT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING INT_TO_STRING(const CIEC_INT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING INT_TO_WSTRING(const CIEC_INT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_INTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/LintToConvertFunctions.h b/src/core/datatypes/convert/LintToConvertFunctions.h
new file mode 100644
index 0000000..a523672
--- /dev/null
+++ b/src/core/datatypes/convert/LintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_LINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_LINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// LINT_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_64BIT_DATATYPES
+
+inline const CIEC_BYTE LINT_TO_BYTE(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_DWORD LINT_TO_DWORD(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_DINT LINT_TO_DINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_INT LINT_TO_INT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL LINT_TO_LREAL(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+inline const CIEC_LWORD LINT_TO_LWORD(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL LINT_TO_REAL(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT LINT_TO_SINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT LINT_TO_UDINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT LINT_TO_UINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_ULINT LINT_TO_ULINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+
+inline const CIEC_USINT LINT_TO_USINT(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD LINT_TO_WORD(const CIEC_LINT &paVal){
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING LINT_TO_STRING(const CIEC_LINT &paVal){
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING LINT_TO_WSTRING(const CIEC_LINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_LINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/LrealToConvertFunctions.h b/src/core/datatypes/convert/LrealToConvertFunctions.h
new file mode 100644
index 0000000..aeeb567
--- /dev/null
+++ b/src/core/datatypes/convert/LrealToConvertFunctions.h
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_LREALTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_LREALTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// LREAL_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_LREAL_DATATYPE
+
+inline const CIEC_LWORD LREAL_TO_LWORD(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL LREAL_TO_REAL(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_USINT LREAL_TO_USINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_UDINT LREAL_TO_UDINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT LREAL_TO_UINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_ULINT LREAL_TO_ULINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+
+inline const CIEC_LINT LREAL_TO_LINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+
+inline const CIEC_DINT LREAL_TO_DINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_SINT LREAL_TO_SINT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_INT LREAL_TO_INT(const CIEC_LREAL &paVal){
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_STRING LREAL_TO_STRING(const CIEC_LREAL &paVal){
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING LREAL_TO_WSTRING(const CIEC_LREAL &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+#endif
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_LREALTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/LwordToConvertFunctions.h b/src/core/datatypes/convert/LwordToConvertFunctions.h
new file mode 100644
index 0000000..4e4b59e
--- /dev/null
+++ b/src/core/datatypes/convert/LwordToConvertFunctions.h
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_LWORDTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_LWORDTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// LWORD_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_64BIT_DATATYPES
+
+inline const CIEC_DINT LWORD_TO_DINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE LWORD_TO_BYTE(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT LWORD_TO_INT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_LINT LWORD_TO_LINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL LWORD_TO_LREAL(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+inline const CIEC_DWORD LWORD_TO_DWORD(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_SINT LWORD_TO_SINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT LWORD_TO_UDINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT LWORD_TO_UINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_ULINT LWORD_TO_ULINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+
+inline const CIEC_USINT LWORD_TO_USINT(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD LWORD_TO_WORD(const CIEC_LWORD &paVal){
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING LWORD_TO_STRING(const CIEC_LWORD &paVal){
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING LWORD_TO_WSTRING(const CIEC_LWORD &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_LWORDTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/RealToConvertFunctions.h b/src/core/datatypes/convert/RealToConvertFunctions.h
new file mode 100644
index 0000000..c5c1939
--- /dev/null
+++ b/src/core/datatypes/convert/RealToConvertFunctions.h
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_REALTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_REALTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// REAL_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_REAL_DATATYPE
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT REAL_TO_LINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+
+inline const CIEC_ULINT REAL_TO_ULINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+
+inline const CIEC_LREAL REAL_TO_LREAL(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+inline const CIEC_DINT REAL_TO_DINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_SINT REAL_TO_SINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_INT REAL_TO_INT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_USINT REAL_TO_USINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_UINT REAL_TO_UINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_UDINT REAL_TO_UDINT(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_STRING REAL_TO_STRING(const CIEC_REAL &paVal){
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING REAL_TO_WSTRING(const CIEC_REAL &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+inline const CIEC_DWORD REAL_TO_DWORD(const CIEC_REAL &paVal){
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_REALTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/SintToConvertFunctions.h b/src/core/datatypes/convert/SintToConvertFunctions.h
new file mode 100644
index 0000000..332c7f3
--- /dev/null
+++ b/src/core/datatypes/convert/SintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_SINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_SINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// SINT_TO_* functions
+//********************************************************************************************
+inline const CIEC_BYTE SINT_TO_BYTE(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_DWORD SINT_TO_DWORD(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_DINT SINT_TO_DINT(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT SINT_TO_LINT(const CIEC_SINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL SINT_TO_LREAL(const CIEC_SINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD SINT_TO_LWORD(const CIEC_SINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL SINT_TO_REAL(const CIEC_SINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_INT SINT_TO_INT(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_UDINT SINT_TO_UDINT(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT SINT_TO_UINT(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT SINT_TO_ULINT(const CIEC_SINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT SINT_TO_USINT(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD SINT_TO_WORD(const CIEC_SINT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING SINT_TO_STRING(const CIEC_SINT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING SINT_TO_WSTRING(const CIEC_SINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_SINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/StringToConvertFunctions.h b/src/core/datatypes/convert/StringToConvertFunctions.h
new file mode 100644
index 0000000..f8571f4
--- /dev/null
+++ b/src/core/datatypes/convert/StringToConvertFunctions.h
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_STRINGTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_STRINGTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// STRING_TO_* functions
+//********************************************************************************************
+inline const CIEC_INT STRING_TO_INT(const CIEC_STRING &paVal) {
+ CIEC_INT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_UINT STRING_TO_UINT(const CIEC_STRING &paVal) {
+ CIEC_UINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_USINT STRING_TO_USINT(const CIEC_STRING &paVal) {
+ CIEC_USINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_SINT STRING_TO_SINT(const CIEC_STRING &paVal) {
+ CIEC_SINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_DINT STRING_TO_DINT(const CIEC_STRING &paVal) {
+ CIEC_DINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_UDINT STRING_TO_UDINT(const CIEC_STRING &paVal) {
+ CIEC_UDINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_BOOL STRING_TO_BOOL(const CIEC_STRING &paVal) {
+ CIEC_BOOL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_BYTE STRING_TO_BYTE(const CIEC_STRING &paVal) {
+ CIEC_BYTE tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_WORD STRING_TO_WORD(const CIEC_STRING &paVal) {
+ CIEC_WORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_DWORD STRING_TO_DWORD(const CIEC_STRING &paVal) {
+ CIEC_DWORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_TIME STRING_TO_TIME(const CIEC_STRING &paVal) {
+ CIEC_TIME tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL STRING_TO_REAL(const CIEC_STRING &paVal){
+ CIEC_REAL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL STRING_TO_LREAL(const CIEC_STRING &paVal){
+ CIEC_LREAL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT STRING_TO_ULINT(const CIEC_STRING &paVal){
+ CIEC_ULINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_LINT STRING_TO_LINT(const CIEC_STRING &paVal){
+ CIEC_LINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_LWORD STRING_TO_LWORD(const CIEC_STRING &paVal){
+ CIEC_LWORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING STRING_TO_WSTRING(const CIEC_STRING &paVal){
+ CIEC_WSTRING tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_STRINGTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/TimeInResolutionConvertFunctions.h b/src/core/datatypes/convert/TimeInResolutionConvertFunctions.h
new file mode 100644
index 0000000..a961e9e
--- /dev/null
+++ b/src/core/datatypes/convert/TimeInResolutionConvertFunctions.h
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - adds non standard time to number conversions
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_TIMEINRESOLUTIONCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_TIMEINRESOLUTIONCONVERTFUNCTIONS_H_
+
+#include "iec61131_cast_helper.h"
+#include "forte_constants.h"
+
+/*********************************************************************************************
+ * TIME_IN_<RESOLUTION>_TO_* functions - custom non-standard functions
+ *********************************************************************************************/
+#ifdef FORTE_USE_64BIT_DATATYPES
+
+/**
+ * @brief template function for converting TIME in seconds to ANY_NUM type
+ *
+ * Template function for converting TIME values in seconds to a ANY_NUM type
+ * A static compile guard is checking if the goal type is a subclass of ANY_NUM
+ * to prevent invalid conversion
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in seconds
+ */
+template<typename T>
+inline const T TIME_IN_S_TO(const CIEC_TIME &paValue) {
+ FORTE_STATIC_ASSERT((forte::core::mpl::is_base_of<CIEC_ANY_NUM, T>::value), TNotOfAnyNum);
+ if(forte::core::mpl::is_base_of<CIEC_ANY_REAL, T>::value) {
+ return T(
+ static_cast<typename T::TValueType>(paValue.getInNanoSeconds()) / static_cast<typename T::TValueType>(forte::core::constants::cNanosecondsPerSecond));
+ } else {
+ return T(static_cast<typename T::TValueType>(paValue.getInSeconds()));
+ }
+}
+
+/**
+ * @brief template function for converting TIME in milliseconds to ANY_NUM type
+ *
+ * Template function for converting TIME values in milliseconds to a ANY_NUM type
+ * A static compile guard is checking if the goal type is a subclass of ANY_NUM
+ * to prevent invalid conversion
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in milliseconds
+ */
+template<typename T>
+inline const T TIME_IN_MS_TO(const CIEC_TIME &paValue) {
+ FORTE_STATIC_ASSERT((forte::core::mpl::is_base_of<CIEC_ANY_NUM, T>::value), TNotOfAnyNum);
+ if(forte::core::mpl::is_base_of<CIEC_ANY_REAL, T>::value) {
+ return T(
+ static_cast<typename T::TValueType>(paValue.getInNanoSeconds())
+ * (static_cast<typename T::TValueType>(forte::core::constants::cMillisecondsPerSecond)
+ / static_cast<typename T::TValueType>(forte::core::constants::cNanosecondsPerSecond)));
+ } else {
+ return T(static_cast<typename T::TValueType>(paValue.getInMilliSeconds()));
+ }
+}
+
+/**
+ * @brief template function for converting TIME in microseconds to ANY_NUM type
+ *
+ * Template function for converting TIME values in microseconds to a ANY_NUM type
+ * A static compile guard is checking if the goal type is a subclass of ANY_NUM
+ * to prevent invalid conversion
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in microseconds
+ */
+template<typename T>
+inline const T TIME_IN_US_TO(const CIEC_TIME &paValue) {
+ FORTE_STATIC_ASSERT((forte::core::mpl::is_base_of<CIEC_ANY_NUM, T>::value), TNotOfAnyNum);
+ if(forte::core::mpl::is_base_of<CIEC_ANY_REAL, T>::value) {
+ return T(
+ static_cast<typename T::TValueType>(paValue.getInNanoSeconds())
+ * (static_cast<typename T::TValueType>(forte::core::constants::cMicrosecondsPerSecond)
+ / static_cast<typename T::TValueType>(forte::core::constants::cNanosecondsPerSecond)));
+ } else {
+ return T(static_cast<typename T::TValueType>(paValue.getInMicroSeconds()));
+ }
+}
+
+/**
+ * @brief template function for converting TIME in nanoseconds to ANY_NUM type
+ *
+ * Template function for converting TIME values in nanoseconds to a ANY_NUM type
+ * A static compile guard is checking if the goal type is a subclass of ANY_NUM
+ * to prevent invalid conversion
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in nanoseconds
+ */
+template<typename T>
+inline const T TIME_IN_NS_TO(const CIEC_TIME &paValue) {
+ FORTE_STATIC_ASSERT((forte::core::mpl::is_base_of<CIEC_ANY_NUM, T>::value), TNotOfAnyNum);
+ return T(static_cast<typename T::TValueType>(paValue.getInNanoSeconds()));
+}
+
+/********************************************************************
+ * TO_LINT functions
+ ********************************************************************/
+/**
+ * @brief conversion function from TIME to LINT in seconds
+ *
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in seconds
+ */
+inline const CIEC_LINT TIME_IN_S_TO_LINT(const CIEC_TIME &paValue) {
+ return TIME_IN_S_TO<CIEC_LINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LINT in milliseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in milliseconds
+ */
+inline const CIEC_LINT TIME_IN_MS_TO_LINT(const CIEC_TIME &paValue) {
+ return TIME_IN_MS_TO<CIEC_LINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LINT in microseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in microseconds
+ */
+inline const CIEC_LINT TIME_IN_US_TO_LINT(const CIEC_TIME &paValue) {
+ return TIME_IN_US_TO<CIEC_LINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LINT in nanoseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in nanoseconds
+ */
+inline const CIEC_LINT TIME_IN_NS_TO_LINT(const CIEC_TIME &paValue) {
+ return TIME_IN_NS_TO<CIEC_LINT>(paValue);
+}
+
+/********************************************************************
+ * TO_ULINT functions
+ ********************************************************************/
+
+/**
+ * @brief conversion function from TIME to ULINT in seconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in seconds
+ */
+inline const CIEC_ULINT TIME_IN_S_TO_ULINT(const CIEC_TIME &paValue) {
+ return TIME_IN_S_TO<CIEC_ULINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to ULINT in milliseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in milliseconds
+ */
+inline const CIEC_ULINT TIME_IN_MS_TO_ULINT(const CIEC_TIME &paValue) {
+ return TIME_IN_MS_TO<CIEC_ULINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to ULINT in microseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in microseconds
+ */
+inline const CIEC_ULINT TIME_IN_US_TO_ULINT(const CIEC_TIME &paValue) {
+ return TIME_IN_US_TO<CIEC_ULINT>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to ULINT in nanoseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in nanoseconds
+ */
+inline const CIEC_ULINT TIME_IN_NS_TO_ULINT(const CIEC_TIME &paValue) {
+ return TIME_IN_NS_TO<CIEC_ULINT>(paValue);
+}
+
+/********************************************************************
+ * TO_LREAL functions
+ ********************************************************************/
+
+/**
+ * @brief conversion function from TIME to LREAL in seconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in seconds
+ */
+inline const CIEC_LREAL TIME_IN_S_TO_LREAL(const CIEC_TIME &paValue) {
+ return TIME_IN_S_TO<CIEC_LREAL>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LREAL in milliseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in milliseconds
+ */
+inline const CIEC_LREAL TIME_IN_MS_TO_LREAL(const CIEC_TIME &paValue) {
+ return TIME_IN_MS_TO<CIEC_LREAL>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LREAL in microseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in microseconds
+ */
+inline const CIEC_LREAL TIME_IN_US_TO_LREAL(const CIEC_TIME &paValue) {
+ return TIME_IN_US_TO<CIEC_LREAL>(paValue);
+}
+
+/**
+ * @brief conversion function from TIME to LREAL in nanoseconds
+ *
+ * @param paValue TIME value to convert
+ * @return TIME value in nanoseconds
+ */
+inline const CIEC_LREAL TIME_IN_NS_TO_LREAL(const CIEC_TIME &paValue) {
+ return TIME_IN_NS_TO<CIEC_LREAL>(paValue);
+}
+
+#endif /* FORTE_USE_64BIT_DATATYPES */
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_TIMEINRESOLUTIONCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/TimeToConvertFunctions.h b/src/core/datatypes/convert/TimeToConvertFunctions.h
new file mode 100644
index 0000000..97b2f9b
--- /dev/null
+++ b/src/core/datatypes/convert/TimeToConvertFunctions.h
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_TIMETOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_TIMETOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// TIME_TO_* functions
+//********************************************************************************************
+inline const CIEC_STRING TIME_TO_STRING(const CIEC_TIME &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING TIME_TO_WSTRING(const CIEC_TIME &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_TIMETOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/UdintToConvertFunctions.h b/src/core/datatypes/convert/UdintToConvertFunctions.h
new file mode 100644
index 0000000..6dd5d37
--- /dev/null
+++ b/src/core/datatypes/convert/UdintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_UDINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_UDINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// UDINT_TO_* functions
+//********************************************************************************************
+inline const CIEC_DINT UDINT_TO_DINT(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE UDINT_TO_BYTE(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT UDINT_TO_INT(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT UDINT_TO_LINT(const CIEC_UDINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL UDINT_TO_LREAL(const CIEC_UDINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD UDINT_TO_LWORD(const CIEC_UDINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL UDINT_TO_REAL(const CIEC_UDINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT UDINT_TO_SINT(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_DWORD UDINT_TO_DWORD(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_UINT UDINT_TO_UINT(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT UDINT_TO_ULINT(const CIEC_UDINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT UDINT_TO_USINT(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD UDINT_TO_WORD(const CIEC_UDINT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING UDINT_TO_STRING(const CIEC_UDINT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING UDINT_TO_WSTRING(const CIEC_UDINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_UDINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/UintToConvertFunctions.h b/src/core/datatypes/convert/UintToConvertFunctions.h
new file mode 100644
index 0000000..945585e
--- /dev/null
+++ b/src/core/datatypes/convert/UintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_UINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_UINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// UINT_TO_* functions
+//********************************************************************************************
+inline const CIEC_DINT UINT_TO_DINT(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_INT UINT_TO_INT(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_BYTE UINT_TO_BYTE(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT UINT_TO_LINT(const CIEC_UINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL UINT_TO_LREAL(const CIEC_UINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD UINT_TO_LWORD(const CIEC_UINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL UINT_TO_REAL(const CIEC_UINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT UINT_TO_SINT(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_DWORD UINT_TO_DWORD(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_UDINT UINT_TO_UDINT(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT UINT_TO_ULINT(const CIEC_UINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT UINT_TO_USINT(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD UINT_TO_WORD(const CIEC_UINT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING UINT_TO_STRING(const CIEC_UINT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING UINT_TO_WSTRING(const CIEC_UINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_UINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/UlintToConvertFunctions.h b/src/core/datatypes/convert/UlintToConvertFunctions.h
new file mode 100644
index 0000000..9740d4b
--- /dev/null
+++ b/src/core/datatypes/convert/UlintToConvertFunctions.h
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+#ifndef SRC_CORE_DATATYPES_CONVERT_ULINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_ULINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// ULINT_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_64BIT_DATATYPES
+
+inline const CIEC_DINT ULINT_TO_DINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE ULINT_TO_BYTE(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT ULINT_TO_INT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+inline const CIEC_LINT ULINT_TO_LINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL ULINT_TO_LREAL(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+inline const CIEC_DWORD ULINT_TO_DWORD(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL ULINT_TO_REAL(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT ULINT_TO_SINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_UDINT ULINT_TO_UDINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+inline const CIEC_UINT ULINT_TO_UINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_LWORD ULINT_TO_LWORD(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+
+inline const CIEC_USINT ULINT_TO_USINT(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_WORD ULINT_TO_WORD(const CIEC_ULINT &paVal){
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING ULINT_TO_STRING(const CIEC_ULINT &paVal){
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING ULINT_TO_WSTRING(const CIEC_ULINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_ULINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/UsintToConvertFunctions.h b/src/core/datatypes/convert/UsintToConvertFunctions.h
new file mode 100644
index 0000000..442b18c
--- /dev/null
+++ b/src/core/datatypes/convert/UsintToConvertFunctions.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_USINTTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_USINTTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// USINT_TO_* functions
+//********************************************************************************************
+inline const CIEC_DINT USINT_TO_DINT(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE USINT_TO_BYTE(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT USINT_TO_INT(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT USINT_TO_LINT(const CIEC_USINT &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL USINT_TO_LREAL(const CIEC_USINT &paVal){
+ return CIEC_ANY::cast<CIEC_LREAL>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD USINT_TO_LWORD(const CIEC_USINT &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL USINT_TO_REAL(const CIEC_USINT &paVal){
+ return CIEC_ANY::cast<CIEC_REAL>(paVal);
+}
+#endif
+
+inline const CIEC_SINT USINT_TO_SINT(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_DWORD USINT_TO_DWORD(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_UDINT USINT_TO_UDINT(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT USINT_TO_ULINT(const CIEC_USINT &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_UINT USINT_TO_UINT(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_WORD USINT_TO_WORD(const CIEC_USINT &paVal) {
+ return CIEC_ANY::cast<CIEC_WORD>(paVal);
+}
+
+inline const CIEC_STRING USINT_TO_STRING(const CIEC_USINT &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING USINT_TO_WSTRING(const CIEC_USINT &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_USINTTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/WordToConvertFunctions.h b/src/core/datatypes/convert/WordToConvertFunctions.h
new file mode 100644
index 0000000..201448d
--- /dev/null
+++ b/src/core/datatypes/convert/WordToConvertFunctions.h
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_WORDTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_WORDTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// WORD_TO_* functions
+//********************************************************************************************
+inline const CIEC_DINT WORD_TO_DINT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_DINT>(paVal);
+}
+
+inline const CIEC_BYTE WORD_TO_BYTE(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_BYTE>(paVal);
+}
+
+inline const CIEC_INT WORD_TO_INT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_INT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT WORD_TO_LINT(const CIEC_WORD &paVal){
+ return CIEC_ANY::cast<CIEC_LINT>(paVal);
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LWORD WORD_TO_LWORD(const CIEC_WORD &paVal){
+ return CIEC_ANY::cast<CIEC_LWORD>(paVal);
+}
+#endif
+
+inline const CIEC_SINT WORD_TO_SINT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_SINT>(paVal);
+}
+
+inline const CIEC_DWORD WORD_TO_DWORD(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_DWORD>(paVal);
+}
+
+inline const CIEC_UDINT WORD_TO_UDINT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_UDINT>(paVal);
+}
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_ULINT WORD_TO_ULINT(const CIEC_WORD &paVal){
+ return CIEC_ANY::cast<CIEC_ULINT>(paVal);
+}
+#endif
+
+inline const CIEC_USINT WORD_TO_USINT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_USINT>(paVal);
+}
+
+inline const CIEC_UINT WORD_TO_UINT(const CIEC_WORD &paVal) {
+ return CIEC_ANY::cast<CIEC_UINT>(paVal);
+}
+
+inline const CIEC_STRING WORD_TO_STRING(const CIEC_WORD &paVal) {
+ CIEC_STRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_WSTRING WORD_TO_WSTRING(const CIEC_WORD &paVal){
+ CIEC_WSTRING string;
+ stringConverter(string, paVal);
+ return string;
+}
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_WORDTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/WstringToConvertFunctions.h b/src/core/datatypes/convert/WstringToConvertFunctions.h
new file mode 100644
index 0000000..6b8ec64
--- /dev/null
+++ b/src/core/datatypes/convert/WstringToConvertFunctions.h
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+
+#ifndef SRC_CORE_DATATYPES_CONVERT_WSTRINGTOCONVERTFUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_WSTRINGTOCONVERTFUNCTIONS_H_
+
+//********************************************************************************************
+// WSTRING_TO_* functions
+//********************************************************************************************
+#ifdef FORTE_USE_WSTRING_DATATYPE
+inline const CIEC_BOOL WSTRING_TO_BOOL(const CIEC_WSTRING &paVal){
+ CIEC_BOOL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_BYTE WSTRING_TO_BYTE(const CIEC_WSTRING &paVal){
+ CIEC_BYTE tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_DWORD WSTRING_TO_DWORD(const CIEC_WSTRING &paVal){
+ CIEC_DWORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_WORD WSTRING_TO_WORD(const CIEC_WSTRING &paVal){
+ CIEC_WORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_DINT WSTRING_TO_DINT(const CIEC_WSTRING &paVal){
+ CIEC_DINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_INT WSTRING_TO_INT(const CIEC_WSTRING &paVal){
+ CIEC_INT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_UINT WSTRING_TO_UINT(const CIEC_WSTRING &paVal){
+ CIEC_UINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_UDINT WSTRING_TO_UDINT(const CIEC_WSTRING &paVal){
+ CIEC_UDINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_USINT WSTRING_TO_USINT(const CIEC_WSTRING &paVal){
+ CIEC_USINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_STRING WSTRING_TO_STRING(const CIEC_WSTRING &paVal){
+ CIEC_STRING tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_TIME WSTRING_TO_TIME(const CIEC_WSTRING &paVal){
+ CIEC_TIME tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_SINT WSTRING_TO_SINT(const CIEC_WSTRING &paVal){
+ CIEC_SINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+#ifdef FORTE_USE_REAL_DATATYPE
+inline const CIEC_REAL WSTRING_TO_REAL(const CIEC_WSTRING &paVal){
+ CIEC_REAL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#ifdef FORTE_USE_LREAL_DATATYPE
+inline const CIEC_LREAL WSTRING_TO_LREAL(const CIEC_WSTRING &paVal){
+ CIEC_LREAL tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+
+#ifdef FORTE_USE_64BIT_DATATYPES
+inline const CIEC_LINT WSTRING_TO_LINT(const CIEC_WSTRING &paVal){
+ CIEC_LINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_LWORD WSTRING_TO_LWORD(const CIEC_WSTRING &paVal){
+ CIEC_LWORD tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+
+inline const CIEC_ULINT WSTRING_TO_ULINT(const CIEC_WSTRING &paVal){
+ CIEC_ULINT tempVal;
+ const char *pacBuffer = paVal.getValue();
+ tempVal.fromString(pacBuffer);
+ return tempVal;
+}
+#endif
+#endif
+
+
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_WSTRINGTOCONVERTFUNCTIONS_H_ */
diff --git a/src/core/datatypes/convert/convert_functions.h b/src/core/datatypes/convert/convert_functions.h
new file mode 100644
index 0000000..fecc4d4
--- /dev/null
+++ b/src/core/datatypes/convert/convert_functions.h
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2010 - 2015 TU Vienna/ACIN, Profactor GmbH, fortiss GmbH,
+ * 2018-2019 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Monika Wenger, Carolyn Oates, Patrick Smejkal,
+ * Matthias Plasch,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - fixes DT_TO_TOD
+ * Martin Melik-Merkumians - removes invalid casts, update implementation
+ * to use new cast function
+ *******************************************************************************/
+#ifndef SRC_CORE_DATATYPES_CONVERT_CONVERT_FUNCTIONS_H_
+#define SRC_CORE_DATATYPES_CONVERT_CONVERT_FUNCTIONS_H_
+
+#include "forte_any.h"
+#include "forte_bool.h"
+#include "forte_byte.h"
+#include "forte_dint.h"
+#include "forte_dword.h"
+#include "forte_int.h"
+#include "forte_lint.h"
+#include "forte_lreal.h"
+#include "forte_lword.h"
+#include "forte_real.h"
+#include "forte_sint.h"
+#include "forte_udint.h"
+#include "forte_uint.h"
+#include "forte_ulint.h"
+#include "forte_usint.h"
+#include "forte_word.h"
+#include "forte_string.h"
+#include "forte_wstring.h"
+#include "forte_time.h"
+#include "forte_time_of_day.h"
+#include "forte_date_and_time.h"
+#include "forte_date.h"
+#include "forte_struct.h"
+#include "forte_array.h"
+#include <math.h>
+
+//some compilers don't have this definition or is behind __STDC_CONSTANT_MACROS.
+//since this definition is only used here, we define it instead of enabling __STDC_CONSTANT_MACROS globally,
+//because it's not easy to detect which compilers will or not have this definition
+#ifndef UINT64_C
+# define UINT64_C(x) (x##ULL)
+#endif
+
+/*! \file
+ * This file implements the type conversion functions as defined by IEC 61131-3 in subclause 2.5.1.5.1
+ */
+
+inline void stringConverter(CIEC_ANY_STRING &paString, const CIEC_ANY &paVal) {
+ TForteUInt16 bufferSize = CIEC_ANY::csmStringBufferSize[paVal.getDataTypeID()];
+ paString.reserve(static_cast<TForteUInt16>(bufferSize));
+ char *pacBuffer = paString.getValue();
+ int nWrittenBytes = paVal.toString(pacBuffer, bufferSize);
+ nWrittenBytes = nWrittenBytes > -1 ? nWrittenBytes : 0;
+ paString.assign(pacBuffer, static_cast<TForteUInt16>(nWrittenBytes));
+}
+
+#include "DateAndTimeToConvertFunctions.h"
+#include "WstringToConvertFunctions.h"
+#include "StringToConvertFunctions.h"
+#include "LrealToConvertFunctions.h"
+#include "RealToConvertFunctions.h"
+#include "TimeToConvertFunctions.h"
+#include "BoolToConvertFunctions.h"
+#include "ByteToConvertFunctions.h"
+#include "DintToConvertFunctions.h"
+#include "DwordToConvertFunctions.h"
+#include "LwordToConvertFunctions.h"
+#include "UdintToConvertFunctions.h"
+#include "UintToConvertFunctions.h"
+#include "UlintToConvertFunctions.h"
+#include "UsintToConvertFunctions.h"
+#include "WordToConvertFunctions.h"
+#include "IntToConvertFunctions.h"
+#include "LintToConvertFunctions.h"
+#include "SintToConvertFunctions.h"
+#include "BcdConvertFunctions.h"
+#include "TimeInResolutionConvertFunctions.h"
+
+#endif /* SRC_CORE_DATATYPES_CONVERT_CONVERT_FUNCTIONS_H_ */
diff --git a/src/core/datatypes/forte_any.cpp b/src/core/datatypes/forte_any.cpp
index eed9581..5abae03 100644
--- a/src/core/datatypes/forte_any.cpp
+++ b/src/core/datatypes/forte_any.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2013 ACIN, nxtcontrol GmbH, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna,
- * Monika Wenger, Matthias Plasch
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2007 - 2013 ACIN, nxtcontrol GmbH, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna,
+ * Monika Wenger, Matthias Plasch
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "forte_any_gen.cpp"
@@ -20,7 +22,7 @@
const CTypeLib::CDataTypeEntry CIEC_ANY::csmFirmwareDataTypeEntry_CIEC_ANY(g_nStringIdANY, CIEC_ANY::createDataType);
-const char * const CIEC_ANY::scmAnyToStringResponse = "ND (ANY)";
+const char CIEC_ANY::scmAnyToStringResponse[] = "ND (ANY)";
int CIEC_ANY::dummyInit(){
return 0;
@@ -73,13 +75,11 @@
const char *acHashPos = strchr(pa_pacValue, '#');
if(0 != acHashPos){
CStringDictionary::TStringId nTypeNameId = parseTypeName(pa_pacValue, acHashPos);
- if(CStringDictionary::scm_nInvalidStringId != nTypeNameId){
- if(0 != CTypeLib::createDataTypeInstance(nTypeNameId, (TForteByte *) this)){
- nRetVal = fromString(pa_pacValue); //some of the datatypes require the type upfront for correct parsing e.g., time
- if(0 > nRetVal){
- //if it didn't work change us back to an any
- CIEC_ANY::createDataType((TForteByte *)this);
- }
+ if(CStringDictionary::scm_nInvalidStringId != nTypeNameId && 0 != CTypeLib::createDataTypeInstance(nTypeNameId, (TForteByte *) this)) {
+ nRetVal = fromString(pa_pacValue); //some of the datatypes require the type upfront for correct parsing e.g., time
+ if(0 > nRetVal) {
+ //if it didn't work change us back to an any
+ CIEC_ANY::createDataType((TForteByte *) this);
}
}
}
@@ -101,12 +101,14 @@
return nRetVal;
}
-int CIEC_ANY::toString(char* pa_pacValue, unsigned int pa_nBufferSize) const{
+int CIEC_ANY::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = -1;
- if((strlen(scmAnyToStringResponse) +1) <= pa_nBufferSize){
- nRetVal = static_cast<int>(strlen(scmAnyToStringResponse));
- memcpy(pa_pacValue, scmAnyToStringResponse, nRetVal);
- pa_pacValue[nRetVal] = '\0';
+ if(sizeof(scmAnyToStringResponse) <= paBufferSize) {
+ nRetVal = sizeof(scmAnyToStringResponse) - 1;
+
+ //don't use snprintf here since it brings big usage and performance overheads
+ memcpy(paValue, scmAnyToStringResponse, nRetVal);
+ paValue[nRetVal] = '\0';
}
return nRetVal;
}
@@ -223,7 +225,7 @@
65 /*e_LWORD (0, 16#FFFF FFFF FFFF FFFF)*/,
11 /*e_DATE (d#0001-01-01)*/,
9 /*e_TIME_OF_DAY (tod#00:00:00)*/,
- 20 /*e_DATE_AND_TIME (dt#0001-01-01-00:00:00)*/,
+ 24 /*e_DATE_AND_TIME (dt#0001-01-01-00:00:00.000)*/,
27 /*e_TIME (t#0)*/,
14 /*e_REAL (32bit = 1bit sign, 8bit exponent, 23bit fraction)*/,
23 /*e_LREAL (64bit = 1bit sign, 11bit exponent, 52bit fraction)*/,
@@ -239,6 +241,6 @@
0 /*e_Max*/
};
-unsigned int CIEC_ANY::getToStringBufferSize() const{
+size_t CIEC_ANY::getToStringBufferSize() const {
return csmStringBufferSize[getDataTypeID()];
}
diff --git a/src/core/datatypes/forte_any.h b/src/core/datatypes/forte_any.h
index 46ad00b..6a76833 100644
--- a/src/core/datatypes/forte_any.h
+++ b/src/core/datatypes/forte_any.h
@@ -1,16 +1,18 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtcontrol GmbH, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
- * Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna, Monika Wenger
- * - initial implementation and rework communication infrastructure
- * Martin Melik Merkumians - templated cast factory function
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtcontrol GmbH, fortiss GmbH, 2018 TU Vienna/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
+ * Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - templated cast factory function
+ *******************************************************************************/
#ifndef _ANY_H_
#define _ANY_H_
@@ -174,7 +176,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* pa_pacValue, unsigned int pa_nBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief determine whether we can cast the source to the destination and what kind of cast it is
*/
@@ -190,7 +192,7 @@
/*! \brief calculates buffer size needed for toString conversion
*/
- virtual unsigned int getToStringBufferSize() const;
+ virtual size_t getToStringBufferSize() const;
#ifdef FORTE_SUPPORT_CUSTOM_SERIALIZABLE_DATATYPES
/*! \brief the following methods have to be implemented if a custom datatype is added to the forte which is not supported by the default seralize mechanism. */
@@ -408,7 +410,7 @@
private:
const static int scmMaxTypeNameLength = 14;
- static const char * const scmAnyToStringResponse;
+ static const char scmAnyToStringResponse[];
//!declared but undefined copy constructor as we don't want ANYs to be directly copied.
CIEC_ANY(const CIEC_ANY&);
diff --git a/src/core/datatypes/forte_any_bit.cpp b/src/core/datatypes/forte_any_bit.cpp
index 1d48a26..b67fc20 100644
--- a/src/core/datatypes/forte_any_bit.cpp
+++ b/src/core/datatypes/forte_any_bit.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2013, 2015 TU Wien ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Matthias Plasch - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2013, 2015 TU Wien ACIN, Profactor GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Matthias Plasch - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_bit.h"
DEFINE_FIRMWARE_DATATYPE(ANY_BIT, g_nStringIdANY_BIT)
diff --git a/src/core/datatypes/forte_any_bit.h b/src/core/datatypes/forte_any_bit.h
index 585d5f3..61d350f 100644
--- a/src/core/datatypes/forte_any_bit.h
+++ b/src/core/datatypes/forte_any_bit.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Monika Wenger,
- * Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Monika Wenger,
+ * Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _ANY_BIT_H_
#define _ANY_BIT_H_
diff --git a/src/core/datatypes/forte_any_date.cpp b/src/core/datatypes/forte_any_date.cpp
index 59b3aff..cc6837b 100644
--- a/src/core/datatypes/forte_any_date.cpp
+++ b/src/core/datatypes/forte_any_date.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2013 ACIN, fortiss GmbH, nxtControl GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wener, Alois Zoitl, Stansilav Meduna
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2013 ACIN, fortiss GmbH, nxtControl GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wener, Alois Zoitl, Stansilav Meduna
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#include <stdlib.h>
#include "forte_any_date.h"
@@ -21,10 +23,11 @@
time_t t = 24 * 60 * 60; // 2. 1. 1970 00:00:00 for UTC
struct tm *ptm = forte_localtime(&t);
- if(ptm->tm_mday < 2)
+ if(ptm->tm_mday < 2) {
sm_nTimeZoneOffset = 60 * ptm->tm_hour + ptm->tm_min - 24 * 60;
- else
+ } else {
sm_nTimeZoneOffset = 60 * ptm->tm_hour + ptm->tm_min;
+ }
}
return sm_nTimeZoneOffset;
@@ -37,8 +40,9 @@
time_t nTime;
nTime = forte_mktime(&pa_rstTM);
- if(nTime == (time_t) -1)
+ if(nTime == (time_t) -1) {
return false;
+ }
setTUINT64(nTime * 1000ULL + pa_unMilliSec);
return true;
diff --git a/src/core/datatypes/forte_any_date.h b/src/core/datatypes/forte_any_date.h
index 375d953..da8f1cf 100644
--- a/src/core/datatypes/forte_any_date.h
+++ b/src/core/datatypes/forte_any_date.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
- * Monika Wenger, Stansilav Meduna
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
+ * Monika Wenger, Stansilav Meduna
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ANY_DAT_H_
#define _ANY_DAT_H_
diff --git a/src/core/datatypes/forte_any_derived.h b/src/core/datatypes/forte_any_derived.h
index e447284..fdc2725 100644
--- a/src/core/datatypes/forte_any_derived.h
+++ b/src/core/datatypes/forte_any_derived.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ANY_DER_H_
#define _ANY_DER_H_
diff --git a/src/core/datatypes/forte_any_elementary.cpp b/src/core/datatypes/forte_any_elementary.cpp
index 8004fc0..b1ca976 100644
--- a/src/core/datatypes/forte_any_elementary.cpp
+++ b/src/core/datatypes/forte_any_elementary.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH, nxtControl GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Monika Wenger, Matthias Plasch, Martin Melik Markumians,
- * Ingo Hegny, Stanislav Meduna
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH, nxtControl GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Monika Wenger, Matthias Plasch, Martin Melik Markumians,
+ * Ingo Hegny, Stanislav Meduna
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_elementary.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "forte_any_elementary_gen.cpp"
@@ -40,7 +42,7 @@
CStringDictionary::scm_nInvalidStringId, //e_Max
};
-int CIEC_ANY_ELEMENTARY::toString(char* pa_acValue, unsigned int pa_nBufferSize) const{
+int CIEC_ANY_ELEMENTARY::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = 0;
TLargestUIntValueType nDivisor = 0;
@@ -50,67 +52,58 @@
bool bSigned = true;
switch (getDataTypeID()){
- case e_SINT: {
+ case e_SINT:
nSBuffer = getTINT8();
nDivisor = 100;
break;
- }
case e_USINT:
- case e_BYTE: {
+ case e_BYTE:
nUBuffer = getTUINT8();
nDivisor = 100;
bSigned = false;
break;
- }
- case e_INT: {
+ case e_INT:
nSBuffer = getTINT16();
nDivisor = 10000;
break;
- }
case e_UINT:
- case e_WORD: {
+ case e_WORD:
nUBuffer = getTUINT16();
nDivisor = 10000;
bSigned = false;
break;
- }
- case e_DINT: {
+ case e_DINT:
nSBuffer = getTINT32();
nDivisor = 1000000000L;
break;
- }
case e_UDINT:
- case e_DWORD: {
+ case e_DWORD:
nUBuffer = getTUINT32();
nDivisor = 1000000000L;
bSigned = false;
break;
- }
#ifdef FORTE_USE_64BIT_DATATYPES
- case e_LINT: {
+ case e_LINT:
nSBuffer = getTINT64();
nDivisor = 1000000000000000000LL;
break;
- }
case e_ULINT:
- case e_LWORD: {
+ case e_LWORD:
nUBuffer = getTUINT64();
nDivisor = 10000000000000000000ULL;
bSigned = false;
break;
- }
#endif
- default: {
- return CIEC_ANY::toString(pa_acValue, pa_nBufferSize);
- }
+ default:
+ return CIEC_ANY::toString(paValue, paBufferSize);
}
if(true == bSigned){
if(nSBuffer < 0){
- if(nRetVal >= (int) pa_nBufferSize){
+ if(nRetVal >= static_cast<int>(paBufferSize)) {
return -1;
}
- pa_acValue[nRetVal] = '-';
+ paValue[nRetVal] = '-';
nRetVal++;
nSBuffer *= -1;
}
@@ -126,26 +119,26 @@
else{
bLeadingZeros = false;
}
- if(nRetVal >= (int) pa_nBufferSize){
+ if(nRetVal >= static_cast<int>(paBufferSize)) {
return -1;
}
- pa_acValue[nRetVal] = static_cast<char>(static_cast<char>(nUBuffer / nDivisor) + '0');
- nUBuffer = nUBuffer - (pa_acValue[nRetVal] - '0') * nDivisor;
+ paValue[nRetVal] = static_cast<char>(static_cast<char>(nUBuffer / nDivisor) + '0');
+ nUBuffer = nUBuffer - (paValue[nRetVal] - '0') * nDivisor;
nDivisor /= 10;
nRetVal++;
} while(nDivisor > 1);
- if(nRetVal >= (int) pa_nBufferSize){
+ if(nRetVal >= static_cast<int>(paBufferSize)) {
return -1;
}
- pa_acValue[nRetVal] = static_cast<char>(static_cast<char>(nUBuffer / nDivisor) + '0');
+ paValue[nRetVal] = static_cast<char>(static_cast<char>(nUBuffer / nDivisor) + '0');
nRetVal++;
- if(nRetVal >= (int) pa_nBufferSize){
+ if(nRetVal >= static_cast<int>(paBufferSize)) {
return -1;
}
- pa_acValue[nRetVal] = '\0';
+ paValue[nRetVal] = '\0';
return nRetVal;
}
@@ -204,70 +197,56 @@
return -1;
}
}
- }
- else
+ } else {
return -1;
+ }
pacRunner = pacRunner + 3;
}
EDataTypeID eID = getDataTypeID();
switch (eID){
- case e_SINT: {
+ case e_SINT:
nSUpperBound = CIEC_SINT::scm_nMaxVal;
nSLowerBound = CIEC_SINT::scm_nMinVal;
break;
- }
- case e_INT: {
+ case e_INT:
nSUpperBound = CIEC_INT::scm_nMaxVal;
nSLowerBound = CIEC_INT::scm_nMinVal;
break;
- }
- case e_DINT: {
+ case e_DINT:
nSUpperBound = CIEC_DINT::scm_nMaxVal;
nSLowerBound = CIEC_DINT::scm_nMinVal;
break;
- }
-
#ifdef FORTE_USE_64BIT_DATATYPES
- case e_LINT: {
+ case e_LINT:
nSUpperBound = CIEC_LINT::scm_nMaxVal;
nSLowerBound = CIEC_LINT::scm_nMinVal;
break;
- }
#endif
case e_USINT:
- case e_BYTE: {
+ case e_BYTE:
nUUpperBound = CIEC_USINT::scm_nMaxVal;
bSigned = false;
break;
- }
-
case e_UINT:
- case e_WORD: {
+ case e_WORD:
nUUpperBound = CIEC_UINT::scm_nMaxVal;
bSigned = false;
break;
- }
-
case e_UDINT:
- case e_DWORD: {
+ case e_DWORD:
nUUpperBound = CIEC_UDINT::scm_nMaxVal;
bSigned = false;
break;
- }
-
#ifdef FORTE_USE_64BIT_DATATYPES
case e_ULINT:
- case e_LWORD: {
+ case e_LWORD:
nUUpperBound = CIEC_ULINT::scm_nMaxVal;
bSigned = false;
break;
- }
#endif
-
- default: {
+ default:
return false;
- }
}
if((bSigned) && (10 != nMultiplier)){
diff --git a/src/core/datatypes/forte_any_elementary.h b/src/core/datatypes/forte_any_elementary.h
index 51431f9..31587ee 100644
--- a/src/core/datatypes/forte_any_elementary.h
+++ b/src/core/datatypes/forte_any_elementary.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
- * Monika Wenger, Stansilav Meduna
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Martin Melik Merkumians, Alois Zoitl,
+ * Monika Wenger, Stansilav Meduna
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _ANY_ELE_H_
#define _ANY_ELE_H_
@@ -37,7 +39,7 @@
return CIEC_ANY::e_ANY;
}
- virtual int toString(char* pa_acValue, unsigned int pa_nBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
virtual int fromString(const char *pa_rsValue);
protected:
diff --git a/src/core/datatypes/forte_any_int.cpp b/src/core/datatypes/forte_any_int.cpp
index 817611f..adc4671 100644
--- a/src/core/datatypes/forte_any_int.cpp
+++ b/src/core/datatypes/forte_any_int.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2013, 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2013, 2014 ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_int.h"
DEFINE_FIRMWARE_DATATYPE(ANY_INT, g_nStringIdANY_INT)
diff --git a/src/core/datatypes/forte_any_int.h b/src/core/datatypes/forte_any_int.h
index 18661ab..7185866 100644
--- a/src/core/datatypes/forte_any_int.h
+++ b/src/core/datatypes/forte_any_int.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2014 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Monika Wenger,
- * Martin Melik Markumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2014 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Monika Wenger,
+ * Martin Melik Markumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ANY_INT_H_
#define _ANY_INT_H_
diff --git a/src/core/datatypes/forte_any_magnitude.cpp b/src/core/datatypes/forte_any_magnitude.cpp
index 931d74f..4737d39 100644
--- a/src/core/datatypes/forte_any_magnitude.cpp
+++ b/src/core/datatypes/forte_any_magnitude.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_magnitude.h"
DEFINE_FIRMWARE_DATATYPE(ANY_MAGNITUDE, g_nStringIdANY_MAGNITUDE)
diff --git a/src/core/datatypes/forte_any_magnitude.h b/src/core/datatypes/forte_any_magnitude.h
index f644b4d..12d6a68 100644
--- a/src/core/datatypes/forte_any_magnitude.h
+++ b/src/core/datatypes/forte_any_magnitude.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Monika Wenger,
- * Martin Melik Markumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2011 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Monika Wenger,
+ * Martin Melik Markumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ANY_MAG_H_
#define _ANY_MAG_H_
diff --git a/src/core/datatypes/forte_any_num.cpp b/src/core/datatypes/forte_any_num.cpp
index c9186b5..646c43b 100644
--- a/src/core/datatypes/forte_any_num.cpp
+++ b/src/core/datatypes/forte_any_num.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_num.h"
DEFINE_FIRMWARE_DATATYPE(ANY_NUM, g_nStringIdANY_NUM)
diff --git a/src/core/datatypes/forte_any_num.h b/src/core/datatypes/forte_any_num.h
index 4cafa2b..f62abfd 100644
--- a/src/core/datatypes/forte_any_num.h
+++ b/src/core/datatypes/forte_any_num.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Monika Wenger,
- * Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2011 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Monika Wenger,
+ * Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _ANY_NUM_H_
#define _ANY_NUM_H_
diff --git a/src/core/datatypes/forte_any_real.cpp b/src/core/datatypes/forte_any_real.cpp
index 14e680a..9f27b1a 100644
--- a/src/core/datatypes/forte_any_real.cpp
+++ b/src/core/datatypes/forte_any_real.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_any_real.h"
DEFINE_FIRMWARE_DATATYPE(ANY_REAL, g_nStringIdANY_REAL)
diff --git a/src/core/datatypes/forte_any_real.h b/src/core/datatypes/forte_any_real.h
index 2dabb17..db86857 100644
--- a/src/core/datatypes/forte_any_real.h
+++ b/src/core/datatypes/forte_any_real.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Monika Wenger,
- * Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Monika Wenger,
+ * Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ANY_REA_H_
#define _ANY_REA_H_
diff --git a/src/core/datatypes/forte_any_string.cpp b/src/core/datatypes/forte_any_string.cpp
index 5056dba..0628f0d 100644
--- a/src/core/datatypes/forte_any_string.cpp
+++ b/src/core/datatypes/forte_any_string.cpp
@@ -1,17 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2011 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
- * 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stansilav Meduna, Alois Zoitl, Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
- * Martin Melik Merkumians
- * - fixes behavior for getToStringBufferSize
- *******************************************************************************/
+ * Copyright (c) 2011 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
+ * 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stansilav Meduna, Alois Zoitl, Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians
+ * - fixes behavior for getToStringBufferSize
+ *******************************************************************************/
#include <fortenew.h>
#include "forte_any_string.h"
#include "unicode_utils.h"
@@ -44,11 +46,9 @@
void CIEC_ANY_STRING::assign(const char *pa_poData, TForteUInt16 pa_nLen) {
if (0 != pa_poData){
- if(0 != pa_nLen){
- if(pa_poData != getValue()){
- reserve(pa_nLen);
- memcpy(getValue(), pa_poData, pa_nLen);
- }
+ if(0 != pa_nLen && pa_poData != getValue()) {
+ reserve(pa_nLen);
+ memcpy(getValue(), pa_poData, pa_nLen);
}
if(0 != getValue()){
setLength(pa_nLen);
@@ -113,8 +113,9 @@
if('$' == *pacRunner){
TForteUInt16 nDummy;
++pacRunner;
- if (*pacRunner == '\0')
+ if(*pacRunner == '\0') {
break;
+ }
if(!handleDollarEscapedChar(&pacRunner, (pa_cDelimiter == '"'), nDummy)){
continue; // It is invalid but we need the real end
}
@@ -227,15 +228,16 @@
if (pa_bWide) {
pa_rnValue = TForteUInt16(pa_rnValue << 8);
- if (forte::core::util::isHexDigit((*pa_pacValue)[2]))
+ if(forte::core::util::isHexDigit((*pa_pacValue)[2])) {
pa_rnValue = TForteUInt16(pa_rnValue | forte::core::util::charHexDigitToInt((*pa_pacValue)[2]) << 4);
- else
+ } else {
return false;
-
- if (forte::core::util::isHexDigit((*pa_pacValue)[3]))
+ }
+ if(forte::core::util::isHexDigit((*pa_pacValue)[3])) {
pa_rnValue = TForteUInt16(pa_rnValue | forte::core::util::charHexDigitToInt((*pa_pacValue)[3]));
- else
+ } else {
return false;
+ }
}
*pa_pacValue += pa_bWide ? 3 : 1;
@@ -261,24 +263,26 @@
while((*pacRunner != '\0') && (nLen != scm_unMaxStringLen)){
if('$' == *pacRunner){
++pacRunner;
- if (*pacRunner == '\0')
+ if(*pacRunner == '\0') {
break;
+ }
if(!handleDollarEscapedChar(&pacRunner, bWide, nValue)){
return -1;
}
#ifdef FORTE_USE_WSTRING_DATATYPE
if (! bWide)
-#endif
+#endif //FORTE_USE_WSTRING_DATATYPE
acValue[nLen] = (char) nValue;
#ifdef FORTE_USE_WSTRING_DATATYPE
else {
int nEncLen = CUnicodeUtilities::encodeUTF8Codepoint(reinterpret_cast<TForteByte *>(acValue + nLen), 3, nValue);
- if (nEncLen < 0)
+ if (nEncLen < 0) {
return -1;
+ }
nLen = static_cast<TForteUInt16>(nLen + nEncLen - 1);
}
-#endif
+#endif //FORTE_USE_WSTRING_DATATYPE
}
else{
if(pa_cDelimiter == *pacRunner){
diff --git a/src/core/datatypes/forte_any_string.h b/src/core/datatypes/forte_any_string.h
index d6c0ca7..fdf4e17 100644
--- a/src/core/datatypes/forte_any_string.h
+++ b/src/core/datatypes/forte_any_string.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Stanislav Meduna, Monika Wenger, Ingo Hegny
@@ -127,7 +128,9 @@
* \return number of bytes used in the buffer
* -1 on error
*/
- virtual int toUTF8(char*, unsigned int, bool) const{return 0;}
+ virtual int toUTF8(char*, size_t, bool) const {
+ return 0;
+ }
#endif
protected:
diff --git a/src/core/datatypes/forte_array.cpp b/src/core/datatypes/forte_array.cpp
index 8009f71..7a25453 100644
--- a/src/core/datatypes/forte_array.cpp
+++ b/src/core/datatypes/forte_array.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2015 ACIN, nxtControl GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Ingo Hegny, Stansilav Meduna
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2007 - 2015 ACIN, nxtControl GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Stansilav Meduna
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#include "forte_array.h"
#include <stdlib.h>
@@ -144,7 +146,7 @@
}
}
-int CIEC_ARRAY::toString(char* paValue, unsigned int paBufferSize) const {
+int CIEC_ARRAY::toString(char* paValue, size_t paBufferSize) const {
int nBytesUsed = -1;
if(paBufferSize) {
@@ -186,8 +188,8 @@
return nBytesUsed;
}
-unsigned int CIEC_ARRAY::getToStringBufferSize() const {
- unsigned int retVal = 3; // 2 bytes for the open and closing brackets and one for the '\0'
+size_t CIEC_ARRAY::getToStringBufferSize() const {
+ size_t retVal = 3; // 2 bytes for the open and closing brackets and one for the '\0'
TForteUInt16 nSize = size();
retVal += (nSize > 1) ? (nSize - 1) : 0; //for the commas between the elements
diff --git a/src/core/datatypes/forte_array.h b/src/core/datatypes/forte_array.h
index 843b2b5..70e5276 100644
--- a/src/core/datatypes/forte_array.h
+++ b/src/core/datatypes/forte_array.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2007 - 2013 ACIN, nxtControl GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Ingo Hegny, Stansilav Meduna, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2007 - 2013 ACIN, nxtControl GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Ingo Hegny, Stansilav Meduna, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_ARRAY_H_
#define _FORTE_ARRAY_H_
@@ -98,9 +100,9 @@
* \return number of bytes used in the buffer
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
- virtual unsigned int getToStringBufferSize() const;
+ virtual size_t getToStringBufferSize() const;
private:
//This constructor is only to be used by the create instance method
diff --git a/src/core/datatypes/forte_bool.cpp b/src/core/datatypes/forte_bool.cpp
index 96bca62..d28106a 100644
--- a/src/core/datatypes/forte_bool.cpp
+++ b/src/core/datatypes/forte_bool.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Rene Smodic,
- * Gerhard Ebenhofer, Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Rene Smodic,
+ * Gerhard Ebenhofer, Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_bool.h"
#include <stdlib.h>
@@ -58,7 +60,7 @@
return nRetVal;
}
-int CIEC_BOOL::toString(char* paValue, unsigned int paBufferSize) const {
+int CIEC_BOOL::toString(char* paValue, size_t paBufferSize) const {
int nRetval = -1;
if(paBufferSize >= csmStringBufferSize[e_BOOL]){
if(getTBOOL8()){
diff --git a/src/core/datatypes/forte_bool.h b/src/core/datatypes/forte_bool.h
index 8c7408b..9a87157 100644
--- a/src/core/datatypes/forte_bool.h
+++ b/src/core/datatypes/forte_bool.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
@@ -93,7 +94,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
private:
};
diff --git a/src/core/datatypes/forte_byte.cpp b/src/core/datatypes/forte_byte.cpp
index 8210659..72299fc 100644
--- a/src/core/datatypes/forte_byte.cpp
+++ b/src/core/datatypes/forte_byte.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_byte.h"
DEFINE_FIRMWARE_DATATYPE(BYTE, g_nStringIdBYTE)
diff --git a/src/core/datatypes/forte_byte.h b/src/core/datatypes/forte_byte.h
index c8c8932..963eb02 100644
--- a/src/core/datatypes/forte_byte.h
+++ b/src/core/datatypes/forte_byte.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/core/datatypes/forte_date.cpp b/src/core/datatypes/forte_date.cpp
index 6a93fdd..eab992a 100644
--- a/src/core/datatypes/forte_date.cpp
+++ b/src/core/datatypes/forte_date.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <stdlib.h>
#include <math.h>
#include <string.h>
@@ -68,15 +70,15 @@
return static_cast<unsigned int>(acBuffer - paValue);
}
-int CIEC_DATE::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_DATE::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = -1;
struct tm *ptm = getTimeStruct();
- if (ptm == 0)
+ if(ptm == 0) {
return -1;
-
+ }
nRetVal = forte_snprintf(paValue, paBufferSize, "%04d-%02d-%02d", 1900 + ptm->tm_year, ptm->tm_mon + 1, ptm->tm_mday);
- if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
+ if((nRetVal < -1) || (nRetVal >= static_cast<int>(paBufferSize))) {
nRetVal = -1;
}
return nRetVal;
diff --git a/src/core/datatypes/forte_date.h b/src/core/datatypes/forte_date.h
index 08c6771..bb41365 100644
--- a/src/core/datatypes/forte_date.h
+++ b/src/core/datatypes/forte_date.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_DATE_H_
#define _FORTE_DATE_H_
@@ -105,7 +107,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
};
#endif /* #ifdef FORTE_USE_64BIT_DATATYPES */
diff --git a/src/core/datatypes/forte_date_and_time.cpp b/src/core/datatypes/forte_date_and_time.cpp
index baabdda..438d0a0 100644
--- a/src/core/datatypes/forte_date_and_time.cpp
+++ b/src/core/datatypes/forte_date_and_time.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
@@ -79,13 +81,14 @@
++nNums;
}
- if(nNums < 3){
- for(unsigned int i = nNums; i < 3; ++i)
+ if(nNums < 3) {
+ for(unsigned int i = nNums; i < 3; ++i) {
msec *= 10;
- }
- else{
- for(unsigned int i = 0; i < (nNums - 3); ++i)
+ }
+ } else {
+ for(unsigned int i = 0; i < (nNums - 3); ++i) {
msec /= 10;
+ }
}
}
nRetVal = static_cast<int>(acBuffer - paValue);
@@ -96,23 +99,21 @@
}
}
- if(-1 != nRetVal){
- if(!setDateAndTime(tm, msec)){
- nRetVal = -1;
- }
+ if(-1 != nRetVal && !setDateAndTime(tm, msec)) {
+ nRetVal = -1;
}
return nRetVal;
}
-int CIEC_DATE_AND_TIME::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_DATE_AND_TIME::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = -1;
struct tm *ptm = getTimeStruct();
if(0 != ptm){
nRetVal = forte_snprintf(paValue, paBufferSize, "%04d-%02d-%02d-%02d:%02d:%02d.%03u", 1900 + ptm->tm_year, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, getMilliSeconds());
- if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
+ if((nRetVal < -1) || (nRetVal >= static_cast<int>(paBufferSize))) {
nRetVal = -1;
}
}
@@ -124,9 +125,9 @@
time_t t = static_cast<time_t>(nToStringBuffer / 1000);
struct tm *ptm = forte_gmtime(&t);
- if (ptm == 0)
+ if(ptm == 0) {
return -1;
-
+ }
int nRetVal = forte_snprintf(paValue, paBufferSize, "%04d-%02d-%02d-%02d:%02d:%02d.%03d", 1900 + ptm->tm_year, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, (int) (nToStringBuffer % 1000));
if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
nRetVal = -1;
diff --git a/src/core/datatypes/forte_date_and_time.h b/src/core/datatypes/forte_date_and_time.h
index da7a14e..cca1327 100644
--- a/src/core/datatypes/forte_date_and_time.h
+++ b/src/core/datatypes/forte_date_and_time.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _FORTE_DATE_AND_TIME_H_
#define _FORTE_DATE_AND_TIME_H_
@@ -101,7 +103,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const ;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief Converts data type value to string - use GMT time
* \param paValue Pointer to the provided buffer
@@ -110,12 +112,6 @@
* -1 on error
*/
virtual int toGMTString(char* paValue, unsigned int paBufferSize) const ;
-
- /*! \brief Set the variable to current time
- */
- void setCurrentTime(){
- setTUINT64(forte_time(0) * 1000ULL);
- };
};
#endif /* #ifdef FORTE_USE_64BIT_DATATYPES */
diff --git a/src/core/datatypes/forte_dint.cpp b/src/core/datatypes/forte_dint.cpp
index 400a7a1..719f591 100644
--- a/src/core/datatypes/forte_dint.cpp
+++ b/src/core/datatypes/forte_dint.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_dint.h"
DEFINE_FIRMWARE_DATATYPE(DINT, g_nStringIdDINT)
diff --git a/src/core/datatypes/forte_dint.h b/src/core/datatypes/forte_dint.h
index afc49d2..5aaa5d7 100644
--- a/src/core/datatypes/forte_dint.h
+++ b/src/core/datatypes/forte_dint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/core/datatypes/forte_dword.cpp b/src/core/datatypes/forte_dword.cpp
index 58b6dd6..7b42bd4 100644
--- a/src/core/datatypes/forte_dword.cpp
+++ b/src/core/datatypes/forte_dword.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#include "forte_dword.h"
diff --git a/src/core/datatypes/forte_dword.h b/src/core/datatypes/forte_dword.h
index 2a6e223..6a2895c 100644
--- a/src/core/datatypes/forte_dword.h
+++ b/src/core/datatypes/forte_dword.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/core/datatypes/forte_int.cpp b/src/core/datatypes/forte_int.cpp
index 2f3596a..5ebcd8c 100644
--- a/src/core/datatypes/forte_int.cpp
+++ b/src/core/datatypes/forte_int.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#include "forte_int.h"
diff --git a/src/core/datatypes/forte_int.h b/src/core/datatypes/forte_int.h
index 1c96c20..08d998b 100644
--- a/src/core/datatypes/forte_int.h
+++ b/src/core/datatypes/forte_int.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/core/datatypes/forte_lint.cpp b/src/core/datatypes/forte_lint.cpp
index 8e6f68d..ea6cd3c 100644
--- a/src/core/datatypes/forte_lint.cpp
+++ b/src/core/datatypes/forte_lint.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Alois Zoitl,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2009 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Alois Zoitl,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_lint.h"
#ifdef FORTE_USE_64BIT_DATATYPES
diff --git a/src/core/datatypes/forte_lint.h b/src/core/datatypes/forte_lint.h
index 7fbd126..6ba0580 100644
--- a/src/core/datatypes/forte_lint.h
+++ b/src/core/datatypes/forte_lint.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Alois Zoitl,
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2009 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Alois Zoitl,
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _FORTE_LINT_H_
#define _FORTE_LINT_H_
diff --git a/src/core/datatypes/forte_lreal.cpp b/src/core/datatypes/forte_lreal.cpp
index 8c56651..fb299c1 100644
--- a/src/core/datatypes/forte_lreal.cpp
+++ b/src/core/datatypes/forte_lreal.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <math.h>
#include <string.h>
#include <stdlib.h>
@@ -44,10 +46,10 @@
return static_cast<int>(pcEnd - paValue);
}
-int CIEC_LREAL::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_LREAL::toString(char* paValue, size_t paBufferSize) const {
int nRetVal;
nRetVal = forte_snprintf(paValue, paBufferSize, "%.*g", 15, getTDFLOAT());
- if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
+ if((nRetVal < -1) || (nRetVal >= static_cast<int>(paBufferSize))) {
nRetVal = -1;
}
return nRetVal;
@@ -60,13 +62,13 @@
setValueSimple(paValue);
break;
case e_REAL:
- (*this) = (((CIEC_REAL &) paValue)).operator TForteFloat();
+ (*this) = static_cast<const CIEC_REAL &>(paValue).operator TForteFloat();
break;
case e_STRING:
- (*this).fromString(((CIEC_STRING&) paValue).getValue());
+ (*this).fromString(reinterpret_cast<const CIEC_STRING&>(paValue).getValue());
break;
case e_WSTRING:
- (*this).fromString(((CIEC_WSTRING&) paValue).getValue());
+ (*this).fromString(reinterpret_cast<const CIEC_WSTRING&>(paValue).getValue());
break;
case e_SINT:
case e_INT:
diff --git a/src/core/datatypes/forte_lreal.h b/src/core/datatypes/forte_lreal.h
index 8b8b9c9..0cab113 100644
--- a/src/core/datatypes/forte_lreal.h
+++ b/src/core/datatypes/forte_lreal.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl,
@@ -96,7 +97,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief Casts TForteDFloat values to CIEC data types
* \param paSrcValue Source value for the cast
diff --git a/src/core/datatypes/forte_lword.cpp b/src/core/datatypes/forte_lword.cpp
index 239ebd9..8e899f5 100644
--- a/src/core/datatypes/forte_lword.cpp
+++ b/src/core/datatypes/forte_lword.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2010 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkiumians, Alois Zoitl, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkiumians, Alois Zoitl, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_lword.h"
#ifdef FORTE_USE_64BIT_DATATYPES
diff --git a/src/core/datatypes/forte_lword.h b/src/core/datatypes/forte_lword.h
index 4732597..83ce4fc 100644
--- a/src/core/datatypes/forte_lword.h
+++ b/src/core/datatypes/forte_lword.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2010 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkiumians, Alois Zoitl, Monika Wenger
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2010 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkiumians, Alois Zoitl, Monika Wenger
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _FORTE_LWORD_H_
#define _FORTE_LWORD_H_
diff --git a/src/core/datatypes/forte_real.cpp b/src/core/datatypes/forte_real.cpp
index 699b469..545b38d 100644
--- a/src/core/datatypes/forte_real.cpp
+++ b/src/core/datatypes/forte_real.cpp
@@ -1,16 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Martin Melik Merkumians, Monika Wenger, Stanislav Meduna,
- * Matthias Plasch
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2019 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Martin Melik Merkumians, Monika Wenger, Stanislav Meduna,
+ * Matthias Plasch
+ * - initial implementation and rework communication infrastructure
+ * Jose Cabral
+ * - Move arch dependant code (strtod) to the arch folder
+ *******************************************************************************/
#include <math.h>
#include <string.h>
#include <stdlib.h>
@@ -19,6 +22,7 @@
#include "forte_lreal.h"
#include <forte_printer.h>
+#include "../../arch/forte_realFunctions.h"
DEFINE_FIRMWARE_DATATYPE(REAL, g_nStringIdREAL)
@@ -26,33 +30,29 @@
char *pcEnd;
const char *pacRunner = paValue;
TForteFloat realval = 0.0;
- const TForteFloat TFLOAT_min = 3.4e-38f; // lower precision boundary
- const TForteFloat TFLOAT_max = 3.4e38f; // upper precision boundary
+ const TForteFloat TFLOAT_min = 3.4e-38F; // lower precision boundary
+ const TForteFloat TFLOAT_max = 3.4e38F; // upper precision boundary
if(0 == strncmp(pacRunner, "REAL#", 5)){
pacRunner += 5;
}
-
- #if defined(WIN32) || defined(__ECOS) || defined(VXWORKS)
- realval = static_cast<TForteFloat>(strtod(pacRunner, &pcEnd));
- #else
- realval = strtof(pacRunner, &pcEnd);
- #endif
+ realval = forte_stringToFloat(pacRunner, &pcEnd);
if(((fabs(realval) < TFLOAT_min) && (realval != 0)) || ((fabs(realval) > TFLOAT_max) && (realval != 0)) ||
- (pacRunner == pcEnd))
+ (pacRunner == pcEnd)) {
return -1;
+ }
setTFLOAT((TForteFloat) realval);
return static_cast<int>(pcEnd - paValue);
}
-int CIEC_REAL::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_REAL::toString(char* paValue, size_t paBufferSize) const {
int nRetVal;
nRetVal = forte_snprintf(paValue, paBufferSize, "%g", getTFLOAT());
- if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
- nRetVal = -1;
+ if((nRetVal < -1) || (nRetVal >= static_cast<int>(paBufferSize))) {
+ nRetVal = -1;
}
return nRetVal;
}
@@ -110,10 +110,10 @@
case CIEC_ANY::e_LINT: {
CIEC_REAL::TValueType floatValue = static_cast<CIEC_REAL::TValueType>(paSrcValue);
if(0 < floatValue){
- floatValue += 0.5f;
+ floatValue += 0.5F;
}
if(0 > floatValue){
- floatValue -= 0.5f;
+ floatValue -= 0.5F;
}
*((CIEC_ANY::TLargestIntValueType *) paDestValue.getDataPtr()) = static_cast<CIEC_ANY::TLargestIntValueType>(floatValue);
}
@@ -123,12 +123,12 @@
//should not be necessary because of connect function, but who knows.
CIEC_REAL::TValueType floatValue = static_cast<CIEC_REAL::TValueType>(paSrcValue);
if(0 < floatValue){
- floatValue += 0.5f;
+ floatValue += 0.5F;
}
if(0 > floatValue){
- floatValue -= 0.5f;
+ floatValue -= 0.5F;
}
- *((CIEC_ANY::TLargestUIntValueType *) paDestValue.getDataPtr()) = static_cast<CIEC_ANY::TLargestUIntValueType>(floatValue);
+ *(reinterpret_cast<CIEC_ANY::TLargestUIntValueType*>(paDestValue.getDataPtr())) = static_cast<CIEC_ANY::TLargestUIntValueType>(floatValue);
}
break;
}
diff --git a/src/core/datatypes/forte_real.h b/src/core/datatypes/forte_real.h
index 0af60ee..db98b85 100644
--- a/src/core/datatypes/forte_real.h
+++ b/src/core/datatypes/forte_real.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 Pr3factor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
@@ -98,7 +99,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief Casts TForteFloat values to CIEC data types
* \param paSrcValue Source value for the cast
diff --git a/src/core/datatypes/forte_sint.cpp b/src/core/datatypes/forte_sint.cpp
index 0faebde..efbc43e 100644
--- a/src/core/datatypes/forte_sint.cpp
+++ b/src/core/datatypes/forte_sint.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl,
- * Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl,
+ * Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_sint.h"
DEFINE_FIRMWARE_DATATYPE(SINT, g_nStringIdSINT)
diff --git a/src/core/datatypes/forte_sint.h b/src/core/datatypes/forte_sint.h
index 584a065..600e4df 100644
--- a/src/core/datatypes/forte_sint.h
+++ b/src/core/datatypes/forte_sint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/core/datatypes/forte_string.cpp b/src/core/datatypes/forte_string.cpp
index b554a19..221672c 100644
--- a/src/core/datatypes/forte_string.cpp
+++ b/src/core/datatypes/forte_string.cpp
@@ -1,18 +1,20 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
- * 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Rene Smodic, Alois Zoitl,
- * Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna
- * - initial implementation and rework communication infrastructure
- * Martin Melik Merkumians - fixes toString behavior for 0 size buffer
- * Martin Melik Merkumians - fixes behavior for getToStringBufferSize
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
+ * 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Rene Smodic, Alois Zoitl,
+ * Ingo Hegny, Martin Melik Merkumians, Stanislav Meduna
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - fixes toString behavior for 0 size buffer
+ * Martin Melik Merkumians - fixes behavior for getToStringBufferSize
+ *******************************************************************************/
#include "forte_string.h"
#include <devlog.h>
#include "forte_uint.h"
@@ -30,14 +32,16 @@
nSrcCappedLength -= 7;
}
- if (static_cast<unsigned int>(nSrcLen) > scm_unMaxStringLen)
+ if(static_cast<unsigned int>(nSrcLen) > scm_unMaxStringLen) {
nSrcCappedLength = scm_unMaxStringLen;
+ }
if (*pa_pacValue == '\'') {
reserve(static_cast<TForteUInt16>(nSrcCappedLength));
- if (unescapeFromString(pa_pacValue, '\'') < 0)
+ if(unescapeFromString(pa_pacValue, '\'') < 0) {
return -1;
+ }
} else {
assign(pa_pacValue, static_cast<TForteUInt16>(nSrcCappedLength));
}
@@ -46,18 +50,18 @@
return nSrcLen;
}
-int CIEC_STRING::toString(char* paValue, unsigned int paBufferSize) const {
+int CIEC_STRING::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = -1;
if(0 != paValue && getToStringBufferSize() <= paBufferSize){
*paValue = '\'';
paValue++;
TForteUInt16 nLen = length();
- int nUsedBytes = 0;
+ size_t nUsedBytes = 0;
paBufferSize -= 2;
if(0 < nLen){
const char * acValue = getValue();
for(unsigned int i = 0; i < nLen; ++i){
- if(static_cast<unsigned int >(nUsedBytes) >= paBufferSize){
+ if(nUsedBytes >= paBufferSize) {
return -1;
}
nUsedBytes += dollarEscapeChar(paValue+nUsedBytes, acValue[i], 2);
@@ -66,7 +70,7 @@
} else{
*paValue = '\0';
}
- nRetVal = nUsedBytes;
+ nRetVal = static_cast<int>(nUsedBytes);
paValue[nRetVal] = '\'';
paValue[nRetVal + 1] = '\0';
nRetVal += 2;
@@ -74,9 +78,9 @@
return nRetVal;
}
-unsigned int CIEC_STRING::getToStringBufferSize() const{
+size_t CIEC_STRING::getToStringBufferSize() const {
const char * const stringValue = getValue();
- unsigned int neededBufferSize = 0;
+ size_t neededBufferSize = 0;
for(size_t i = 0; i < length(); ++i){
if(isprint(static_cast<unsigned char>(stringValue[i])) && '$' != stringValue[i] && '\'' != stringValue[i]){
++neededBufferSize;
@@ -103,7 +107,7 @@
#ifdef FORTE_UNICODE_SUPPORT
int CIEC_STRING::fromUTF8(const char *pa_pacValue, int pa_nLen, bool pa_bUnescape) {
-
+
int nSrcLen = pa_nLen >= 0 ? pa_nLen : (pa_bUnescape ? determineEscapedStringLength(pa_pacValue, '\'') : static_cast<int>(strlen(pa_pacValue)));
int nSrcCappedLength = nSrcLen;
@@ -131,8 +135,9 @@
}
reserve(static_cast<TForteUInt16>(nLength));
- if (0 == getGenData())
+ if (0 == getGenData()) {
return -1;
+ }
TForteUInt32 nCodepoint;
const char *pRunner = pa_pacValue;
@@ -143,10 +148,12 @@
int nRes;
nRes = CUnicodeUtilities::parseUTF8Codepoint((const TForteByte *) pRunner, nCodepoint);
pRunner += nRes;
- if (nCodepoint == CUnicodeUtilities::scm_unBOMMarker)
+ if (nCodepoint == CUnicodeUtilities::scm_unBOMMarker) {
continue;
- if (nCodepoint >= 0x100)
+ }
+ if (nCodepoint >= 0x100) {
nCodepoint = '?';
+ }
*pEncRunner++ = (TForteByte) nCodepoint;
}
@@ -155,59 +162,67 @@
if (pa_bUnescape) {
nLength = unescapeFromString(getValue(), '\'');
- if (nLength < 0)
+ if (nLength < 0) {
return -1;
+ }
}
}
return nSrcLen;
}
-int CIEC_STRING::toUTF8(char* pa_pacBuffer, unsigned int pa_nBufferSize, bool pa_bEscape) const {
+int CIEC_STRING::toUTF8(char* paBuffer, size_t paBufferSize, bool paEscape) const {
// Count the needed space
- unsigned int nNeededLength = pa_bEscape ? 2 : 0; // Leading and trailing delimiter
+ size_t nNeededLength = paEscape ? 2 : 0; // Leading and trailing delimiter
int nRes;
const unsigned char *pRunner = (const unsigned char *) getValue();
while (*pRunner) {
nRes = CUnicodeUtilities::encodeUTF8Codepoint(0, 0, (TForteUInt32) *pRunner);
- if (nRes < 0)
+ if (nRes < 0) {
return -1;
+ }
nNeededLength += nRes;
- if (nRes == 1 && pa_bEscape && dollarEscapeChar(0, *pRunner, 0) == 2)
+ if (nRes == 1 && paEscape && dollarEscapeChar(0, *pRunner, 0) == 2) {
nNeededLength++;
+ }
++pRunner;
}
- if (pa_pacBuffer == 0)
- return nNeededLength;
+ if(0 == paBuffer) {
+ return static_cast<int>(nNeededLength);
+ }
- if (nNeededLength+1 > pa_nBufferSize)
+ if(nNeededLength + 1 > paBufferSize) {
return -1;
+ }
- char *pEncRunner = pa_pacBuffer;
- char *pDataEnd = pa_pacBuffer + nNeededLength;
+ char *pEncRunner = paBuffer;
+ char *pDataEnd = paBuffer + nNeededLength;
- if (pa_bEscape)
+ if(paEscape) {
*pEncRunner++ = '\'';
+ }
pRunner = (const unsigned char *) getValue();
while (*pRunner) {
nRes = CUnicodeUtilities::encodeUTF8Codepoint((TForteByte *) pEncRunner, static_cast<unsigned int>(pDataEnd - pEncRunner), (TForteUInt32) *pRunner);
- if (nRes == 1 && pa_bEscape)
+ if(nRes == 1 && paEscape) {
nRes = dollarEscapeChar(pEncRunner, *pRunner, static_cast<unsigned int>(pDataEnd - pEncRunner));
-
- if (nRes < 0)
+ }
+ if(nRes < 0) {
return -1;
+ }
pEncRunner += nRes;
++pRunner;
}
- if (pa_bEscape)
+ if(paEscape) {
*pEncRunner++ = '\'';
+ }
*pEncRunner = '\0';
- return static_cast<int>(pEncRunner - pa_pacBuffer);
+ return static_cast<int>(pEncRunner - paBuffer);
}
#endif
diff --git a/src/core/datatypes/forte_string.h b/src/core/datatypes/forte_string.h
index 82df91a..39c2b78 100644
--- a/src/core/datatypes/forte_string.h
+++ b/src/core/datatypes/forte_string.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Rene Smodic, Alois Zoitl, Gerhard Ebenhofer
@@ -70,7 +71,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief Converts a UTF-8 encoded string to a STRING (ISO 10646 Row 00 internally)
*
@@ -97,7 +98,7 @@
* -1 on error
*/
#ifdef FORTE_UNICODE_SUPPORT
- virtual int toUTF8(char* pa_pacBuffer, unsigned int pa_nBufferSize, bool pa_bEscape) const;
+ virtual int toUTF8(char* paBuffer, size_t paBufferSize, bool paEscape) const;
#endif
/*! \brief Returns the amount of bytes needed to create the IEC 61131 literal string
@@ -109,7 +110,7 @@
*
* \return Needed buffer size for literal string without type delarator e.g., STRING#
*/
- virtual unsigned int getToStringBufferSize() const;
+ virtual size_t getToStringBufferSize() const;
protected:
diff --git a/src/core/datatypes/forte_struct.cpp b/src/core/datatypes/forte_struct.cpp
index 0f21a95..f8fc4ef 100644
--- a/src/core/datatypes/forte_struct.cpp
+++ b/src/core/datatypes/forte_struct.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2010 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Ingo Hegny, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010 - 2015 ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Ingo Hegny, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_struct.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "forte_struct_gen.cpp"
@@ -197,7 +199,7 @@
return unElementNameId;
}
-int CIEC_STRUCT::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_STRUCT::toString(char* paValue, size_t paBufferSize) const {
int nBytesUsed = -1;
if(paBufferSize) {
@@ -222,7 +224,7 @@
paValue++;
*paValue = '=';
paValue++;
- paBufferSize -= static_cast<unsigned int>(strlen(acMemberName) + 2);
+ paBufferSize -= strlen(acMemberName) + 2;
nBytesUsed += static_cast<int>(strlen(acMemberName) + 2);
nUsedBytesByElement = poMembers->toString(paValue, paBufferSize);
@@ -270,8 +272,8 @@
return poRetVal;
}
-unsigned int CIEC_STRUCT::getToStringBufferSize() const {
- unsigned int retVal = 3; // 2 bytes for the open and closing brackets one for the '\0'
+size_t CIEC_STRUCT::getToStringBufferSize() const {
+ size_t retVal = 3; // 2 bytes for the open and closing brackets one for the '\0'
TForteUInt16 nSize = getStructSize();
retVal += (nSize > 1) ? (nSize - 1) : 0; //for the commas between the elements
retVal += (nSize * 2); //for the := of each element
diff --git a/src/core/datatypes/forte_struct.h b/src/core/datatypes/forte_struct.h
index 23dd4c1..120443f 100644
--- a/src/core/datatypes/forte_struct.h
+++ b/src/core/datatypes/forte_struct.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2010 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Ingo Hegny, Alois Zoitl, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2010 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Ingo Hegny, Alois Zoitl, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_STRUCT_H_
#define _FORTE_STRUCT_H_
@@ -102,7 +104,7 @@
* \return number of bytes used in the buffer
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
CIEC_ANY *getMembers(){
return (0 != getSpecs()) ? getSpecs()->mMembers : static_cast<CIEC_ANY *>(0);
@@ -119,7 +121,7 @@
*/
CIEC_ANY *getMemberNamed(CStringDictionary::TStringId paMemberNameId);
- virtual unsigned int getToStringBufferSize() const;
+ virtual size_t getToStringBufferSize() const;
protected:
diff --git a/src/core/datatypes/forte_time.cpp b/src/core/datatypes/forte_time.cpp
index 20bb031..8cac9c4 100644
--- a/src/core/datatypes/forte_time.cpp
+++ b/src/core/datatypes/forte_time.cpp
@@ -1,81 +1,102 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny,
- * Martin Melik Merkumians, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH,
+ * 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny,
+ * Martin Melik Merkumians, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - added parsing for signed time literals
+ *******************************************************************************/
#include "forte_time.h"
#include "../../arch/timerha.h"
#include <stdlib.h>
#include <ctype.h>
+#include "forte_constants.h"
+
#ifdef FORTE_USE_64BIT_DATATYPES
- #include "forte_lint.h"
+# include "forte_lint.h"
#else
- #include "forte_dint.h"
+# include "forte_dint.h"
#endif
-
-#define MILISECONDS_PER_SECOND 1000
-#define MICROSECONDS_PER_SECOND 1000000
-
DEFINE_FIRMWARE_DATATYPE(TIME, g_nStringIdTIME)
-int CIEC_TIME::fromString(const char *paValue){
+int CIEC_TIME::fromString(const char *paValue) {
int nRetVal = -1;
char* pcEnd;
TValueType nIntVal = 0;
- if((paValue[0] == 'T') || (paValue[0] == 't')){
+ if('t' == tolower(paValue[0])) {
nRetVal = 1;
paValue++;
- if(('i' == tolower(paValue[0])) && ('m' == tolower(paValue[1])) && ('e' == tolower(paValue[2]))){
+ if(('i' == tolower(paValue[0])) && ('m' == tolower(paValue[1])) && ('e' == tolower(paValue[2]))) {
paValue += 3;
nRetVal += 3;
}
- if(*paValue == '#'){ // the string has to start with T#
+ if('#' == *paValue) { // the string has to start with T#
paValue++;
nRetVal++;
- long nTimeFactor = 1;
+ TValueType nTimeSignFactor = 1;
+ if('+' == *paValue || '-' == *paValue) {
+ if('-' == *paValue) {
+ nTimeSignFactor = -1;
+ }
+ paValue++;
+ nRetVal++;
+ }
+ TValueType nTimeFactor = 1;
bool bEnd = false;
- do{
- long nBuf = forte::core::util::strtol(paValue, &pcEnd, 10);
- switch (tolower(*pcEnd)){
+ do {
+ TValueType nBuf = forte::core::util::strtol(paValue, &pcEnd, 10);
+ switch(tolower(*pcEnd)){
case 'd':
- nTimeFactor = 86400000;
+ nTimeFactor = 24 * 60 * 60 * cgForteTimeBaseUnitsPerSecond;
break;
case 'h':
- nTimeFactor = 3600000;
+ nTimeFactor = 60 * 60 * cgForteTimeBaseUnitsPerSecond;
break;
case 'm':
- if('s' == *(pcEnd + 1) || 'S' == *(pcEnd + 1)){
- nTimeFactor = 1;
+ if('s' == tolower(*(pcEnd + 1))) {
+ nTimeFactor = cgForteTimeBaseUnitsPerSecond / forte::core::constants::cMillisecondsPerSecond;
++pcEnd;
- }
- else{
- nTimeFactor = 60000;
+ } else {
+ nTimeFactor = 60 * cgForteTimeBaseUnitsPerSecond;
}
break;
-
+ case 'n':
+ if('s' == tolower(*(pcEnd + 1))) {
+ nTimeFactor = cgForteTimeBaseUnitsPerSecond / forte::core::constants::cNanosecondsPerSecond;
+ } else {
+ bEnd = true;
+ }
+ break;
case 's':
- nTimeFactor = 1000;
+ nTimeFactor = cgForteTimeBaseUnitsPerSecond;
+ break;
+ case 'u':
+ if('s' == tolower(*(pcEnd + 1))) {
+ nTimeFactor = cgForteTimeBaseUnitsPerSecond / forte::core::constants::cMicrosecondsPerSecond;
+ } else {
+ bEnd = true;
+ }
break;
case '_':
//ignore leading underscores
break;
default:
- if(paValue == pcEnd){
+ if(paValue == pcEnd) {
//we couldn't parse anything
return -1;
}
@@ -83,57 +104,54 @@
break;
}
nRetVal += static_cast<int>(pcEnd - paValue);
- if(!bEnd){
+ if(!bEnd) {
++nRetVal;
}
paValue = pcEnd + 1;
- nIntVal += (nBuf * nTimeFactor);
+ nIntVal += (nBuf * nTimeFactor * nTimeSignFactor);
} while(('\0' != *paValue) && (!bEnd));
- }
- else{
+ } else {
return -1;
}
- }
- else{
+ } else {
nIntVal = forte::core::util::strtol(paValue, &pcEnd, 10);
nRetVal = static_cast<int>(pcEnd - paValue);
}
- //the intval is represented in ms
- setFromMiliSeconds(nIntVal);
+ *this = nIntVal;
return nRetVal;
}
-int CIEC_TIME::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_TIME::toString(char* paValue, size_t paBufferSize) const {
int nRetVal = -1;
- if(paBufferSize > 4){
+ if(paBufferSize > 4) {
#ifdef FORTE_USE_64BIT_DATATYPES
- CIEC_LINT timeVal(getInMiliSeconds());
-#else
- CIEC_DINT timeVal(getInMiliSeconds());
-#endif
+ CIEC_LINT timeVal(getInMilliSeconds());
+#else //FORTE_USE_64BIT_DATATYPES
+ CIEC_DINT timeVal(getInMilliSeconds());
+#endif //FORTE_USE_64BIT_DATATYPES
nRetVal = timeVal.toString(paValue + 2, paBufferSize - 4);
- if(-1 != nRetVal){
+ if(-1 != nRetVal) {
paValue[0] = 'T';
paValue[1] = '#';
nRetVal += 2;
timeVal = getInMicroSeconds();
timeVal = timeVal % 1000; //we only want the microseconds
- if(0 != timeVal){
+ if(0 != timeVal) {
//If we have a microsecond value add it to the literal
paValue[nRetVal] = '.';
++nRetVal;
- if(timeVal < 100){
+ if(timeVal < 100) {
paValue[nRetVal] = '0';
++nRetVal;
- if(timeVal < 10){
+ if(timeVal < 10) {
paValue[nRetVal] = '0';
++nRetVal;
}
}
int size = timeVal.toString(paValue + nRetVal, paBufferSize - nRetVal);
- if(-1 == size){
+ if(-1 == size) {
return size;
}
nRetVal += size;
@@ -148,46 +166,51 @@
}
CIEC_TIME::TValueType CIEC_TIME::getInSeconds() const {
- return (TValueType) *this / FORTE_TIME_BASE_UNITS_PER_SECOND;
+ return static_cast<TValueType>(*this) / static_cast<TValueType>(cgForteTimeBaseUnitsPerSecond);
}
-CIEC_TIME::TValueType CIEC_TIME::getInMiliSeconds() const{
- TValueType nRetVal;
- #if MILISECONDS_PER_SECOND < FORTE_TIME_BASE_UNITS_PER_SECOND
- nRetVal = (TValueType) *this / (FORTE_TIME_BASE_UNITS_PER_SECOND / MILISECONDS_PER_SECOND);
- #else
- nRetVal = (TValueType) *this * (MILISECONDS_PER_SECOND / FORTE_TIME_BASE_UNITS_PER_SECOND);
- #endif
- return nRetVal;
+CIEC_TIME::TValueType CIEC_TIME::getInMilliSeconds() const {
+ return
+ (forte::core::constants::cMillisecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ static_cast<TValueType>(*this) / (static_cast<TValueType>(cgForteTimeBaseUnitsPerSecond) / forte::core::constants::cMillisecondsPerSecond) :
+ static_cast<TValueType>(*this) * (forte::core::constants::cMillisecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
}
-CIEC_TIME::TValueType CIEC_TIME::getInMicroSeconds() const{
- TValueType nRetVal;
- #if MICROSECONDS_PER_SECOND < FORTE_TIME_BASE_UNITS_PER_SECOND
- nRetVal = (TValueType) *this / (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000000);
- #else
- nRetVal = (TValueType) *this * (MICROSECONDS_PER_SECOND / FORTE_TIME_BASE_UNITS_PER_SECOND);
- #endif
- //fprintf(stderr,"time us: %lld\n",nRetVal);
- return nRetVal;
+CIEC_TIME::TValueType CIEC_TIME::getInMicroSeconds() const {
+ return
+ (forte::core::constants::cMicrosecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ static_cast<TValueType>(*this) / (static_cast<TValueType>(cgForteTimeBaseUnitsPerSecond) / forte::core::constants::cMicrosecondsPerSecond) :
+ static_cast<TValueType>(*this) * (forte::core::constants::cMicrosecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
}
-void CIEC_TIME::setFromSeconds(TValueType paValue){
- *this = paValue * FORTE_TIME_BASE_UNITS_PER_SECOND;
+CIEC_TIME::TValueType CIEC_TIME::getInNanoSeconds() const {
+ return
+ (forte::core::constants::cNanosecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ static_cast<TValueType>(*this) / (static_cast<TValueType>(cgForteTimeBaseUnitsPerSecond) / forte::core::constants::cNanosecondsPerSecond) :
+ static_cast<TValueType>(*this) * (forte::core::constants::cNanosecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
}
-void CIEC_TIME::setFromMiliSeconds(TValueType paValue){
- #if MILISECONDS_PER_SECOND < FORTE_TIME_BASE_UNITS_PER_SECOND
- *this = paValue * (FORTE_TIME_BASE_UNITS_PER_SECOND / MILISECONDS_PER_SECOND);
- #else
- *this = paValue / (MILISECONDS_PER_SECOND / FORTE_TIME_BASE_UNITS_PER_SECOND);
- #endif
+void CIEC_TIME::setFromSeconds(TValueType paValue) {
+ *this = paValue * cgForteTimeBaseUnitsPerSecond;
}
-void CIEC_TIME::setFromMicroSeconds(TValueType paValue){
- #if MICROSECONDS_PER_SECOND < FORTE_TIME_BASE_UNITS_PER_SECOND
- *this = paValue * (FORTE_TIME_BASE_UNITS_PER_SECOND / MICROSECONDS_PER_SECOND);
- #else
- *this = paValue / (MICROSECONDS_PER_SECOND / FORTE_TIME_BASE_UNITS_PER_SECOND);
- #endif
+void CIEC_TIME::setFromMilliSeconds(TValueType paValue) {
+ *this =
+ (forte::core::constants::cMillisecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ paValue * (cgForteTimeBaseUnitsPerSecond / forte::core::constants::cMillisecondsPerSecond) :
+ paValue / (forte::core::constants::cMillisecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
+}
+
+void CIEC_TIME::setFromMicroSeconds(TValueType paValue) {
+ *this =
+ (forte::core::constants::cMicrosecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ paValue * (cgForteTimeBaseUnitsPerSecond / forte::core::constants::cMicrosecondsPerSecond) :
+ paValue / (forte::core::constants::cMicrosecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
+}
+
+void CIEC_TIME::setFromNanoSeconds(TValueType paValue) {
+ *this =
+ (forte::core::constants::cNanosecondsPerSecond < cgForteTimeBaseUnitsPerSecond) ?
+ paValue * (cgForteTimeBaseUnitsPerSecond / forte::core::constants::cNanosecondsPerSecond) :
+ paValue / (forte::core::constants::cNanosecondsPerSecond / cgForteTimeBaseUnitsPerSecond);
}
diff --git a/src/core/datatypes/forte_time.h b/src/core/datatypes/forte_time.h
index 2f8f68d..d1a5f78 100644
--- a/src/core/datatypes/forte_time.h
+++ b/src/core/datatypes/forte_time.h
@@ -1,14 +1,18 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN; 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
* Monika Wenger, Ingo Hegny, Martin Melik Merkumians,
* - initial implementation and rework communication infrastructure
+ * Martin Melik-Merkumians - added getInNanoSeconds, setFromNanoSeconds,
+ * changed defines to constants, added literal parsing for micro and
+ * nanoseconds
*******************************************************************************/
#ifndef _FORTE_TIME_H_
#define _FORTE_TIME_H_
@@ -95,15 +99,17 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
TValueType getInSeconds() const;
- TValueType getInMiliSeconds() const;
+ TValueType getInMilliSeconds() const;
TValueType getInMicroSeconds() const;
+ TValueType getInNanoSeconds() const;
void setFromSeconds(TValueType paValue);
- void setFromMiliSeconds(TValueType paValue);
+ void setFromMilliSeconds(TValueType paValue);
void setFromMicroSeconds(TValueType paValue);
+ void setFromNanoSeconds(TValueType paValue);
};
#endif /*_MTIME_H_*/
diff --git a/src/core/datatypes/forte_time_of_day.cpp b/src/core/datatypes/forte_time_of_day.cpp
index b99dd56..1e09577 100644
--- a/src/core/datatypes/forte_time_of_day.cpp
+++ b/src/core/datatypes/forte_time_of_day.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
@@ -63,13 +65,14 @@
++nNums;
}
- if(nNums < 3){
- for (unsigned int i=nNums; i < 3; ++i)
+ if(nNums < 3) {
+ for(unsigned int i = nNums; i < 3; ++i) {
msec *= 10;
- }
- else{
- for (unsigned int i = 0; i < (nNums - 3); ++i)
+ }
+ } else {
+ for(unsigned int i = 0; i < (nNums - 3); ++i) {
msec /= 10;
+ }
}
}
}
@@ -89,7 +92,7 @@
return static_cast<int>(acBuffer - paValue);
}
-int CIEC_TIME_OF_DAY::toString(char* paValue, unsigned int paBufferSize) const{
+int CIEC_TIME_OF_DAY::toString(char* paValue, size_t paBufferSize) const {
TForteUInt64 ntoStingBuffer = getTUINT64();
time_t t = static_cast<time_t>(ntoStingBuffer / 1000);
@@ -98,7 +101,7 @@
(int) ((t % 3600) / 60),
(int) (t % 60),
(int) (ntoStingBuffer % 1000));
- if((nRetVal < -1) || (nRetVal >= (int) paBufferSize)){
+ if((nRetVal < -1) || (nRetVal >= static_cast<int>(paBufferSize))) {
nRetVal = -1;
}
return nRetVal;
diff --git a/src/core/datatypes/forte_time_of_day.h b/src/core/datatypes/forte_time_of_day.h
index 2051147..54f5fe1 100644
--- a/src/core/datatypes/forte_time_of_day.h
+++ b/src/core/datatypes/forte_time_of_day.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians,
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2008 - 2013 nxtControl GmbH, ACIN, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians,
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_TOD_H_
#define _FORTE_TOD_H_
@@ -108,14 +110,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* paValue, unsigned int paBufferSize) const;
-
- /*! \brief Set the variable to current time
- */
- void setCurrentTime(){
- setTUINT64(forte_time(0) * 1000ULL);
- }
- ;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
};
#endif /* #ifdef FORTE_USE_64BIT_DATATYPES */
diff --git a/src/core/datatypes/forte_udint.cpp b/src/core/datatypes/forte_udint.cpp
index 4f60ce9..a0a729d 100644
--- a/src/core/datatypes/forte_udint.cpp
+++ b/src/core/datatypes/forte_udint.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Rene Smodic, Ingo Hegny,
- * Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Rene Smodic, Ingo Hegny,
+ * Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_udint.h"
DEFINE_FIRMWARE_DATATYPE(UDINT, g_nStringIdUDINT)
diff --git a/src/core/datatypes/forte_udint.h b/src/core/datatypes/forte_udint.h
index 919d9a5..e87575e 100644
--- a/src/core/datatypes/forte_udint.h
+++ b/src/core/datatypes/forte_udint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/core/datatypes/forte_uint.cpp b/src/core/datatypes/forte_uint.cpp
index 974ae34..2a81bea 100644
--- a/src/core/datatypes/forte_uint.cpp
+++ b/src/core/datatypes/forte_uint.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_uint.h"
DEFINE_FIRMWARE_DATATYPE(UINT, g_nStringIdUINT)
diff --git a/src/core/datatypes/forte_uint.h b/src/core/datatypes/forte_uint.h
index ae95088..ae19823 100644
--- a/src/core/datatypes/forte_uint.h
+++ b/src/core/datatypes/forte_uint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/core/datatypes/forte_ulint.cpp b/src/core/datatypes/forte_ulint.cpp
index 3ec2867..13b1fe9 100644
--- a/src/core/datatypes/forte_ulint.cpp
+++ b/src/core/datatypes/forte_ulint.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2009 - 2013 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_ulint.h"
#ifdef FORTE_USE_64BIT_DATATYPES
diff --git a/src/core/datatypes/forte_ulint.h b/src/core/datatypes/forte_ulint.h
index c36ca1c..bff4277 100644
--- a/src/core/datatypes/forte_ulint.h
+++ b/src/core/datatypes/forte_ulint.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_ULINT_H_
#define _FORTE_ULINT_H_
diff --git a/src/core/datatypes/forte_usint.cpp b/src/core/datatypes/forte_usint.cpp
index e96b521..0824d40 100644
--- a/src/core/datatypes/forte_usint.cpp
+++ b/src/core/datatypes/forte_usint.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_usint.h"
DEFINE_FIRMWARE_DATATYPE(USINT, g_nStringIdUSINT)
diff --git a/src/core/datatypes/forte_usint.h b/src/core/datatypes/forte_usint.h
index 8611606..3d29c38 100644
--- a/src/core/datatypes/forte_usint.h
+++ b/src/core/datatypes/forte_usint.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
- * Ingo Hegny, Monika Wenger,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer,
+ * Ingo Hegny, Monika Wenger,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FORTE_USINT_H_
#define _FORTE_USINT_H_
diff --git a/src/core/datatypes/forte_word.cpp b/src/core/datatypes/forte_word.cpp
index e48a5e1..648aeb0 100644
--- a/src/core/datatypes/forte_word.cpp
+++ b/src/core/datatypes/forte_word.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Monika Wenger,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "forte_word.h"
DEFINE_FIRMWARE_DATATYPE(WORD, g_nStringIdWORD)
diff --git a/src/core/datatypes/forte_word.h b/src/core/datatypes/forte_word.h
index 2c00858..b2399ab 100644
--- a/src/core/datatypes/forte_word.h
+++ b/src/core/datatypes/forte_word.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/core/datatypes/forte_wstring.cpp b/src/core/datatypes/forte_wstring.cpp
index 3943609..236353a 100644
--- a/src/core/datatypes/forte_wstring.cpp
+++ b/src/core/datatypes/forte_wstring.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, nxtControl GmbH, fortiss GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Stanislav Meduna
@@ -36,8 +37,9 @@
// Check the BOM, default to big endian
nRes = CUnicodeUtilities::parseUTF16Codepoint(pa_pacBuffer, nCodepoint, false);
- if(nRes < 0)
+ if(nRes < 0) {
return false;
+ }
if(nRes == 2){
if(nCodepoint == CUnicodeUtilities::scm_unBOMMarkerSwapped){
bLittleEndian = true;
@@ -56,23 +58,27 @@
unsigned int nNeededLength = 0;
while(i < nRemLen){
nRes = CUnicodeUtilities::parseUTF16Codepoint(pRunner, nCodepoint, bLittleEndian);
- if(nRes < 0 || nRes + i > nRemLen)
+ if(nRes < 0 || nRes + i > nRemLen) {
return false;
+ }
i += nRes;
pRunner += nRes;
nRes = CUnicodeUtilities::encodeUTF8Codepoint(0, 0, nCodepoint);
- if(nRes < 0)
+ if(nRes < 0) {
return false;
+ }
nNeededLength += nRes;
}
- if(nNeededLength > scm_unMaxStringLen)
+ if(nNeededLength > scm_unMaxStringLen) {
return false;
+ }
// Reserve and encode
reserve(static_cast<TForteUInt16>(nNeededLength));
- if(getGenData() == 0)
+ if(getGenData() == 0) {
return false;
+ }
TForteByte *pEncRunner = (TForteByte *) getValue();
TForteByte *pDataEnd = pEncRunner + nNeededLength;
@@ -102,24 +108,28 @@
while(i < nRemLen){
nRes = CUnicodeUtilities::parseUTF8Codepoint(pRunner, nCodepoint);
- if(nRes < 0 || nRes + i > nRemLen)
+ if(nRes < 0 || nRes + i > nRemLen) {
return -1;
+ }
i += nRes;
pRunner += nRes;
// Skip the BOM if present
if(nCodepoint != CUnicodeUtilities::scm_unBOMMarker){
nRes = CUnicodeUtilities::encodeUTF16Codepoint(0, 0, nCodepoint, false);
- if(nRes < 0)
+ if(nRes < 0) {
return -1;
+ }
nNeededLength += nRes;
}
}
- if(pa_pacBuffer == 0)
+ if(pa_pacBuffer == 0) {
return nNeededLength;
+ }
- if(nNeededLength > pa_nBufferSize)
+ if(nNeededLength > pa_nBufferSize) {
return -1;
+ }
TForteByte *pEncRunner = pa_pacBuffer;
TForteByte *pDataEnd = pa_pacBuffer + nNeededLength;
@@ -129,14 +139,16 @@
i = 0;
while(i < nRemLen){
nRes = CUnicodeUtilities::parseUTF8Codepoint(pRunner, nCodepoint);
- if(nRes < 0 || nRes + i > nRemLen)
+ if(nRes < 0 || nRes + i > nRemLen) {
return -1;
+ }
i += nRes;
pRunner += nRes;
if(nCodepoint != CUnicodeUtilities::scm_unBOMMarker){
nRes = CUnicodeUtilities::encodeUTF16Codepoint(pEncRunner, static_cast<unsigned int>(pDataEnd - pEncRunner), nCodepoint, false);
- if(nRes < 0)
+ if(nRes < 0) {
return -1;
+ }
pEncRunner += nRes;
}
}
@@ -156,8 +168,8 @@
return (-1 == nUTF8Result) ? -1 : (nRetVal + nUTF8Result);
}
-int CIEC_WSTRING::toString(char* pa_acValue, unsigned int pa_nBufferSize) const{
- return toUTF8(pa_acValue, pa_nBufferSize, true);
+int CIEC_WSTRING::toString(char* paValue, size_t paBufferSize) const {
+ return toUTF8(paValue, paBufferSize, true);
}
int CIEC_WSTRING::fromUTF8(const char *pa_pacValue, int pa_nLen, bool pa_bUnescape){
@@ -212,13 +224,16 @@
int nRes;
nRes = CUnicodeUtilities::parseUTF8Codepoint(pRunner, nCodepoint);
pRunner += nRes;
- if(nCodepoint == CUnicodeUtilities::scm_unBOMMarker)
+ if(nCodepoint == CUnicodeUtilities::scm_unBOMMarker) {
continue;
- if(nCodepoint >= 0x10000)
+ }
+ if(nCodepoint >= 0x10000) {
nCodepoint = '?';
+ }
nRes = CUnicodeUtilities::encodeUTF8Codepoint(pEncRunner, static_cast<unsigned int>(nSrcCappedLength - (pEncRunner - pEncBuffer)), nCodepoint);
- if(nRes < 1)
+ if(nRes < 1) {
break;
+ }
pEncRunner += nRes;
}
@@ -236,18 +251,19 @@
return nSrcLen;
}
-int CIEC_WSTRING::toUTF8(char* pa_pacBuffer, unsigned int pa_nBufferSize, bool pa_bEscape) const{
- if((TForteUInt32) length() + (pa_bEscape ? 2 : 0) + 1 > pa_nBufferSize)
+int CIEC_WSTRING::toUTF8(char* paBuffer, size_t paBufferSize, bool paEscape) const {
+ if((TForteUInt32) length() + (paEscape ? 2 : 0) + 1 > paBufferSize) {
return -1;
+ }
- if(!pa_bEscape){
- memcpy(pa_pacBuffer, getValue(), length() + 1);
+ if(!paEscape){
+ memcpy(paBuffer, getValue(), length() + 1);
return length();
}
const char *pRunner;
- char *pEncRunner = pa_pacBuffer;
- char *pDataEnd = pa_pacBuffer + pa_nBufferSize;
+ char *pEncRunner = paBuffer;
+ char *pDataEnd = paBuffer + paBufferSize;
*pEncRunner++ = '\"';
@@ -255,25 +271,27 @@
while(*pRunner){
int nRes = dollarEscapeChar(pEncRunner, *pRunner, static_cast<unsigned int>(pDataEnd - pEncRunner));
- if(nRes < 0)
+ if(nRes < 0) {
return -1;
+ }
pEncRunner += nRes;
++pRunner;
}
- if(pDataEnd - pEncRunner < 2)
+ if(pDataEnd - pEncRunner < 2) {
return -1;
+ }
*pEncRunner++ = '\"';
*pEncRunner = '\0';
- return static_cast<int>(pEncRunner - pa_pacBuffer);
+ return static_cast<int>(pEncRunner - paBuffer);
}
-unsigned int CIEC_WSTRING::getToStringBufferSize() const{
+size_t CIEC_WSTRING::getToStringBufferSize() const {
const char * const stringValue = getValue();
- unsigned int neededBufferSize = 0;
+ size_t neededBufferSize = 0;
for(size_t i = 0; i < length(); ++i){
if(isprint(static_cast<unsigned char>(stringValue[i])) && '$' != stringValue[i] && '\"' != stringValue[i]){
++neededBufferSize;
diff --git a/src/core/datatypes/forte_wstring.h b/src/core/datatypes/forte_wstring.h
index 4f23d27..34229fb 100644
--- a/src/core/datatypes/forte_wstring.h
+++ b/src/core/datatypes/forte_wstring.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 Profactor GmbH, ACIN, nxtControl GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Ingomar Müller, Alois Zoitl, Ingo Hegny, Stanislav Meduna
@@ -71,7 +72,7 @@
* \return number of bytes used in the buffer
* -1 on error
*/
- virtual int toUTF8(char* pa_pacBuffer, unsigned int pa_nBufferSize, bool pa_bEscape) const;
+ virtual int toUTF8(char* paBuffer, size_t paBufferSize, bool paEscape) const;
/*! \brief Converts a UTF-16 encoded string to a WSTRING (UTF-8 internally)
*
@@ -131,7 +132,7 @@
* \return number of bytes used in the buffer without trailing 0x00
* -1 on error
*/
- virtual int toString(char* pa_acValue, unsigned int pa_nBufferSize) const;
+ virtual int toString(char* paValue, size_t paBufferSize) const;
/*! \brief Returns the amount of bytes needed to create the IEC 61131 literal string
*
@@ -142,7 +143,7 @@
*
* \return Needed buffer size for literal string without type delarator e.g., WSTRING#
*/
- virtual unsigned int getToStringBufferSize() const;
+ virtual size_t getToStringBufferSize() const;
protected:
diff --git a/src/core/datatypes/unicode_utils.cpp b/src/core/datatypes/unicode_utils.cpp
index 080e61d..6b7a54b 100644
--- a/src/core/datatypes/unicode_utils.cpp
+++ b/src/core/datatypes/unicode_utils.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011 nxtControl GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Ingo Hegny, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 nxtControl GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Ingo Hegny, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "unicode_utils.h"
#include <string.h>
@@ -29,28 +31,31 @@
pa_rValue = (pa_pacCodepoint[0] & 0x7f);
return 1;
} else if ((pa_pacCodepoint[0] & 0xe0) == 0xc0) {
- if ((pa_pacCodepoint[1] & 0xc0) != 0x80)
+ if((pa_pacCodepoint[1] & 0xc0) != 0x80) {
return -1;
+ }
pa_rValue = ((pa_pacCodepoint[0] & 0x1f) << 6) |
- ((pa_pacCodepoint[1] & 0x3f) );
+ (pa_pacCodepoint[1] & 0x3f);
return 2;
} else if ((pa_pacCodepoint[0] & 0xf0) == 0xe0) {
if ((pa_pacCodepoint[1] & 0xc0) != 0x80 ||
- (pa_pacCodepoint[2] & 0xc0) != 0x80)
+ (pa_pacCodepoint[2] & 0xc0) != 0x80) {
return -1;
+ }
pa_rValue = ((pa_pacCodepoint[0] & 0x0f) << 12) |
((pa_pacCodepoint[1] & 0x3f) << 6) |
- ((pa_pacCodepoint[2] & 0x3f) );
+ (pa_pacCodepoint[2] & 0x3f);
return 3;
} else if ((pa_pacCodepoint[0] & 0xf8) == 0xf0) {
if ((pa_pacCodepoint[1] & 0xc0) != 0x80 ||
(pa_pacCodepoint[2] & 0xc0) != 0x80 ||
- (pa_pacCodepoint[3] & 0xc0) != 0x80)
+ (pa_pacCodepoint[3] & 0xc0) != 0x80) {
return -1;
+ }
pa_rValue = ((pa_pacCodepoint[0] & 0x07) << 18) |
((pa_pacCodepoint[1] & 0x3f) << 12) |
((pa_pacCodepoint[2] & 0x3f) << 6) |
- ((pa_pacCodepoint[3] & 0x3f) );
+ (pa_pacCodepoint[3] & 0x3f);
return 4;
}
@@ -61,23 +66,26 @@
int CUnicodeUtilities::encodeUTF8Codepoint(TForteByte *pa_pacCodepoint, unsigned int pa_nBufferSize, TForteUInt32 pa_nValue) {
if (pa_nValue < 0x80) {
if (pa_pacCodepoint) {
- if (pa_nBufferSize < 1)
+ if(pa_nBufferSize < 1) {
return -1;
+ }
pa_pacCodepoint[0] = (TForteByte) pa_nValue;
}
return 1;
} else if (pa_nValue < 0x800) {
if (pa_pacCodepoint) {
- if (pa_nBufferSize < 2)
+ if(pa_nBufferSize < 2) {
return -1;
+ }
pa_pacCodepoint[0] = (TForteByte) (0xc0 | ((pa_nValue >> 6) & 0x1f));
pa_pacCodepoint[1] = (TForteByte) (0x80 | ((pa_nValue ) & 0x3f));
}
return 2;
} else if (pa_nValue < 0x10000) {
if (pa_pacCodepoint) {
- if (pa_nBufferSize < 3)
+ if(pa_nBufferSize < 3) {
return -1;
+ }
pa_pacCodepoint[0] = (TForteByte) (0xe0 | ((pa_nValue >> 12) & 0x1f));
pa_pacCodepoint[1] = (TForteByte) (0x80 | ((pa_nValue >> 6) & 0x3f));
pa_pacCodepoint[2] = (TForteByte) (0x80 | ((pa_nValue ) & 0x3f));
@@ -85,8 +93,9 @@
return 3;
} else if (pa_nValue < 0x110000) {
if (pa_pacCodepoint) {
- if (pa_nBufferSize < 4)
+ if(pa_nBufferSize < 4) {
return -1;
+ }
pa_pacCodepoint[0] = (TForteByte) (0xf0 | ((pa_nValue >> 18) & 0x1f));
pa_pacCodepoint[1] = (TForteByte) (0x80 | ((pa_nValue >> 12) & 0x3f));
pa_pacCodepoint[2] = (TForteByte) (0x80 | ((pa_nValue >> 6) & 0x3f));
@@ -117,8 +126,9 @@
(pa_pacCodepoint[2] | (pa_pacCodepoint[3] << 8)) :
((pa_pacCodepoint[2] << 8) | pa_pacCodepoint[3]));
- if ((nSecondWord & 0xfc00) != 0xdc00)
+ if((nSecondWord & 0xfc00) != 0xdc00) {
return -1;
+ }
pa_rValue = 0x10000 + (((nFirstWord & 0x3ff) << 10) | (nSecondWord & 0x3ff));
@@ -132,13 +142,15 @@
int CUnicodeUtilities::encodeUTF16Codepoint(TForteByte *pa_pacCodepoint, unsigned int pa_nBufferSize, TForteUInt32 pa_nValue, bool pa_bLittleEndian) {
- if ((pa_nValue >= 0xd800 && pa_nValue < 0xe000) || pa_nValue >= 0x110000)
+ if((pa_nValue >= 0xd800 && pa_nValue < 0xe000) || pa_nValue >= 0x110000) {
return -1;
+ }
if (pa_nValue < 0x10000) {
if (pa_pacCodepoint) {
- if (pa_nBufferSize < 2)
+ if(pa_nBufferSize < 2) {
return -1;
+ }
if (pa_bLittleEndian) {
pa_pacCodepoint[0] = (TForteByte) ((pa_nValue ) & 0xff);
pa_pacCodepoint[1] = (TForteByte) ((pa_nValue >> 8) & 0xff);
@@ -154,8 +166,9 @@
TForteUInt16 nHighSurrogate = static_cast<TForteUInt16>(0xd800 | ((nVal >> 10) & 0x3ff));
TForteUInt16 nLowSurrogate = static_cast<TForteUInt16>(0xdc00 | ((nVal ) & 0x3ff));
- if (pa_nBufferSize < 4)
+ if(pa_nBufferSize < 4) {
return -1;
+ }
if (pa_bLittleEndian) {
pa_pacCodepoint[0] = (TForteByte) ((nHighSurrogate ) & 0xff);
@@ -186,13 +199,14 @@
if (nRes < 0 || nRes + i > nRemLen) {
return -1;
}
- if (nCodepoint != CUnicodeUtilities::scm_unBOMMarker) {
- if (nCodepoint >= 0x10000)
+ if(nCodepoint != CUnicodeUtilities::scm_unBOMMarker) {
+ if(nCodepoint >= 0x10000) {
pa_rnMaxWidth = 21;
- else if (nCodepoint >= 0x100 && pa_rnMaxWidth < 16)
+ } else if(nCodepoint >= 0x100 && pa_rnMaxWidth < 16) {
pa_rnMaxWidth = 16;
- else if (nCodepoint >= 0x80 && pa_rnMaxWidth < 8)
+ } else if(nCodepoint >= 0x80 && pa_rnMaxWidth < 8) {
pa_rnMaxWidth = 8;
+ }
}
i += nRes;
diff --git a/src/core/datatypes/unicode_utils.h b/src/core/datatypes/unicode_utils.h
index d56ff28..0bd78f0 100644
--- a/src/core/datatypes/unicode_utils.h
+++ b/src/core/datatypes/unicode_utils.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2011 nxtControl GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stanislav Meduna, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2011 nxtControl GmbH, ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stanislav Meduna, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _UNICODE_UTILS_H_
#define _UNICODE_UTILS_H_
diff --git a/src/core/devexec.cpp b/src/core/devexec.cpp
index 8ea6a98..6dd071c 100644
--- a/src/core/devexec.cpp
+++ b/src/core/devexec.cpp
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2012 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2012 ACIN, Profactor GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "devexec.h"
#include "esfb.h"
#include "ecet.h"
@@ -16,24 +17,17 @@
#include "../arch/timerha.h"
#include "../arch/devlog.h"
-CDeviceExecution::CDeviceExecution(){
- memset(mRegisteredEventHandlers, 0, sizeof(SEventHandlerElement) * cg_unNumberOfHandlers);
+CDeviceExecution::CDeviceExecution() {
+ memset(mRegisteredEventHandlers, 0, sizeof(SEventHandlerElement) * cg_unNumberOfHandlers);
CDeviceExecution::createHandlers(*this);
getTimer().enableHandler();
- if(0 == CTimerHandler::smFORTETimer){
- CTimerHandler::smFORTETimer = &getTimer(); //used for develog, CIEC_TIME() and in Modbus
- }
}
-CDeviceExecution::~CDeviceExecution(){
- if(CTimerHandler::smFORTETimer == (&getTimer())){
- CTimerHandler::smFORTETimer = 0;
- }
-
- for(size_t i = 0; i < cg_unNumberOfHandlers; i++){
- if(0 != mRegisteredEventHandlers[i].mHandler){ //for the test cases, only the timer handler is created
+CDeviceExecution::~CDeviceExecution() {
+ for(size_t i = 0; i < cg_unNumberOfHandlers; i++) {
+ if(0 != mRegisteredEventHandlers[i].mHandler) { //for the test cases, only the timer handler is created
mRegisteredEventHandlers[i].mHandler->disableHandler();
delete mRegisteredEventHandlers[i].mHandler;
mRegisteredEventHandlers[i].mHandler = 0;
@@ -41,24 +35,32 @@
}
}
-void CDeviceExecution::startNewEventChain(CEventSourceFB *pa_poECStartFB){
+void CDeviceExecution::startNewEventChain(CEventSourceFB *paECStartFB) {
// maybe in the future here has to be added something for handling priority adaption and stuff like this.
- if(0 != pa_poECStartFB){
- CEventChainExecutionThread *poEventChainExecutor = pa_poECStartFB->getEventChainExecutor();
- if(0 != poEventChainExecutor){
- poEventChainExecutor->startEventChain(pa_poECStartFB->getEventSourceEventEntry());
- }else{
+ if(0 != paECStartFB) {
+ CEventChainExecutionThread *poEventChainExecutor = paECStartFB->getEventChainExecutor();
+ if(0 != poEventChainExecutor) {
+ poEventChainExecutor->startEventChain(paECStartFB->getEventSourceEventEntry());
+ } else {
DEVLOG_ERROR("[CDeviceExecution] Couldn't start new event chain because the event has no CEventChainExecutionThread");
}
- }else{
+ } else {
DEVLOG_ERROR("[CDeviceExecution] Couldn't start new event chain because the event source was null");
}
}
-CExternalEventHandler* CDeviceExecution::getExtEvHandler(size_t paIdentifer) const{
+CExternalEventHandler* CDeviceExecution::getExtEvHandler(size_t paIdentifer) const {
return mRegisteredEventHandlers[paIdentifer].mHandler;
}
-CTimerHandler& CDeviceExecution::getTimer() const{
+CTimerHandler& CDeviceExecution::getTimer() const {
return *static_cast<CTimerHandler*>(mRegisteredEventHandlers[0].mHandler);
}
+
+void CDeviceExecution::disableHandlers() {
+ for(size_t i = 0; i < cg_unNumberOfHandlers; i++) {
+ if(0 != mRegisteredEventHandlers[i].mHandler) {
+ mRegisteredEventHandlers[i].mHandler->disableHandler();
+ }
+ }
+}
diff --git a/src/core/devexec.h b/src/core/devexec.h
index 05fc0e6..f9b2ced 100644
--- a/src/core/devexec.h
+++ b/src/core/devexec.h
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2011 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2011 ACIN, Profactor GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _DEVEXEC_H
#define _DEVEXEC_H
@@ -21,70 +22,71 @@
#include <forte_config.h>
/**\ingroup CORE
- Handles all the IEC 61499 execution requests and aspects within one device
+ Handles all the IEC 61499 execution requests and aspects within one device
- @author az
-*/
-class CDeviceExecution{
-public:
+ @author az
+ */
+class CDeviceExecution {
+ public:
CDeviceExecution();
~CDeviceExecution();
-/*!\brief Notifies the CExternalEventHandlerManager that one tick in the time has passed by.
- *
- * \param paCurrentTime the current time in ticks since the last start of the runtime.
- */
- void notifyTime(uint_fast64_t ){
+ /*!\brief Notifies the CExternalEventHandlerManager that one tick in the time has passed by.
+ *
+ * \param paCurrentTime the current time in ticks since the last start of the runtime.
+ */
+ void notifyTime(uint_fast64_t) {
}
-/*!\brief an external event occurred at an ES and a new event source is to start.
- *
- * In this function the CDeviceExecution does all means necessary that the new event chain will be executed correctly.
- * \param pa_poECStartFB The start FB of the event chain
- */
- void startNewEventChain(CEventSourceFB *pa_poECStartFB);
-/*!\brief Check if an occurrence of the given event handler is currently allowed.
- *
- * With this function the device execution can disable or enable the notification on external events.
- * Necessary to hold timing constraints. The notifyTime()-function will be used to determine if different external event
- * handlers are to be enabled again.
- * \param pa_nExtEvHandler ID of the external event handler given by the CDeviceExecution on registerExternalEvnetHandler()
- * \return true if the external event handler is allowed to start new event chains.
- */
- bool extEvHandlerIsAllowed(int ){
+ /*!\brief an external event occurred at an ES and a new event source is to start.
+ *
+ * In this function the CDeviceExecution does all means necessary that the new event chain will be executed correctly.
+ * \param paECStartFB The start FB of the event chain
+ */
+ void startNewEventChain(CEventSourceFB *paECStartFB);
+ /*!\brief Check if an occurrence of the given event handler is currently allowed.
+ *
+ * With this function the device execution can disable or enable the notification on external events.
+ * Necessary to hold timing constraints. The notifyTime()-function will be used to determine if different external event
+ * handlers are to be enabled again.
+ * \param pa_nExtEvHandler ID of the external event handler given by the CDeviceExecution on registerExternalEvnetHandler()
+ * \return true if the external event handler is allowed to start new event chains.
+ */
+ bool extEvHandlerIsAllowed(size_t) {
return true;
}
CTimerHandler& getTimer() const;
template<typename T>
- T& getExtEvHandler(){
+ T& getExtEvHandler() {
return static_cast<T&>(*getExtEvHandler(T::mHandlerIdentifier));
}
- bool isExtEvHandlerValid(size_t paIdentifier){
+ bool isExtEvHandlerValid(size_t paIdentifier) {
return (0 != getExtEvHandler(paIdentifier));
}
- protected:
+ void disableHandlers();
+
private:
/*!\brief Structure for holding the information belonging to one external event.
*/
- struct SEventHandlerElement{
- bool mOccured; //!<flag indicating that the external event has occurred between the last invocation.
- CExternalEventHandler *mHandler; //!< pointer to the external event handler instance.
+ struct SEventHandlerElement {
+ bool mOccured; //!<flag indicating that the external event has occurred between the last invocation.
+ CExternalEventHandler *mHandler; //!< pointer to the external event handler instance.
};
CExternalEventHandler* getExtEvHandler(size_t paIdentifer) const;
- static void createHandlers(CDeviceExecution& DeviceExecution);
+ static void createHandlers(CDeviceExecution& paDeviceExecution);
/*!\brief List of currently available external event sources.
- *
- * The element 0 is always the timer event source.
- */
- SEventHandlerElement mRegisteredEventHandlers [ cg_unNumberOfHandlers ];
+ *
+ * The element 0 is always the timer event source.
+ */
+ SEventHandlerElement mRegisteredEventHandlers[cg_unNumberOfHandlers];
};
diff --git a/src/core/device.cpp b/src/core/device.cpp
index cd247cc..ad8df5d 100644
--- a/src/core/device.cpp
+++ b/src/core/device.cpp
@@ -1,32 +1,41 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser, Gerhard Ebenhofer, Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser, Gerhard Ebenhofer, Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "device.h"
#include "if2indco.h"
#include "ecet.h"
#include <string.h>
-EMGMResponse CDevice::executeMGMCommand(forte::core::SManagementCMD &pa_oCommand){
+EMGMResponse CDevice::executeMGMCommand(forte::core::SManagementCMD &paCommand){
EMGMResponse retval = e_INVALID_DST;
- if(CStringDictionary::scm_nInvalidStringId == pa_oCommand.mDestination){
- retval = CResource::executeMGMCommand(pa_oCommand);
+ if(CStringDictionary::scm_nInvalidStringId == paCommand.mDestination){
+ retval = CResource::executeMGMCommand(paCommand);
}
else{
- CResource *res = static_cast<CResource *>(CFBContainer::getFB(pa_oCommand.mDestination));
+ CResource *res = static_cast<CResource *>(CFBContainer::getFB(paCommand.mDestination));
if(0 != res){
- pa_oCommand.mDestination = CStringDictionary::scm_nInvalidStringId;
- retval = res->executeMGMCommand(pa_oCommand);
+ paCommand.mDestination = CStringDictionary::scm_nInvalidStringId;
+ retval = res->executeMGMCommand(paCommand);
}
}
return retval;
}
+
+EMGMResponse CDevice::changeFBExecutionState(EMGMCommandType paCommand){
+ if(cg_nMGM_CMD_Kill == paCommand){
+ mDeviceExecution.disableHandlers();
+ }
+ return CResource::changeFBExecutionState(paCommand);
+}
diff --git a/src/core/device.h b/src/core/device.h
index f369fea..e594bb8 100644
--- a/src/core/device.h
+++ b/src/core/device.h
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser, Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser, Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _DEVICE_H
#define _DEVICE_H
@@ -16,66 +17,77 @@
#include "devexec.h"
/*!\ingroup CORE CDevice represents a device according to IEC 61499. CDevice contains
- - one or more IEC 61499 compliant resources (CResource),
- - a device management (CDeviceAdministrator)
- - a function block execution environment (CFBNExecution)
- - a library (CTypeLib) which administrates the types the 1499 device is
- capable of
- - External event interface for handling interrupts and other external notifications.
- - FORTE-HAL: FORTE Hardware Abstraction Layer
+ - one or more IEC 61499 compliant resources (CResource),
+ - a device management (CDeviceAdministrator)
+ - a function block execution environment (CFBNExecution)
+ - a library (CTypeLib) which administrates the types the 1499 device is
+ capable of
+ - External event interface for handling interrupts and other external notifications.
+ - FORTE-HAL: FORTE Hardware Abstraction Layer
- There are different device type's available (e.g. remote device RMT_DEV)
- for different tasks which have different device configurations
- (resources function blocks) and device parameters.
-*/
-class CDevice : public CResource{
- private:
-/*! \brief
- *
+ There are different device type's available (e.g. remote device RMT_DEV)
+ for different tasks which have different device configurations
+ (resources function blocks) and device parameters.
*/
- CDeviceExecution m_oDeviceExecution;
+class CDevice : public CResource {
+ private:
+ /*! \brief
+ *
+ */
+ CDeviceExecution mDeviceExecution;
protected:
- virtual void executeEvent(int ){};
+ virtual void executeEvent(int) {
+ }
public:
-/*! \brief Sets up all the necessary data and classes necessary for execution.
- *
- */
- CDevice(const SFBInterfaceSpec *pa_pstInterfaceSpec, const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData):
- CResource(pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData),
- m_oDeviceExecution(){
- };
- virtual ~CDevice(){};
+ /*! \brief Sets up all the necessary data and classes necessary for execution.
+ *
+ */
+ CDevice(const SFBInterfaceSpec *pa_pstInterfaceSpec, const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData,
+ TForteByte *pa_acFBVarsData) :
+ CResource(pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData), mDeviceExecution() {
+ }
- virtual CStringDictionary::TStringId getFBTypeId(void) const { return CStringDictionary::scm_nInvalidStringId; };
+ virtual ~CDevice() {
+ }
-/*! \brief Starts to execute FBNs.
- *
- * This function will send a IEC 61499 start command to all existing resources in the device (if any).
- * The function will return after the start. The Forte HAL has to ensure that it is waited till the device
- * finishes its execution.
- * \return 0 on success -1 on error
- */
- virtual int startDevice(void){
+
+ virtual CStringDictionary::TStringId getFBTypeId(void) const {
+ return CStringDictionary::scm_nInvalidStringId;
+ }
+
+
+ /*! \brief Starts to execute FBNs.
+ *
+ * This function will send a IEC 61499 start command to all existing resources in the device (if any).
+ * The function will return after the start. The Forte HAL has to ensure that it is waited till the device
+ * finishes its execution.
+ * \return 0 on success -1 on error
+ */
+ virtual int startDevice(void) {
changeFBExecutionState(cg_nMGM_CMD_Start);
return 1;
- };
-/*!\brief Execute the given management command
- *
- * Evaluates the m_sDestination parameter of the command if empty this class tries to execute the management command if not
- * the referenced resource is called for handling the command.
- * \param pa_oCommand FORTE internal representation of the management command
- * \return response of the MGMCommand execution as defined in IEC 61499
- */
- virtual EMGMResponse executeMGMCommand(forte::core::SManagementCMD &pa_oCommand);
+ }
-//! Retrieve the device execution of this device
- CDeviceExecution &getDeviceExecution(void) {return m_oDeviceExecution; };
+ /*!\brief Execute the given management command
+ *
+ * Evaluates the m_sDestination parameter of the command if empty this class tries to execute the management command if not
+ * the referenced resource is called for handling the command.
+ * \param pa_oCommand FORTE internal representation of the management command
+ * \return response of the MGMCommand execution as defined in IEC 61499
+ */
+ virtual EMGMResponse executeMGMCommand(forte::core::SManagementCMD &paCommand);
- CTimerHandler& getTimer() const{
- return m_oDeviceExecution.getTimer();
+ virtual EMGMResponse changeFBExecutionState(EMGMCommandType paCommand);
+
+ //! Retrieve the device execution of this device
+ CDeviceExecution &getDeviceExecution(void) {
+ return mDeviceExecution;
+ }
+
+ CTimerHandler& getTimer() const {
+ return mDeviceExecution.getTimer();
}
};
diff --git a/src/core/deviceExecutionHandlers.cpp.in b/src/core/deviceExecutionHandlers.cpp.in
index 65238bc..a203248 100644
--- a/src/core/deviceExecutionHandlers.cpp.in
+++ b/src/core/deviceExecutionHandlers.cpp.in
@@ -1,17 +1,19 @@
/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral - initial implementation and rework handler infrastructure
- *******************************************************************************/
-
-#include <devexec.h>
+ * Copyright (c) 2017 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework handler infrastructure
+ *******************************************************************************/
#include <timerha.h>
+#include <devexec.h>
+
${HANDLERMANAGER_INCLUDE}
const size_t CTimerHandler::mHandlerIdentifier = 0;
diff --git a/src/core/ecet.cpp b/src/core/ecet.cpp
index 6b776b3..bb51422 100644
--- a/src/core/ecet.cpp
+++ b/src/core/ecet.cpp
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny
- * Micheal Hofmann
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny
+ * Micheal Hofmann
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include <forte_config.h>
#include <fortenew.h>
#include "ecet.h"
diff --git a/src/core/ecet.h b/src/core/ecet.h
index c59e1fa..8db0131 100644
--- a/src/core/ecet.h
+++ b/src/core/ecet.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Gunnar Grabmaier, Thomas Strasser, Rene Smodic, Ingo Hegny
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Gunnar Grabmaier, Thomas Strasser, Rene Smodic, Ingo Hegny
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ECET_H_
#define _ECET_H_
diff --git a/src/core/ecetFactory.cpp b/src/core/ecetFactory.cpp
index ab066dd..4efb905 100644
--- a/src/core/ecetFactory.cpp
+++ b/src/core/ecetFactory.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/esfb.h b/src/core/esfb.h
index 51375cf..08ef26e 100644
--- a/src/core/esfb.h
+++ b/src/core/esfb.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2014 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2014 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _ESFB_H_
#define _ESFB_H_
diff --git a/src/core/event.h b/src/core/event.h
index 4a9c8a9..8ea2a45 100644
--- a/src/core/event.h
+++ b/src/core/event.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Gunnar Grabmaier, Thomas Strasser, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Gunnar Grabmaier, Thomas Strasser, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _EVENT_H_
#define _EVENT_H_
@@ -22,7 +24,7 @@
*/
typedef TForteUInt8 TEventID;
-struct SConnectionPoint;
+class CConnectionPoint;
//!\ingroup CORE Constant for the invalid event input id
const TEventID cg_nInvalidEventID = cg_unInvalidPortId;
@@ -36,7 +38,7 @@
/*!\ingroup CORE \brief Structure to hold the information needed for delivering input events to FBs.
*/
-typedef SConnectionPoint SEventEntry;
+typedef CConnectionPoint SEventEntry;
typedef SEventEntry *TEventEntryPtr;
diff --git a/src/core/eventconn.cpp b/src/core/eventconn.cpp
index 2fbe3ba..ed80437 100644
--- a/src/core/eventconn.cpp
+++ b/src/core/eventconn.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "eventconn.h"
#include "ecet.h"
#include "funcbloc.h"
@@ -25,7 +27,7 @@
TPortId nEIID = paDstFB->getEIID(paDstPortNameId);
if(cg_nInvalidEventID != nEIID){
- retval = CConnection::addDestination(SConnectionPoint(paDstFB, nEIID));
+ retval = CConnection::addDestination(CConnectionPoint(paDstFB, nEIID));
}
return retval;
}
@@ -36,24 +38,20 @@
if(cg_nInvalidEventID != nEOID){
nEOID |= cgInternal2InterfaceMarker;
- retval = CConnection::addDestination(SConnectionPoint(paDstFB, nEOID));
+ retval = CConnection::addDestination(CConnectionPoint(paDstFB, nEOID));
}
return retval;
}
-
-
-#ifndef FORTE_CLASS_0
EMGMResponse CEventConnection::disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId){
EMGMResponse retval = e_NO_SUCH_OBJECT;
TEventID nEIID = paDstFB->getEIID(paDstPortNameId);
if(cg_nInvalidEventID != nEIID){
- retval = CConnection::removeDestination(SConnectionPoint(paDstFB, nEIID));
+ retval = CConnection::removeDestination(CConnectionPoint(paDstFB, nEIID));
}
return retval;
}
-#endif
void CEventConnection::triggerEvent(CEventChainExecutionThread &pa_poExecEnv){
for(TDestinationIdList::Iterator it = mDestinationIds.begin();
diff --git a/src/core/eventconn.h b/src/core/eventconn.h
index 2757375..ef7d19c 100644
--- a/src/core/eventconn.h
+++ b/src/core/eventconn.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Thomas Strasser, Alois Zoitl,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2015 Profactor GmbH, ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Thomas Strasser, Alois Zoitl,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _EVENCONN_H_
#define _EVENCONN_H_
@@ -29,9 +31,7 @@
virtual EMGMResponse connectToCFBInterface(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
-#ifndef FORTE_CLASS_0
virtual EMGMResponse disconnect(CFunctionBlock *paDstFB, CStringDictionary::TStringId paDstPortNameId);
-#endif
/*! \brief Triggers the event connection and all destinations are notified.
*
diff --git a/src/core/extevhan.cpp b/src/core/extevhan.cpp
index dc83d19..842bf6b 100644
--- a/src/core/extevhan.cpp
+++ b/src/core/extevhan.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2005 - 2013 ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "extevhan.h"
#include "../resource.h"
#include "../device.h"
diff --git a/src/core/extevhan.h b/src/core/extevhan.h
index 7a686cb..4eb2eb0 100644
--- a/src/core/extevhan.h
+++ b/src/core/extevhan.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2005 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl
- * - initial implementation and rework communication infrastructure
+ * Copyright (c) 2005 - 2013 ACIN, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl
+ * - initial implementation and rework communication infrastructure
*******************************************************************************/
#ifndef _EXTEVHAN_H_
#define _EXTEVHAN_H_
diff --git a/src/core/fbcontainer.cpp b/src/core/fbcontainer.cpp
index 512e80c..96b69d5 100644
--- a/src/core/fbcontainer.cpp
+++ b/src/core/fbcontainer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 - 2016 fortiss GmbH, 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -180,13 +181,10 @@
CFBContainer *CFBContainer::findOrCreateContainer(CStringDictionary::TStringId paContainerName){
CFBContainer *retVal = getFBContainer(paContainerName);
- if(0 == retVal){
- //the container with the given name does not exist create a new one
- if(0 == getFB(paContainerName)){
- //only create it if there is no FB with the same name.
- retVal = new CFBContainer(paContainerName, this);
- mSubContainers.pushBack(retVal);
- }
+ if(0 == retVal && 0 == getFB(paContainerName)) {
+ //the container with the given name does not exist but only create it if there is no FB with the same name.
+ retVal = new CFBContainer(paContainerName, this);
+ mSubContainers.pushBack(retVal);
}
return retVal;
}
diff --git a/src/core/fbcontainer.h b/src/core/fbcontainer.h
index e3a5d92..5f3ae0c 100644
--- a/src/core/fbcontainer.h
+++ b/src/core/fbcontainer.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2015 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FBCONTAINER_H_
#define _FBCONTAINER_H_
diff --git a/src/core/fmi/CMakeLists.txt b/src/core/fmi/CMakeLists.txt
index d8f41fd..dcfefd7 100644
--- a/src/core/fmi/CMakeLists.txt
+++ b/src/core/fmi/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016,2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral
+# Copyright (c) 2016,2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/core/fmi/comm/CMakeLists.txt b/src/core/fmi/comm/CMakeLists.txt
index 58fbecc..ebe086e 100644
--- a/src/core/fmi/comm/CMakeLists.txt
+++ b/src/core/fmi/comm/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/core/fmi/comm/fmuComLayer.cpp b/src/core/fmi/comm/fmuComLayer.cpp
index e9f39f5..58be3a9 100644
--- a/src/core/fmi/comm/fmuComLayer.cpp
+++ b/src/core/fmi/comm/fmuComLayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/comm/fmuComLayer.h b/src/core/fmi/comm/fmuComLayer.h
index a14e7a1..df55241 100644
--- a/src/core/fmi/comm/fmuComLayer.h
+++ b/src/core/fmi/comm/fmuComLayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/comm/fmuHandler.cpp b/src/core/fmi/comm/fmuHandler.cpp
index bf6e41c..ffe0e0d 100644
--- a/src/core/fmi/comm/fmuHandler.cpp
+++ b/src/core/fmi/comm/fmuHandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/comm/fmuHandler.h b/src/core/fmi/comm/fmuHandler.h
index 1ba363e..3084d91 100644
--- a/src/core/fmi/comm/fmuHandler.h
+++ b/src/core/fmi/comm/fmuHandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/fmiInterface.cpp b/src/core/fmi/fmiInterface.cpp
index f7429a0..0515e42 100644
--- a/src/core/fmi/fmiInterface.cpp
+++ b/src/core/fmi/fmiInterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -14,81 +15,96 @@
fmi2String loggingNames[] = { "logAll", "logCalls", "logError" };
+#define CHECK_REF_AND_VALUE() \
+ if(nvr > 0 && (!vr || !value)) { \
+ LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One or both of the arrays vr[] and value[] were invalid.") \
+ componentInstance->setState(STATE_ERROR); \
+ return fmi2Error; \
+ }
+
+#define CHECK_REF_IN_IO() \
+ if(vr[i] >= componentInstance->getOutputsAndInputs().size()) { \
+ LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1) \
+ componentInstance->setState(STATE_ERROR); \
+ return fmi2Error; \
+ }
+
extern "C" {
fmi2Status functionNotSupported(fmi2Component c, const char *functionName);
void freeInstanceInternal(fmi2Component c);
- const char* fmi2GetTypesPlatform(){
+ const char* fmi2GetTypesPlatform() {
return fmi2TypesPlatform;
}
- const char* fmi2GetVersion(){
+ const char* fmi2GetVersion() {
return fmi2Version;
}
- fmi2Status fmi2SetDebugLogging(fmi2Component c, fmi2Boolean loggingOn, size_t nCategories, const fmi2String categories[]){
+ fmi2Status fmi2SetDebugLogging(fmi2Component c, fmi2Boolean loggingOn, size_t nCategories, const fmi2String categories[]) {
ENTRY_FUNCTION(FMI2_SET_DEBUG_LOGGING)
- for(unsigned int i = 0; i < NUMBER_OF_LOG_CATEGORIES; i++){
+ for(unsigned int i = 0; i < NUMBER_OF_LOG_CATEGORIES; i++) {
componentInstance->getLoggingCategories()[i] = fmi2False;
}
- if(fmi2True == loggingOn){
- if(nCategories > 0){
- for(unsigned int i = 0; i < nCategories; i++){
+ if(fmi2True == loggingOn) {
+ if(nCategories > 0) {
+ for(unsigned int i = 0; i < nCategories; i++) {
fmi2Boolean categoryFound = fmi2False;
- for(unsigned int j = 0; j < NUMBER_OF_LOG_CATEGORIES; j++){
- if(strcmp(loggingNames[j], categories[i]) == 0){
+ for(unsigned int j = 0; j < NUMBER_OF_LOG_CATEGORIES; j++) {
+ if(strcmp(loggingNames[j], categories[i]) == 0) {
componentInstance->getLoggingCategories()[j] = fmi2True;
categoryFound = fmi2True;
break;
}
}
- if(!categoryFound){
- componentInstance->getCallbackFunctions()->logger(componentInstance->getCallbackFunctions()->componentEnvironment, componentInstance->getInstanceName().getValue(),
- fmi2Warning, loggingNames[LOG_ERROR], "The category %s is not supported.", categories[i]);
+ if(!categoryFound) {
+ componentInstance->getCallbackFunctions()->logger(componentInstance->getCallbackFunctions()->componentEnvironment,
+ componentInstance->getInstanceName().getValue(), fmi2Warning, loggingNames[LOG_ERROR], "The category %s is not supported.", categories[i]);
}
}
- }
- else{
+ } else {
componentInstance->getLoggingCategories()[LOG_ALL] = fmi2True;
}
}
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetDebugLogging - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2String fmuGUID, fmi2String fmuResourceLocation, const fmi2CallbackFunctions* functions, fmi2Boolean visible, fmi2Boolean loggingOn){
- NOT_USED(visible)
- fmuInstance *componentInstance = 0;
+ fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2String fmuGUID, fmi2String fmuResourceLocation,
+ const fmi2CallbackFunctions* functions, fmi2Boolean visible, fmi2Boolean loggingOn) {
+ NOT_USED(visible)
+ fmuInstance *componentInstance = 0;
- if(!functions || !functions->logger){ //logger must be called if instantiation failed, so logger should exists
+ if(!functions || !functions->logger) { //logger must be called if instantiation failed, so logger should exists
return 0;
}
- if(!instanceName || 0 == strlen(instanceName) || strcmp(instanceName, " ") == 0){
+ if(!instanceName || 0 == strlen(instanceName) || strcmp(instanceName, " ") == 0) {
functions->logger(functions->componentEnvironment, "-", fmi2Error, loggingNames[LOG_ERROR], "The instanceName is not valid.");
return 0;
}
- if(fmi2CoSimulation != fmuType){ //FORTE only supports co-simulation
+ if(fmi2CoSimulation != fmuType) { //FORTE only supports co-simulation
functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "FORTE only supports co-simulation.");
return 0;
}
- if(!fmuGUID || 0 == strlen(fmuGUID)){
+ if(!fmuGUID || 0 == strlen(fmuGUID)) {
functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "The GUID is not valid.");
return 0;
}
- if(strcmp(fmuGUID, MODEL_GUID)){
- functions->logger(functions->componentEnvironment, instanceName, fmi2Warning, loggingNames[LOG_ERROR], "The given GUID: %s is not the same as the model's GUID: %s.", fmuGUID, MODEL_GUID);
+ if(strcmp(fmuGUID, MODEL_GUID)) {
+ functions->logger(functions->componentEnvironment, instanceName, fmi2Warning, loggingNames[LOG_ERROR],
+ "The given GUID: %s is not the same as the model's GUID: %s.", fmuGUID, MODEL_GUID);
//return 0; //TODO: MODEL_GUID is the only not fully supported characteristic by booting the instance from a file
}
- if(!fmuResourceLocation || 0 == strlen(fmuResourceLocation)){
+ if(!fmuResourceLocation || 0 == strlen(fmuResourceLocation)) {
functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "The fmuResourceLocation string is not valid.");
return 0;
}
@@ -96,39 +112,40 @@
functions->logger(functions->componentEnvironment, instanceName, fmi2OK, loggingNames[LOG_ALL], "Resource location is %s", fmuResourceLocation);
std::string file(fmuResourceLocation);
- if(0 == file.compare(0, 6, "file:/")){
- if (0 == file.compare(0, 8, "file:///")){
+ if(0 == file.compare(0, 6, "file:/")) {
+ if(0 == file.compare(0, 8, "file:///")) {
file = file.substr(8, std::string::npos);
- }else{
+ } else {
file = file.substr(6, std::string::npos);
}
functions->logger(functions->componentEnvironment, instanceName, fmi2OK, loggingNames[LOG_ALL], "Resource location is now %s", file.c_str());
- }else{
- functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "The fmuResourceLocation is not valid. It should start with file:/");
+ } else {
+ functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR],
+ "The fmuResourceLocation is not valid. It should start with file:/");
}
- if ('/' != *file.rbegin()){
+ if('/' != *file.rbegin()) {
file += "/";
}
file += "forte.fboot";
- if(!functions->allocateMemory || !functions->freeMemory){ //stepFinished is optional, that's why is not checked.
+ if(!functions->allocateMemory || !functions->freeMemory) { //stepFinished is optional, that's why is not checked.
functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "Some of the callbackFunctions are not valid.");
return 0;
}
componentInstance = new fmuInstance(instanceName, fmuGUID, file.c_str(), functions);
- if(!componentInstance){
- functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "Error creating the instance object.");
- return 0;
+ if(!componentInstance) {
+ functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "Error creating the instance object.");
+ return 0;
}
- if(STATE_INSTANTIATED != componentInstance->getState()){
+ if(STATE_INSTANTIATED != componentInstance->getState()) {
freeInstanceInternal(componentInstance);
functions->logger(functions->componentEnvironment, instanceName, fmi2Error, loggingNames[LOG_ERROR], "Loading the FB was not correct");
return 0;
}
- for(unsigned int i = 0; i < NUMBER_OF_LOG_CATEGORIES; i++){
+ for(unsigned int i = 0; i < NUMBER_OF_LOG_CATEGORIES; i++) {
componentInstance->getLoggingCategories()[i] = loggingOn;
}
@@ -136,303 +153,246 @@
return componentInstance;
}
- void fmi2FreeInstance(fmi2Component c){
+ void fmi2FreeInstance(fmi2Component c) {
ENTRY_FUNCTION_NO_RETURN(FMI2_FREE_INSTANCE)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2FreeInstance\n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2FreeInstance\n" << "--------------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2FreeInstance - GUID = %s", componentInstance->getGuid().getValue())
freeInstanceInternal(componentInstance);
- LEAVE_FUNCTION_NO_RETURN()
}
- fmi2Status fmi2SetupExperiment(fmi2Component c, fmi2Boolean toleranceDefined, fmi2Real tolerance, fmi2Real startTime, fmi2Boolean stopTimeDefined, fmi2Real stopTime){
+ fmi2Status fmi2SetupExperiment(fmi2Component c, fmi2Boolean toleranceDefined, fmi2Real tolerance, fmi2Real startTime, fmi2Boolean stopTimeDefined,
+ fmi2Real stopTime) {
NOT_USED(toleranceDefined)
NOT_USED(tolerance)
ENTRY_FUNCTION(FMI2_SETUP_EXPERIMENT)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2SetupExperiment \n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2SetupExperiment \n" << "--------------\n")
//toleranceDefined might be ignored in co-simulation according to FMI.
//TODO: Check if doing this with startTime is OK. The time in the timerHandler cannot be changed because is private in the base class
CIEC_LREAL advanceTime = startTime;
componentInstance->advanceInstanceTime(advanceTime);
- if(stopTimeDefined){
+ if(stopTimeDefined) {
componentInstance->setStopTime(stopTime);
}
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetupExperiment - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2EnterInitializationMode(fmi2Component c){
+ fmi2Status fmi2EnterInitializationMode(fmi2Component c) {
ENTRY_FUNCTION(FMI2_ENTER_INITIALIZATION_MODE)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << "fmi2EnterInitializationMode \n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << "fmi2EnterInitializationMode \n" << "--------------\n")
componentInstance->setState(STATE_INITIALIZATION_MODE);
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2EnterInitializationMode - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2ExitInitializationMode(fmi2Component c){
+ fmi2Status fmi2ExitInitializationMode(fmi2Component c) {
ENTRY_FUNCTION(FMI2_EXIT_INITIALIZATION_MODE)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2ExitInitializationMode \n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2ExitInitializationMode \n" << "--------------\n")
componentInstance->startInstance(); //TODO: Check where exactly this function must be called.
componentInstance->setState(STATE_STEP_COMPLETE);
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2ExitInitializationMode - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2Terminate(fmi2Component c){
+ fmi2Status fmi2Terminate(fmi2Component c) {
ENTRY_FUNCTION(FMI2_TERMINATE)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2Terminate \n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2Terminate \n" << "--------------\n")
componentInstance->stopInstance();
componentInstance->setState(STATE_TERMINATED);
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2Terminate - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2Reset(fmi2Component c){
+ fmi2Status fmi2Reset(fmi2Component c) {
ENTRY_FUNCTION(FMI2_RESET)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2Reset \n" << "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2Reset \n" << "--------------\n")
componentInstance->resetInstance();
componentInstance->setState(STATE_INSTANTIATED);
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2Reset - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2GetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Real value[]){
+ fmi2Status fmi2GetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Real value[]) {
ENTRY_FUNCTION(FMI2_GET_REAL)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2GetReal \n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2GetReal \n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2GetReal - GUID = %s", componentInstance->getGuid().getValue())
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One or both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to real %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " GetReal - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned = ")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " GetReal - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned = ")
value[i] = static_cast<fmi2Real>(*componentInstance->getOutputsAndInputs().at(vr[i])->getValueAsReal());
- FMU_DEBUG_LOG((fmuInstance*)c, value[i] << "\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), value[i] << "\n")
}
- FMU_DEBUG_LOG((fmuInstance*)c, "--------------\n")
- LEAVE_FUNCTION(fmi2OK)
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "--------------\n")
+ return fmi2OK;
}
- fmi2Status fmi2GetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Integer value[]){
+ fmi2Status fmi2GetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Integer value[]) {
ENTRY_FUNCTION(FMI2_GET_INTEGER)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2GetInteger \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2GetInteger \n")
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to integer %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " GetInt - vr[" << i << "] = " << vr[i] << "; and the value returned is = ")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " GetInt - vr[" << i << "] = " << vr[i] << "; and the value returned is = ")
value[i] = static_cast<fmi2Integer>(*componentInstance->getOutputsAndInputs().at(vr[i])->getValueAsInt());
- FMU_DEBUG_LOG((fmuInstance*)c, value[i] << "\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), value[i] << "\n")
}
- FMU_DEBUG_LOG((fmuInstance*)c, "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "--------------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2GetInteger - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2GetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Boolean value[]){
+ fmi2Status fmi2GetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2Boolean value[]) {
ENTRY_FUNCTION(FMI2_GET_BOOLEAN)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2GetBoolean \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2GetBoolean \n")
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to boolean %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " GetBoolean - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned is = ")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " GetBoolean - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned is = ")
value[i] = static_cast<fmi2Boolean>(*componentInstance->getOutputsAndInputs().at(vr[i])->getValueAsBool());
- FMU_DEBUG_LOG((fmuInstance*)c, value[i] << "\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), value[i] << "\n")
}
- FMU_DEBUG_LOG((fmuInstance*)c, "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "--------------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2GetBoolean - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK);
+ return fmi2OK;
}
- fmi2Status fmi2GetString(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2String value[]){
+ fmi2Status fmi2GetString(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, fmi2String value[]) {
ENTRY_FUNCTION(FMI2_GET_STRING)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2GetString \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2GetString \n")
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to string %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " GetString - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned is = ")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " GetString - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] returned is = ")
value[i] = static_cast<fmi2String>(componentInstance->getOutputsAndInputs().at(vr[i])->getValueAsString()->getValue());
- FMU_DEBUG_LOG((fmuInstance*)c, value[i] << "\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), value[i] << "\n")
}
- FMU_DEBUG_LOG((fmuInstance*)c, "--------------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "--------------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2GetString - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2SetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Real value[]){
+ fmi2Status fmi2SetReal(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Real value[]) {
ENTRY_FUNCTION(FMI2_SET_REAL)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2SetReal \n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2SetReal \n")
+ CHECK_REF_AND_VALUE()
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
-
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to real %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " SetReal - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " SetReal - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
CIEC_LREAL valToWrite(static_cast<TForteDFloat>(value[i]));
componentInstance->getOutputsAndInputs()[vr[i]]->setValue(valToWrite);
}
- FMU_DEBUG_LOG((fmuInstance*)c, "-----------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "-----------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetReal - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2SetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer value[]){
+ fmi2Status fmi2SetInteger(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer value[]) {
ENTRY_FUNCTION(FMI2_SET_INTEGER)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2SetInteger \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
-
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to integer %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " SetInt - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2SetInteger \n")
+ CHECK_REF_AND_VALUE()
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " SetInt - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
CIEC_LINT valToWrite(static_cast<TForteInt64>(value[i]));
componentInstance->getOutputsAndInputs()[vr[i]]->setValue(valToWrite);
}
- FMU_DEBUG_LOG((fmuInstance*)c, "-----------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "-----------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetInteger - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2SetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Boolean value[]){
+ fmi2Status fmi2SetBoolean(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Boolean value[]) {
ENTRY_FUNCTION(FMI2_SET_BOOLEAN)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2SetBoolean \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2SetBoolean \n")
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to boolean %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " SetBoolean - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
- CIEC_BOOL valToWrite(value[i]);
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " SetBoolean - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
+ CIEC_BOOL valToWrite(value[i] != fmi2False);
componentInstance->getOutputsAndInputs()[vr[i]]->setValue(valToWrite);
}
- FMU_DEBUG_LOG((fmuInstance*)c, "-----------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "-----------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetBoolean - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2SetString(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2String value[]){
+ fmi2Status fmi2SetString(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2String value[]) {
ENTRY_FUNCTION(FMI2_SET_STRING)
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2SetString \n")
- if(nvr > 0 && (!vr || !value)){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "One of both of the arrays vr[] and value[] were invalid.")
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2SetString \n")
+ CHECK_REF_AND_VALUE()
- for(unsigned int i = 0; i < nvr; i++){
- if(vr[i] >= componentInstance->getOutputsAndInputs().size()){
- LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "The reference to string %d is out of range. The model supports up to %d.", vr[i], componentInstance->getOutputsAndInputs().size() - 1)
- componentInstance->setState(STATE_ERROR);
- LEAVE_FUNCTION(fmi2Error)
- }
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " SetString - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
+ for(unsigned int i = 0; i < nvr; i++) {
+ CHECK_REF_IN_IO()
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c),
+ componentInstance->getGuid().getValue() << " SetString - vr[" << i << "] = " << vr[i] << "; and value[" << i << "] to set is = " << value[i] << "\n")
CIEC_STRING valToWrite(value[i]); //copies the string into the CIEC_STRING variable
componentInstance->getOutputsAndInputs()[vr[i]]->setValue(valToWrite);
}
- FMU_DEBUG_LOG((fmuInstance*)c, "-----------\n")
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), "-----------\n")
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2SetString - GUID = %s", componentInstance->getGuid().getValue())
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2GetFMUstate(fmi2Component c, fmi2FMUstate* FMUstate){
+ fmi2Status fmi2GetFMUstate(fmi2Component c, fmi2FMUstate* FMUstate) {
NOT_USED(FMUstate)
return functionNotSupported(c, "fmi2GetFMUstate");
}
- fmi2Status fmi2SetFMUstate(fmi2Component c, fmi2FMUstate FMUstate){
+ fmi2Status fmi2SetFMUstate(fmi2Component c, fmi2FMUstate FMUstate) {
NOT_USED(FMUstate)
return functionNotSupported(c, "fmi2SetFMUstate");
}
- fmi2Status fmi2FreeFMUstate(fmi2Component c, fmi2FMUstate* FMUstate){
+ fmi2Status fmi2FreeFMUstate(fmi2Component c, fmi2FMUstate* FMUstate) {
NOT_USED(FMUstate)
return functionNotSupported(c, "fmi2FreeFMUstate");
}
- fmi2Status fmi2SerializedFMUstateSize(fmi2Component c, fmi2FMUstate FMUstate, size_t *size){
+ fmi2Status fmi2SerializedFMUstateSize(fmi2Component c, fmi2FMUstate FMUstate, size_t *size) {
NOT_USED(FMUstate)
NOT_USED(size)
return functionNotSupported(c, "fmi2SerializedFMUstateSize");
}
- fmi2Status fmi2SerializeFMUstate(fmi2Component c, fmi2FMUstate FMUstate, fmi2Byte serializedState[], size_t size){
+ fmi2Status fmi2SerializeFMUstate(fmi2Component c, fmi2FMUstate FMUstate, fmi2Byte serializedState[], size_t size) {
NOT_USED(FMUstate)
NOT_USED(serializedState)
NOT_USED(size)
return functionNotSupported(c, "fmi2SerializeFMUstate");
}
- fmi2Status fmi2DeSerializeFMUstate(fmi2Component c, const fmi2Byte serializedState[], size_t size, fmi2FMUstate* FMUstate){
+ fmi2Status fmi2DeSerializeFMUstate(fmi2Component c, const fmi2Byte serializedState[], size_t size, fmi2FMUstate* FMUstate) {
NOT_USED(FMUstate)
NOT_USED(serializedState)
NOT_USED(size)
return functionNotSupported(c, "fmi2DeSerializeFMUstate");
}
- fmi2Status fmi2GetDirectionalDerivative(fmi2Component c, const fmi2ValueReference vUnknown_ref[], size_t nUnknown, const fmi2ValueReference vKnown_ref[], size_t nKnown, const fmi2Real dvKnown[], fmi2Real dvUnknown[]){
+ fmi2Status fmi2GetDirectionalDerivative(fmi2Component c, const fmi2ValueReference vUnknown_ref[], size_t nUnknown, const fmi2ValueReference vKnown_ref[],
+ size_t nKnown, const fmi2Real dvKnown[], fmi2Real dvUnknown[]) {
NOT_USED(vUnknown_ref)
NOT_USED(nUnknown)
NOT_USED(vKnown_ref)
@@ -442,7 +402,7 @@
return functionNotSupported(c, "fmi2GetDirectionalDerivative");
}
- fmi2Status fmi2SetRealInputDerivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], const fmi2Real value[]){
+ fmi2Status fmi2SetRealInputDerivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], const fmi2Real value[]) {
NOT_USED(vr)
NOT_USED(nvr)
NOT_USED(order)
@@ -450,7 +410,7 @@
return functionNotSupported(c, "fmi2SetRealInputDerivatives");
}
- fmi2Status fmi2GetRealOutputDerivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], fmi2Real value[]){
+ fmi2Status fmi2GetRealOutputDerivatives(fmi2Component c, const fmi2ValueReference vr[], size_t nvr, const fmi2Integer order[], fmi2Real value[]) {
NOT_USED(vr)
NOT_USED(nvr)
NOT_USED(order)
@@ -458,85 +418,85 @@
return functionNotSupported(c, "fmi2GetRealOutputDerivatives");
}
- fmi2Status fmi2DoStep(fmi2Component c, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean noSetFMUStatePriorToCurrentPoint){
+ fmi2Status fmi2DoStep(fmi2Component c, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean noSetFMUStatePriorToCurrentPoint) {
NOT_USED(noSetFMUStatePriorToCurrentPoint)
ENTRY_FUNCTION(FMI2_DO_STEP)
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "fmi2DoStep - GUID = %s", componentInstance->getGuid().getValue())
CIEC_LREAL advanceTime = communicationStepSize;
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2DoStep\n")
- if(-1 != componentInstance->getStopTime() && (currentCommunicationPoint + communicationStepSize) > componentInstance->getStopTime()){
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2DoStep\n")
+ if(-1 != componentInstance->getStopTime() && (currentCommunicationPoint + communicationStepSize) > componentInstance->getStopTime()) {
LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "Computation time past stopTime: %f", componentInstance->getStopTime())
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2DoStep Error1 \n")
- LEAVE_FUNCTION(fmi2Error)
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2DoStep Error1 \n")
+ return fmi2Error;
}
- if(!componentInstance->advanceInstanceTime(advanceTime)){
- FMU_DEBUG_LOG((fmuInstance*)c, componentInstance->getGuid().getValue() << " - fmi2DoStep Error2 \n")
- LEAVE_FUNCTION(fmi2Error)
+ if(!componentInstance->advanceInstanceTime(advanceTime)) {
+ FMU_DEBUG_LOG(static_cast<fmuInstance*>(c), componentInstance->getGuid().getValue() << " - fmi2DoStep Error2 \n")
+ return fmi2Error;
}
- LEAVE_FUNCTION(fmi2OK)
+ return fmi2OK;
}
- fmi2Status fmi2CancelStep(fmi2Component c){
+ fmi2Status fmi2CancelStep(fmi2Component c) {
ENTRY_FUNCTION(FMI2_CANCEL_STEP)
LOG_FMU(componentInstance, fmi2Error, LOG_ERROR, "fmi2CancelStep is not yet implemented")
- LEAVE_FUNCTION(fmi2Error)
+ return fmi2Error;
}
- fmi2Status fmi2GetStatus(fmi2Component c, const fmi2StatusKind s, fmi2Status *value){
+ fmi2Status fmi2GetStatus(fmi2Component c, const fmi2StatusKind s, fmi2Status *value) {
NOT_USED(s)
NOT_USED(value)
ENTRY_FUNCTION(FMI2_GET_STATUS)
LOG_FMU(componentInstance, fmi2Discard, LOG_ERROR, "fmi2GetStatus is not yet implemented")
- LEAVE_FUNCTION(fmi2Discard)
+ return fmi2Discard;
}
- fmi2Status fmi2GetRealStatus(fmi2Component c, const fmi2StatusKind s, fmi2Real *value){
+ fmi2Status fmi2GetRealStatus(fmi2Component c, const fmi2StatusKind s, fmi2Real *value) {
NOT_USED(s)
NOT_USED(value)
ENTRY_FUNCTION(FMI2_GET_REAL_STATUS)
LOG_FMU(componentInstance, fmi2Discard, LOG_ERROR, "fmi2GetRealStatus is not yet implemented")
- LEAVE_FUNCTION(fmi2Discard)
+ return fmi2Discard;
}
- fmi2Status fmi2GetIntegerStatus(fmi2Component c, const fmi2StatusKind s, fmi2Integer *value){
+ fmi2Status fmi2GetIntegerStatus(fmi2Component c, const fmi2StatusKind s, fmi2Integer *value) {
NOT_USED(s)
NOT_USED(value)
ENTRY_FUNCTION(FMI2_GET_INTEGER_STATUS)
LOG_FMU(componentInstance, fmi2Discard, LOG_ERROR, "fmi2GetIntegerStatus is not yet implemented")
- LEAVE_FUNCTION(fmi2Discard)
+ return fmi2Discard;
}
- fmi2Status fmi2GetBooleanStatus(fmi2Component c, const fmi2StatusKind s, fmi2Boolean *value){
+ fmi2Status fmi2GetBooleanStatus(fmi2Component c, const fmi2StatusKind s, fmi2Boolean *value) {
NOT_USED(s)
NOT_USED(value)
ENTRY_FUNCTION(FMI2_GET_BOOLEAN_STATUS)
LOG_FMU(componentInstance, fmi2Discard, LOG_ERROR, "fmi2GetBooleanStatus is not yet implemented")
- LEAVE_FUNCTION(fmi2Discard)
+ return fmi2Discard;
}
- fmi2Status fmi2GetStringStatus(fmi2Component c, const fmi2StatusKind s, fmi2String *value){
+ fmi2Status fmi2GetStringStatus(fmi2Component c, const fmi2StatusKind s, fmi2String *value) {
NOT_USED(s)
NOT_USED(value)
ENTRY_FUNCTION(FMI2_GET_STRING_STATUS)
LOG_FMU(componentInstance, fmi2Discard, LOG_ERROR, "fmi2GetStringStatus is not yet implemented")
- LEAVE_FUNCTION(fmi2Discard)
+ return fmi2Discard;
}
- fmi2Status functionNotSupported(fmi2Component c, const char* functionName){
- if(0 == c)
+ fmi2Status functionNotSupported(fmi2Component c, const char* functionName) {
+ if(0 == c) {
return fmi2Error;
+ }
fmuInstance* componentInstance = static_cast<fmuInstance*>(c);
LOG_FMU(componentInstance, fmi2OK, LOG_CALL, "%s - GUID = %s", functionName, componentInstance->getGuid().getValue())
LOG_FMU(componentInstance, fmi2OK, LOG_ERROR, "Function %s is not supported.", functionName)
return fmi2Error;
}
- void freeInstanceInternal(fmi2Component c){
+ void freeInstanceInternal(fmi2Component c) {
fmuInstance* componentInstance = static_cast<fmuInstance*>(c);
delete componentInstance;
}
}
-
diff --git a/src/core/fmi/fmiTimerHandler.cpp b/src/core/fmi/fmiTimerHandler.cpp
index 78d91f4..64c59de 100644
--- a/src/core/fmi/fmiTimerHandler.cpp
+++ b/src/core/fmi/fmiTimerHandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/fmiTimerHandler.h b/src/core/fmi/fmiTimerHandler.h
index 2f10575..b4ad69d 100644
--- a/src/core/fmi/fmiTimerHandler.h
+++ b/src/core/fmi/fmiTimerHandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/fmuConfig.h b/src/core/fmi/fmuConfig.h
index fa86c6e..0a58fa4 100644
--- a/src/core/fmi/fmuConfig.h
+++ b/src/core/fmi/fmuConfig.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -142,32 +143,27 @@
if(!(instance->getState() & allowedStatesInFunction[function])) { \
instance->setState(STATE_ERROR); \
LOG_FMU(instance, fmi2Error, LOG_ERROR, "The function cannot be called in the given state") \
- LEAVE_FUNCTION(fmi2Error) \
+ return fmi2Error; \
}
#define ASSERT_STATE_NO_RETURN(instance, function) \
if(!(instance->getState() & allowedStatesInFunction[function])) { \
instance->setState(STATE_ERROR); \
LOG_FMU(instance, fmi2Error, LOG_ERROR, "The function cannot be called in the given state") \
- LEAVE_FUNCTION_NO_RETURN() \
+ return; \
}
#define ENTRY_FUNCTION(function) \
fmuInstance* componentInstance = static_cast<fmuInstance*>(c); \
- if(NULL == c) {LEAVE_FUNCTION(fmi2Error)} \
+ if(NULL == c) {return fmi2Error;} \
ASSERT_STATE(componentInstance, function) \
-#define LEAVE_FUNCTION(returnValue) \
- return returnValue;
-
#define ENTRY_FUNCTION_NO_RETURN(function) \
fmuInstance* componentInstance = static_cast<fmuInstance*>(c); \
- if(NULL == c) {LEAVE_FUNCTION_NO_RETURN()} \
+ if(NULL == c) {return;} \
ASSERT_STATE_NO_RETURN(componentInstance, function) \
-#define LEAVE_FUNCTION_NO_RETURN() \
-
#define NOT_USED(var) \
(void)var;
diff --git a/src/core/fmi/fmuEcet.cpp b/src/core/fmi/fmuEcet.cpp
index 0a5212c..7e2411c 100644
--- a/src/core/fmi/fmuEcet.cpp
+++ b/src/core/fmi/fmuEcet.cpp
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2018 - fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral - initial implementation and rework communication infrastructure
- *
- *******************************************************************************/
+ * Copyright (c) 2018 - fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "fmuEcet.h"
#include "fmi/fmiTimerHandler.h"
diff --git a/src/core/fmi/fmuEcet.h b/src/core/fmi/fmuEcet.h
index 2d8db86..594bb36 100644
--- a/src/core/fmi/fmuEcet.h
+++ b/src/core/fmi/fmuEcet.h
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2018 - fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral - initial implementation and rework communication infrastructure
- *
- *******************************************************************************/
+ * Copyright (c) 2018 - fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _FMUECET_H_
#define _FMUECET_H_
diff --git a/src/core/fmi/fmuEcetFactory.cpp b/src/core/fmi/fmuEcetFactory.cpp
index b195fa5..cb32767 100644
--- a/src/core/fmi/fmuEcetFactory.cpp
+++ b/src/core/fmi/fmuEcetFactory.cpp
@@ -1,14 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2018 - fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral - initial implementation and rework communication infrastructure
- *
- *******************************************************************************/
+ * Copyright (c) 2018 - fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "fmuEcet.h"
diff --git a/src/core/fmi/fmuInstance.cpp b/src/core/fmi/fmuInstance.cpp
index 97078da..d66dda5 100644
--- a/src/core/fmi/fmuInstance.cpp
+++ b/src/core/fmi/fmuInstance.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -235,8 +236,8 @@
FMU_DEBUG_LOG(this, "--------ERROR: Subscriber does not have any connection.\n");
}
else{
- CSinglyLinkedList<SConnectionPoint>::Iterator it = portConnection->getDestinationList().begin();
- const SConnectionPoint remoteConnectionPoint = pa_isInput ? portConnection->getSourceId() : *it;
+ CSinglyLinkedList<CConnectionPoint>::Iterator it = portConnection->getDestinationList().begin();
+ const CConnectionPoint remoteConnectionPoint = pa_isInput ? portConnection->getSourceId() : *it;
const CIEC_ANY *remotePort = pa_isInput ? remoteConnectionPoint.mFB->getDOFromPortId(remoteConnectionPoint.mPortId) : remoteConnectionPoint.mFB->getDIFromPortId(remoteConnectionPoint.mPortId);
diff --git a/src/core/fmi/fmuInstance.h b/src/core/fmi/fmuInstance.h
index 35b9dd3..9f6e02a 100644
--- a/src/core/fmi/fmuInstance.h
+++ b/src/core/fmi/fmuInstance.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/fmuValueContainer.cpp b/src/core/fmi/fmuValueContainer.cpp
index bc1201b..2abf5c2 100644
--- a/src/core/fmi/fmuValueContainer.cpp
+++ b/src/core/fmi/fmuValueContainer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/fmuValueContainer.h b/src/core/fmi/fmuValueContainer.h
index 21cc6a6..104a257 100644
--- a/src/core/fmi/fmuValueContainer.h
+++ b/src/core/fmi/fmuValueContainer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/core/fmi/processinterface.cpp b/src/core/fmi/processinterface.cpp
index eb1fa8d..9da33e6 100644
--- a/src/core/fmi/processinterface.cpp
+++ b/src/core/fmi/processinterface.cpp
@@ -1,10 +1,10 @@
-
/*******************************************************************************
- * Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2016 -2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -17,9 +17,6 @@
#include <iostream>
#include "fmuInstance.h"
-DEFINE_FIRMWARE_FB(CFMUProcessInterface, g_nStringIdCFMUProcessInterface)
-
-
const char * const CFMUProcessInterface::scmOK = "OK";
const char * const CFMUProcessInterface::scmNOTINITIALIZED = "Not initialized";
const char * const CFMUProcessInterface::scmINTERNALERROR = "Internal Error";
@@ -28,16 +25,16 @@
CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), mInitialized(false), mValue(0){
}
-CFMUProcessInterface::CFMUProcessInterface(const CStringDictionary::TStringId paInstanceNameId, CResource *pa_poSrcRes) :
- CProcessInterfaceBase(pa_poSrcRes, 0, paInstanceNameId, 0, 0), mInitialized(false), mValue(0) {
+CFMUProcessInterface::CFMUProcessInterface(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
+ CProcessInterfaceBase(paSrcRes, 0, paInstanceNameId, 0, 0), mInitialized(false), mValue(0) {
FMU_DEBUG_LOG(GET_FMU_INSTANCE_FROM_FB(this), "Someone called the wrong constructor.\n") //Why do I need this constructor?
}
CFMUProcessInterface::~CFMUProcessInterface(){
}
-void CFMUProcessInterface::setValueContainer(fmuValueContainer* pa_valueContainer){
- mValue = pa_valueContainer;
+void CFMUProcessInterface::setValueContainer(fmuValueContainer* paValueContainer){
+ mValue = paValueContainer;
}
bool CFMUProcessInterface::initialise(bool paIsInput){
diff --git a/src/core/fmi/processinterface.h b/src/core/fmi/processinterface.h
index 84956c4..87b5191 100644
--- a/src/core/fmi/processinterface.h
+++ b/src/core/fmi/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
- * Copyright (c) 2016 -2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2016 -2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -11,8 +12,6 @@
#ifndef _PROCESSINTERFACE_H_
#define _PROCESSINTERFACE_H_
-#define ABSENT 0 //This value is to avoid trigger an event in the subscribe when setting. It's not completed nor well implemented yet.
-
#include <../stdfblib/io/processinterfacebase.h>
#include "fmuValueContainer.h"
#include <vector>
@@ -28,12 +27,11 @@
#endif
class CFMUProcessInterface : public CProcessInterfaceBase{
- DECLARE_FIRMWARE_FB(CFMUProcessInterface) //for parameters this class is instantiated
public:
CFMUProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData);
- CFMUProcessInterface(const CStringDictionary::TStringId paInstanceNameId, CResource *pa_poSrcRes);
+ CFMUProcessInterface(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes);
- void setValueContainer(fmuValueContainer* pa_valueContainer);
+ void setValueContainer(fmuValueContainer* paValueContainer);
virtual ~CFMUProcessInterface();
@@ -54,8 +52,6 @@
return false; //not implemented
}
-
-
private:
static const char * const scmOK;
static const char * const scmNOTINITIALIZED;
diff --git a/src/core/forteiterator.h b/src/core/forteiterator.h
index fa42b96..e58343c 100644
--- a/src/core/forteiterator.h
+++ b/src/core/forteiterator.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2010, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians, Alois Zoitl,
- * - initial implementation and rework communication infrastructure
- * Martin Melik Merkumians - updates naming
- *******************************************************************************/
+ * Copyright (c) 2010, 2018 TU Vienna/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians, Alois Zoitl,
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - updates naming
+ *******************************************************************************/
#ifndef FORTEITERATOR_H_
#define FORTEITERATOR_H_
diff --git a/src/core/fortelist.h b/src/core/fortelist.h
index 9350010..03ae5c0 100644
--- a/src/core/fortelist.h
+++ b/src/core/fortelist.h
@@ -1,19 +1,21 @@
/*******************************************************************************
- * Copyright (c) 2009 - 2012, 2018 TU Vienna/ACIN, 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians, Alois Zoitl, Ingo Hegny,
- * - initial implementation and rework communication infrastructure
- * Stefan Profanter
- * - list->begin changed to be const, and smaller bugfixes to support
- * const as Type
- * Martin Melik Merkumians - fixes naming, adds missing back functions for
- * list specializations
- *******************************************************************************/
+ * Copyright (c) 2009 - 2012, 2018 TU Vienna/ACIN, 2017 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians, Alois Zoitl, Ingo Hegny,
+ * - initial implementation and rework communication infrastructure
+ * Stefan Profanter
+ * - list->begin changed to be const, and smaller bugfixes to support
+ * const as Type
+ * Martin Melik Merkumians - fixes naming, adds missing back functions for
+ * list specializations
+ *******************************************************************************/
#include <fortenew.h>
#include "fortenode.h"
#include "forteiterator.h"
@@ -254,10 +256,7 @@
*
*/
inline const void* peekFront() const {
- if (mFirstNode != 0)
- return mFirstNode->getData();
- else
- return 0;
+ return (mFirstNode != 0) ? mFirstNode->getData() : 0;
}
/*!\brief Deletes the first object of the singly linked list
diff --git a/src/core/fortenode.h b/src/core/fortenode.h
index 943492f..f4fb480 100644
--- a/src/core/fortenode.h
+++ b/src/core/fortenode.h
@@ -1,15 +1,17 @@
/*******************************************************************************
- * Copyright (c) 2010, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians, Alois Zoitl
- * - initial implementation and rework communication infrastructure
- * Martin Melik Merkumians - updates naming
- *******************************************************************************/
+ * Copyright (c) 2010, 2018 TU Vienna/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians, Alois Zoitl
+ * - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - updates naming
+ *******************************************************************************/
#ifndef FORTENODE_H_
#define FORTENODE_H_
diff --git a/src/core/funcbloc.cpp b/src/core/funcbloc.cpp
index 0e21e4d..bdbe6c3 100644
--- a/src/core/funcbloc.cpp
+++ b/src/core/funcbloc.cpp
@@ -2,10 +2,11 @@
* Copyright (c) 2005 - 2018 Profactor GmbH, ACIN, fortiss GmbH,
* Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Gunnar Grabmaier, Alois Zoitl, Smodic Rene, Ingo Hegny,
@@ -72,15 +73,15 @@
}
void CFunctionBlock::setupAdapters(const SFBInterfaceSpec *pa_pstInterfaceSpec, TForteByte *pa_acFBData){
- if((0 != pa_pstInterfaceSpec) && (0 != pa_acFBData)){
- if(pa_pstInterfaceSpec->m_nNumAdapters){
- m_apoAdapters = reinterpret_cast<TAdapterPtr *>(pa_acFBData);
- for(unsigned int i = 0; i < pa_pstInterfaceSpec->m_nNumAdapters; ++i){
- //set pointer to right place in pa_acFBData
- m_apoAdapters[i] = CTypeLib::createAdapter(pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID, pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterTypeNameID, getResourcePtr(), pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_bIsPlug);
- if(0 != m_apoAdapters[i]){
- m_apoAdapters[i]->setParentFB(this, static_cast<TForteUInt8>(i));
- }
+ if((0 != pa_pstInterfaceSpec) && (0 != pa_acFBData) && (pa_pstInterfaceSpec->m_nNumAdapters)) {
+ m_apoAdapters = reinterpret_cast<TAdapterPtr *>(pa_acFBData);
+ for(unsigned int i = 0; i < pa_pstInterfaceSpec->m_nNumAdapters; ++i) {
+ //set pointer to right place in pa_acFBData
+ m_apoAdapters[i] = CTypeLib::createAdapter(pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID,
+ pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterTypeNameID, getResourcePtr(),
+ pa_pstInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_bIsPlug);
+ if(0 != m_apoAdapters[i]) {
+ m_apoAdapters[i]->setParentFB(this, static_cast<TForteUInt8>(i));
}
}
}
@@ -128,10 +129,8 @@
}
void CFunctionBlock::configureGenericDI(TPortId paDIPortId, const CIEC_ANY *paRefValue){
- if(getDI(paDIPortId)->getDataTypeID() == CIEC_ANY::e_ANY){
- if(0 != paRefValue){
- paRefValue->clone(reinterpret_cast<TForteByte *>(getDI(paDIPortId)));
- }
+ if(getDI(paDIPortId)->getDataTypeID() == CIEC_ANY::e_ANY && (0 != paRefValue)) {
+ paRefValue->clone(reinterpret_cast<TForteByte *>(getDI(paDIPortId)));
}
}
@@ -241,28 +240,25 @@
void CFunctionBlock::sendOutputEvent(size_t paEO){
FORTE_TRACE("OutputEvent: Function Block sending event: %d (maxid: %d)\n", paEO, m_pstInterfaceSpec->m_nNumEOs - 1);
- if(paEO < m_pstInterfaceSpec->m_nNumEOs){
- if(0 != m_pstInterfaceSpec->m_anEOWithIndexes){
- if(-1 != m_pstInterfaceSpec->m_anEOWithIndexes[paEO]){
- const TDataIOID *eiWithStart = &(m_pstInterfaceSpec->m_anEOWith[m_pstInterfaceSpec->m_anEOWithIndexes[paEO]]);
- //TODO think on this lock
- CCriticalRegion criticalRegion(m_poResource->m_oResDataConSync);
- for(size_t i = 0; eiWithStart[i] != scmWithListDelimiter; ++i){
- CDataConnection *con = getDOConUnchecked(eiWithStart[i]);
- if(con->isConnected()){
- CIEC_ANY *dataOutput = getDO(eiWithStart[i]);
+ if(paEO < m_pstInterfaceSpec->m_nNumEOs) {
+ if(0 != m_pstInterfaceSpec->m_anEOWithIndexes && -1 != m_pstInterfaceSpec->m_anEOWithIndexes[paEO]) {
+ const TDataIOID *eiWithStart = &(m_pstInterfaceSpec->m_anEOWith[m_pstInterfaceSpec->m_anEOWithIndexes[paEO]]);
+ //TODO think on this lock
+ CCriticalRegion criticalRegion(m_poResource->m_oResDataConSync);
+ for(size_t i = 0; eiWithStart[i] != scmWithListDelimiter; ++i) {
+ CDataConnection *con = getDOConUnchecked(eiWithStart[i]);
+ if(con->isConnected()) {
+ CIEC_ANY *dataOutput = getDO(eiWithStart[i]);
#ifdef FORTE_SUPPORT_MONITORING
- if(dataOutput->isForced() != true){
+ if(dataOutput->isForced() != true) {
#endif //FORTE_SUPPORT_MONITORING
- con->writeData(dataOutput);
+ con->writeData(dataOutput);
#ifdef FORTE_SUPPORT_MONITORING
- }
- else{
- //when forcing we write back the value from the connection to keep the forced value on the output
- con->readData(dataOutput);
- }
-#endif //FORTE_SUPPORT_MONITORING
+ } else {
+ //when forcing we write back the value from the connection to keep the forced value on the output
+ con->readData(dataOutput);
}
+#endif //FORTE_SUPPORT_MONITORING
}
}
}
@@ -290,24 +286,22 @@
FORTE_TRACE("InputEvent: Function Block (%s) got event: %d (maxid: %d)\n", CStringDictionary::getInstance().get(getInstanceNameId()), paEIID, m_pstInterfaceSpec->m_nNumEIs - 1);
if(e_RUNNING == getState()){
- if(paEIID < m_pstInterfaceSpec->m_nNumEIs){
- if(0 != m_pstInterfaceSpec->m_anEIWithIndexes){
- if(-1 != m_pstInterfaceSpec->m_anEIWithIndexes[paEIID]){
- const TDataIOID *eiWithStart = &(m_pstInterfaceSpec->m_anEIWith[m_pstInterfaceSpec->m_anEIWithIndexes[paEIID]]);
+ if(paEIID < m_pstInterfaceSpec->m_nNumEIs) {
+ if(0 != m_pstInterfaceSpec->m_anEIWithIndexes && -1 != m_pstInterfaceSpec->m_anEIWithIndexes[paEIID]) {
+ const TDataIOID *eiWithStart = &(m_pstInterfaceSpec->m_anEIWith[m_pstInterfaceSpec->m_anEIWithIndexes[paEIID]]);
- // TODO think on this lock
- CCriticalRegion criticalRegion(m_poResource->m_oResDataConSync);
- for(size_t i = 0; eiWithStart[i] != scmWithListDelimiter; ++i){
- if(0 != m_apoDIConns[eiWithStart[i]]){
- CIEC_ANY *di = getDI(eiWithStart[i]);
+ // TODO think on this lock
+ CCriticalRegion criticalRegion(m_poResource->m_oResDataConSync);
+ for(size_t i = 0; eiWithStart[i] != scmWithListDelimiter; ++i) {
+ if(0 != m_apoDIConns[eiWithStart[i]]) {
+ CIEC_ANY *di = getDI(eiWithStart[i]);
#ifdef FORTE_SUPPORT_MONITORING
- if(true != di->isForced()){
+ if(true != di->isForced()) {
#endif //FORTE_SUPPORT_MONITORING
- m_apoDIConns[eiWithStart[i]]->readData(di);
+ m_apoDIConns[eiWithStart[i]]->readData(di);
#ifdef FORTE_SUPPORT_MONITORING
- }
-#endif //FORTE_SUPPORT_MONITORING
}
+#endif //FORTE_SUPPORT_MONITORING
}
}
}
@@ -354,12 +348,10 @@
break;
}
- if(e_RDY == nRetVal){
- if(0 != m_pstInterfaceSpec){
- for(int i = 0; i < m_pstInterfaceSpec->m_nNumAdapters; ++i){
- if(0 != m_apoAdapters[i]){
- m_apoAdapters[i]->changeFBExecutionState(pa_unCommand);
- }
+ if(e_RDY == nRetVal && 0 != m_pstInterfaceSpec) {
+ for(int i = 0; i < m_pstInterfaceSpec->m_nNumAdapters; ++i) {
+ if(0 != m_apoAdapters[i]) {
+ m_apoAdapters[i]->changeFBExecutionState(pa_unCommand);
}
}
}
@@ -460,11 +452,6 @@
return cg_unInvalidPortId;
}
-
-const CIEC_TIME CFunctionBlock::TIME(){
- return CIEC_TIME( getTimer().getForteTime() * (FORTE_TIME_BASE_UNITS_PER_SECOND / cg_nForteTicksPerSecond) );
-};
-
//********************************** below here are monitoring specific functions **********************************************************
#ifdef FORTE_SUPPORT_MONITORING
void CFunctionBlock::setupEventMonitoringData(){
diff --git a/src/core/funcbloc.h b/src/core/funcbloc.h
index 3b37a0b..d89b452 100644
--- a/src/core/funcbloc.h
+++ b/src/core/funcbloc.h
@@ -1,541 +1,535 @@
-/*******************************************************************************
- * Copyright (c) 2005 - 2018 ACIN, Profactor GmbH, nxtControl GmbH, fortiss GmbH,
- * Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser, Gunnar Grabmaier, Smodic Rene,
- * Gerhard Ebenhofer, Michael Hofmann, Martin Melik Merkumians, Ingo Hegny,
- * Stanislav Meduna, Patrick Smejkal,
- * - initial implementation and rework communication infrastructure
- * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
- *******************************************************************************/
-#ifndef _FUNCBLOC_H_
-#define _FUNCBLOC_H_
-
-#include <forte_config.h>
-#include "mgmcmd.h"
-#include "event.h"
-#include "dataconn.h"
-#include "eventconn.h"
-#include "stringdict.h"
-#include "../arch/devlog.h"
-#include "iec61131_functions.h"
-#include <stringlist.h>
-
-class CEventChainExecutionThread;
-class CAdapter;
-class CTimerHandler;
-
-#ifdef FORTE_SUPPORT_MONITORING
-#include "mgmcmdstruct.h"
-namespace forte {
- namespace core {
- class CMonitoringHandler;
- }
-}
-#endif //FORTE_SUPPORT_MONITORING
-
-#ifndef FORTE_FB_DATA_ARRAY //with this check we can overwrite this define in a platform specific file (e.g., config.h)
-/*! Define that adds the data array to a SIFB, simple FB or CFB
- * May be overwritten by a platform specific version that adapts for example some alignment requirements
- */
-#define FORTE_FB_DATA_ARRAY(a_nNumEOs, a_nNumDIs, a_nNumDOs, a_nNumAdapters) \
- union{ \
- TForteByte m_anFBConnData[genFBConnDataSizeTemplate<a_nNumEOs, a_nNumDIs, a_nNumDOs>::value]; \
- void *m_apoDummyConnPointerAlign; \
- };\
- union{ \
- TForteByte m_anFBVarsData[genFBVarsDataSizeTemplate<a_nNumDIs, a_nNumDOs, a_nNumAdapters>::value]; \
- CIEC_ANY::TLargestUIntValueType m_uDummyDataAlign; \
- };
-#endif
-
-typedef CAdapter *TAdapterPtr;
-
-typedef TForteUInt8 TDataIOID; //!< \ingroup CORE Type for holding an data In- or output ID (max value 254)
-
-/*!\ingroup CORE\brief Structure to hold all data of adapters instantiated in the function block.
- */
-struct SAdapterInstanceDef{
- CStringDictionary::TStringId m_nAdapterTypeNameID; //!< Adapter type name
- CStringDictionary::TStringId m_nAdapterNameID; //!< Adapter instance name
- bool m_bIsPlug; //!< Flag for distinction of adapter nature (plug/socket)
-};
-
-/*!\ingroup CORE\brief Structure to hold all the data for specifying a function block interface.
- */
-struct SFBInterfaceSpec{
- TForteUInt8 m_nNumEIs; //!< Number of event inputs (max 254)
- const CStringDictionary::TStringId* m_aunEINames; //!< List of the event input names
- const TDataIOID* m_anEIWith; //!< Input WITH reference list. This list contains an array of input data ids. For each input event the assiciated data inputs are listed. The start for each input event is specified in the m_anEIWithIndexes field. The end is defined trough the value 255.
- const TForteInt16* m_anEIWithIndexes; //!< Index list for each input event. This list gives for each input event an entry in the m_anEIWith. Input events are numbered starting from 0. if the input event has no assciated data inputs -1 is the entry at this event inputs postion.
- TForteUInt8 m_nNumEOs; //!< Number of event outputs (max 254)
- const CStringDictionary::TStringId* m_aunEONames; //!< List of the event output names
- const TDataIOID* m_anEOWith; //!< Output WITH reference list. This list contains an array of output data ids. For each output event the assiciated data outputs are listed. The start for each output event is specified in the m_anEOWithIndexes field. The end is defined trough the value 255.
- const TForteInt16* m_anEOWithIndexes; //!< Index list for each output event. This list gives for each output event an entry in the m_anEOWith. Output events are numbered starting from 0. if the output event has no assciated data outputs -1 is the entry at this event outputs postion. Additionally at the postion m_nNumEOs in this list an index to an own list in the m_anEOWith list is stored specifying all output data port that are not associated with any output event. That values will be updated on every FB invocation.
- TForteUInt8 m_nNumDIs; //!< Number of data inputs (max 254)
- const CStringDictionary::TStringId* m_aunDINames; //!< List of the data input names
- const CStringDictionary::TStringId* m_aunDIDataTypeNames; //!< List of the data type names for the data inputs
- TForteUInt8 m_nNumDOs; //!< Number of data outputs (max 254)
- const CStringDictionary::TStringId* m_aunDONames; //!< List of the data output names
- const CStringDictionary::TStringId* m_aunDODataTypeNames; //!< List of the data type names for the data outputs
- TForteUInt8 m_nNumAdapters; //!< Number of Adapters
- const SAdapterInstanceDef* m_pstAdapterInstanceDefinition; //!< List of adapter instances
-};
-
-/*!\ingroup CORE\brief Base class for all function blocks.
- */
-class CFunctionBlock{
- public:
- const static TDataIOID scmWithListDelimiter = cg_unInvalidPortId; //!< value identifying the end of a with list
-
- /*!\brief Possible states of a runable object.
- *
- */
- enum E_FBStates{
- e_RUNNING = 0, // in the most critical execution path of FORTE we are checking for this enum value it is faster if this is the zero entry
- e_IDLE, e_STOPPED, e_KILLED
- };
-
- /*! \brief Indicator that the given EventID is an included adapter's eventID.
- *
- * This will allow 255 Input and Output Events.
- *
- * EventIDs > scm_nMaxInterfaceEvents: highByte indicates (AdapterID+1)
- */
- static const TForteUInt16 scm_nMaxInterfaceEvents = 0x00FF;
-
- virtual ~CFunctionBlock();
-
- /*!\brief Get the resource the function block is contained in.
- */
- CResource &getResource(void){
- return *m_poResource;
- }
-
- CResource *getResourcePtr(void){
- return m_poResource;
- }
-
- /*!\brief Get the timer of the device wher the FB is contained.
- */
- CTimerHandler& getTimer(void);
-
- /*!\brief Returns the type of this FB instance
- */
- virtual CStringDictionary::TStringId getFBTypeId(void) const = 0;
- /*!\brief Get the ID of a specific event input of the FB.
- *
- * \param pa_unEINameId StringId to the event input name.
- * \return The ID of the event input or cg_nInvalidEventID.
- */
- TEventID getEIID(CStringDictionary::TStringId pa_unEINameId) const{
- return static_cast<TEventID>(getPortId(pa_unEINameId, m_pstInterfaceSpec->m_nNumEIs, m_pstInterfaceSpec->m_aunEINames));
- }
-
- /*!\brief Get the ID of a specific event output of the FB.
- *
- * \param pa_unEONameId string id to the event output name.
- * \return The ID of the event output or cg_nInvalidEventID.
- */
- TEventID getEOID(CStringDictionary::TStringId pa_unEONameId) const{
- return static_cast<TEventID>(getPortId(pa_unEONameId, m_pstInterfaceSpec->m_nNumEOs, m_pstInterfaceSpec->m_aunEONames));
- }
-
- CEventConnection *getEOConnection(CStringDictionary::TStringId paEONameId) const;
-
- /*!\brief Connects specific data input of a FB with a specific data connection.
- *
- * If the connection pointer is 0 then it is equal to a disconnect. Furthermore, if their is already a connection
- * to the given data port the connection attempt will be rejected. However if the further connection attempt
- * is done with the same connection object then it is a reconfiguration attempt for any data inputs. This is necessary
- * when during the first connection the data type of the connection was not clear.
- *
- * \param pa_unDINameId StringID of the data input name.
- * \param pa_poDataCon Pointer to the data connection the FB should be connected to.
- * \return TRUE on success, FALSE if data output not exists or output is already connected.
- */
- virtual bool connectDI(TPortId paDIPortId, CDataConnection *pa_poDataCon);
-
- /*! \brief Gets the index of the m_acDINames array of a specific data output of a FB
- *
- * \param pa_unDINameId StringId of the data input name.
- * \return Returns index of the Data Input Array of a FB
- */
- TPortId getDIID(CStringDictionary::TStringId pa_unDINameId) const{
- return getPortId(pa_unDINameId, m_pstInterfaceSpec->m_nNumDIs, m_pstInterfaceSpec->m_aunDINames);
- }
-
- /*!\brief Get the pointer to a data input of the FB.
- *
- * \param pa_unDINameId ID of the data input name.
- * \return Pointer to the data input or 0. If 0 is returned DataInput is ANY
- */
- CIEC_ANY* getDataInput(CStringDictionary::TStringId pa_unDINameId) const;
-
- /*!\brief get the pointer to a data input using the portId as identifier
- */
- CIEC_ANY* getDIFromPortId(TPortId paDIPortId) const;
-
- /*! \brief Gets the index of the m_acDONames array of a specific data output of a FB
- * \param pa_unDONameId StringId of the data input name.
- * \return Returns index of the Data Output Array of a FB
- */
- TPortId getDOID(CStringDictionary::TStringId pa_unDONameId) const{
- return getPortId(pa_unDONameId, m_pstInterfaceSpec->m_nNumDOs, m_pstInterfaceSpec->m_aunDONames);
- }
-
- /*!\brief get the pointer to a data output using the portId as identifier
- */
- CIEC_ANY* getDOFromPortId(TPortId paDOPortId) const;
-
- CDataConnection *getDOConnection(CStringDictionary::TStringId paDONameId) const;
-
- CDataConnection *getDIConnection(CStringDictionary::TStringId paDINameId) const;
-
- /*!\brief if the data output is of generic type (i.e, ANY) this function allows an data connection to configure
- * the DO with the specific type coming from the other end of the connection
- */
- virtual bool configureGenericDO(TPortId paDOPortId, const CIEC_ANY &paRefValue);
-
- /*!\brief Get the pointer to a data output of the FB.
- *
- * \param pa_unDONameId StringID of the data output name.
- * \return Pointer to the data output or 0. If 0 is returned DataOutput is ANY
- */
- CIEC_ANY* getDataOutput(CStringDictionary::TStringId pa_unDONameId) const;
-
- /*!\brief Get the pointer to a variable of the FB.
- *
- * @param paNameList array of the name hierarchy the requested variable
- * @param paNameListSize length of the array
- * \return Pointer to the variable or 0.
- * The variable may be input, output or in the case of a BFB an internal var.
- */
- virtual CIEC_ANY* getVar(CStringDictionary::TStringId *paNameList,
- unsigned int paNameListSize);
-
- /*!\brief Get the pointer to the adapter instance of the FB.
- *
- * \param pa_uAdapterNameId StringId of the adapter name.
- * \return Pointer to the data output or 0.
- */
- CAdapter* getAdapter(CStringDictionary::TStringId paAdapterNameId) const;
-
- TPortId getAdapterPortId(CStringDictionary::TStringId paAdapterNameId) const;
-
- /*!\brief Function that handles incoming events.
- *
- * \param paEIID ID of the input event that has occurred.
- * \param paExecEnv Event chain execution environment the FB will be executed in (used for adding output events).
- */
- void receiveInputEvent(size_t paEIID, CEventChainExecutionThread &paExecEnv);
-
- /*!\brief Configuration interface used by the typelib to parameterize generic function blocks.
- *
- * \param pa_acConfigString A string containing the needed configuration data.
- * \return TRUE if configuration went ok, else FALSE.
- *
- */
- virtual bool configureFB(const char *pa_acConfigString);
-
- void setupFBInterface(const SFBInterfaceSpec *pa_pstInterfaceSpec, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
-
- const SFBInterfaceSpec* getFBInterfaceSpec() const{
- return m_pstInterfaceSpec;
- }
-
-
- virtual EMGMResponse changeFBExecutionState(EMGMCommandType pa_unCommand);
-
- /*!\brief Get/set the instance name
- */
- CStringDictionary::TStringId getInstanceNameId(void) const{
- return m_nFBInstanceName;
- }
- ;
-
- const char *getInstanceName(void) const{
- return CStringDictionary::getInstance().get(m_nFBInstanceName);
- }
-
- void setInstanceNameId(const CStringDictionary::TStringId pa_nInstanceNameId){
- m_nFBInstanceName = pa_nInstanceNameId;
- }
-
- /*!\brief Get information if the runable object is deletable by a management command.
- *
- */
- bool getDeletable(void) const{
- return m_bDeletable;
- }
- ;
- /*!\brief Set attribute to enable/disable the runable object deletion by a management command.
- *
- */
- void setDeletable(const bool &pa_bDelAble){
- m_bDeletable = pa_bDelAble;
- }
- ;
- /*!\brief Return if the runable object is allowed to be deleted now.
- *
- * This is more complex then the simple deleteable flag as the current state has to be incorporated.
- * According to IEC 61499-1 Figure 24 an FB is deleteable if it is not in the Running state
- * \return true if currently all conditions are met to be deleteable
- */
- bool isCurrentlyDeleteable(void) const{
- return ((m_bDeletable) && (m_enFBState != e_RUNNING));
- }
-
- /*!\brief return the current execution state of the managed object
- */
- E_FBStates getState(void) const{
- return m_enFBState;
- }
-
- template<unsigned int ta_nNumEOs, unsigned int ta_nNumDIs, unsigned int ta_nNumDOs>
- struct genFBConnDataSizeTemplate{
- enum {
- value = (sizeof(CEventConnection) * ta_nNumEOs + sizeof(TDataConnectionPtr) * ta_nNumDIs +
- sizeof(CDataConnection) * ta_nNumDOs)
- };
- };
-
- static size_t genFBConnDataSize(unsigned int pa_nNumEOs, unsigned int pa_nNumDIs,
- unsigned int pa_nNumDOs){
- return (sizeof(CEventConnection) * pa_nNumEOs + sizeof(TDataConnectionPtr) * pa_nNumDIs +
- sizeof(CDataConnection) * pa_nNumDOs);
- }
-
- template<unsigned int ta_nNumDIs, unsigned int ta_nNumDOs, unsigned int ta_nNumAdapters = 0>
- struct genFBVarsDataSizeTemplate{
- enum {
- value = (sizeof(CIEC_ANY) * ta_nNumDIs + sizeof(CIEC_ANY) * ta_nNumDOs + sizeof(TAdapterPtr) * ta_nNumAdapters)
- };
- };
-
- static size_t genFBVarsDataSize(unsigned int pa_nNumDIs, unsigned int pa_nNumDOs,
- unsigned int pa_nNumAdapters = 0){
- return (sizeof(CIEC_ANY) * pa_nNumDIs + sizeof(CIEC_ANY) * pa_nNumDOs + sizeof(TAdapterPtr) * pa_nNumAdapters);
-
- }
-
- /*! \brief Get the data input with given number
- *
- * Attention this function will not perform any range checks on the pa_nDINum parameter!
- * @param pa_nDINum number of the data input starting with 0
- * @return pointer to the data input
- */
- TIEC_ANYPtr getDI(unsigned int pa_nDINum) const {
- return m_aoDIs + pa_nDINum;
- }
-
- /*! \brief Get the data output with given number
- *
- * Attention this function will not perform any range checks on the pa_nDONum parameter!
- * @param pa_nDONum number of the data output starting with 0
- * @return pointer to the data output
- */
- CIEC_ANY *getDO(unsigned int pa_nDONum) const{
- return m_aoDOs + pa_nDONum;
- }
-
-#ifdef FORTE_SUPPORT_MONITORING
- TForteUInt32 &getEIMonitorData(TEventID paEIID);
-
- TForteUInt32 &getEOMonitorData(TEventID paEOID);
-
- /*!\brief get any internal FB referenced by the iterator to the name list
- *
- * This allows that also adapters and the internals of a CFB can be monitored.
- */
- virtual CFunctionBlock *getFB(forte::core::TNameIdentifier::CIterator &paNameListIt);
-
-#endif //FORTE_SUPPORT_MONITORING
- protected:
-
- /*!\brief The main constructor for a function block.
- *
- * \param pa_poSrcRes pointer to the resource this function block is contained in (mainly necessary for management functions and service interfaces)
- * \param pa_pstInterfaceSpec const pointer to the interface spec
- * \param pa_nInstanceNameId string id
- * \param pa_acFBConnData Byte-array for fb-specific connection data. It will need space for the event output connections,
- * data input connections, and data output connections, in that order. The space requirements are:
- * sizeof(TEventConnectionPtr) * Number of Event outputs +
- * sizeof(TDataConnectionPtr) * Number of Data inputs +
- * sizeof(TDataConnectionPtr) * Number of Data outputs
- * \param pa_acFBVarsData Byte-array for fb-specific variable data. It will need space for the data inputs, data outputs, and adapters in that order.
- * The space requirements are:
- * sizeof(CIEC_ANY)) * Number of Data inputs +
- * sizeof(CIEC_ANY)) * Number of Data outputs +
- * sizeof(TAdapterPtr) * ta_nNumAdapters
- */
- CFunctionBlock(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData,
- TForteByte *pa_acFBVarsData);
-
- static TPortId getPortId(CStringDictionary::TStringId pa_unPortNameId,
- TPortId pa_unMaxPortNames, const CStringDictionary::TStringId* pa_aunPortNames);
-
- /*!\brief Function to send an output event of the FB.
- *
- * \param pa_nEO Event output ID where event should be fired.
- */
- void sendOutputEvent(size_t paEO);
-
- /*!\brief Function to send an output event via the adapter.
- *
- * \param pa_nAdapterID ID of Adapter in current FBs adapter list.
- * \param pa_nEID Event ID where event should be fired.
- */
- void sendAdapterEvent(size_t paAdapterID, size_t paEID) const;
-
- void setupAdapters(const SFBInterfaceSpec *pa_pstInterfaceSpec, TForteByte *pa_acFBData);
-
-
- CEventConnection *getEOConUnchecked(TPortId paEONum) const {
- return (mEOConns + paEONum);
- }
-
- /*! \brief Get the data output connection with given number
- *
- * Attention this function will not perform any range checks on the pa_nDONum parameter!
- * @param pa_nDONum number of the data output starting with 0
- * @return pointer to the data output connection
- */
- CDataConnection *getDOConUnchecked(TPortId paDONum){
- return mDOConns + paDONum;
- }
-
- /*!\brief Function to create an data type instance of given type
- *
- * @param pa_panDataTypeIds pointer to the data type ids. If the datatype
- * is an Array to more values are taken from the array. If the given
- * type is Any 0 is returned as necessary for maintaining the FB's interface.
- * The functions puts the pointer in the datatype array to the next data point's id.
- * @param pa_acDataBuf pointer to the data buffer which should be used by the data type to create
- * @return on success... pointer to the datatype instance
- * on error... 0
- */
- static CIEC_ANY *createDataPoint(const CStringDictionary::TStringId **pa_panDataTypeIds,
- TForteByte *pa_acDataBuf);
-
- void freeAllData();
-
- /*!\brief Get the time elapsed since forte was started
- *
- * This function allows algorithms to easily access the current forte time in IEC 61131-3 units.
- * @return the time elapsed since forte was started
- */
- const CIEC_TIME TIME();
-
- const SFBInterfaceSpec* m_pstInterfaceSpec; //!< Pointer to the interface specification
- CEventConnection *mEOConns; //!< A list of event connections pointers storing for each event output the event connection. If the output event is not connected the pointer is 0.
- TDataConnectionPtr *m_apoDIConns; //!< A list of data connections pointers storing for each data input the data connection. If the data input is not connected the pointer is 0.
- CDataConnection *mDOConns; //!< A list of data connections pointers storing for each data output the data connection. If the data output is not connected the pointer is 0.
- CEventChainExecutionThread *m_poInvokingExecEnv; //!< A pointer to the execution thread that invoked the FB. This value is stored here to reduce function parameters and reduce therefore stack usage.
- CAdapter **m_apoAdapters; //!< A list of pointers to the adapters. This allows to implement a general getAdapter().
-
- private:
- /*!\brief Function providing the functionality of the FB (e.g. execute ECC for basic FBs).
- *
- * \param pa_nEIID Event input ID where event occurred.
- */
- virtual void executeEvent(int pa_nEIID) = 0;
-
- /*!\brief Set the initial values of data inputs, outputs, and internal vars.
- *
- * Functionblocks which need to specify special initial values for their
- * data inputs, outputs, or internal vars other than 0 need to implement this
- * function. The function will be invoked on entering the IDLE state (i.e.,
- * on creation and on RESET).
- */
- virtual void setInitialValues(){
- }
-
- //!declared but undefined copy constructor as we don't want FBs to be directly copied.
- CFunctionBlock(const CFunctionBlock&);
-
- void configureGenericDI(TPortId paDIPortId, const CIEC_ANY *paRefValue);
-
- CResource *m_poResource; //!< A pointer to the resource containing the function block.
- CIEC_ANY *m_aoDIs; //!< A list of pointers to the data inputs. This allows to implement a general getDataInput()
- CIEC_ANY *m_aoDOs; //!< A list of pointers to the data outputs. This allows to implement a general getDataOutput()
-
-#ifdef FORTE_SUPPORT_MONITORING
- void setupEventMonitoringData();
-
- // monitoring stuff
- TForteUInt32 *mEOMonitorCount;
- TForteUInt32 *mEIMonitorCount;
-#endif
-
- //! the instance name of the object
- CStringDictionary::TStringId m_nFBInstanceName;
-
- /*!\brief Current state of the runnable object.
- *
- */
- E_FBStates m_enFBState;
-
- /*!\brief Attribute defines if runnable object can be deleted by a management command.
- *
- * Default value is set to true.
- * If the runnable object is declared in a device or resource specification it must be set to false.
- */
- bool m_bDeletable;
-
- //FIXME remove these friends
- friend class CAdapter;
-
-#ifdef FORTE_SUPPORT_MONITORING
- friend class forte::core::CMonitoringHandler;
-#endif //FORTE_SUPPORT_MONITORING
-
-#ifdef FORTE_FMU
- friend class fmuInstance;
-#endif //FORTE_FMU
-};
-
-template<>
-struct CFunctionBlock::genFBConnDataSizeTemplate<0, 0, 0>{
- enum {
- value = 1
- };
-};
-
-template<>
-struct CFunctionBlock::genFBVarsDataSizeTemplate<0, 0, 0>{
- enum {
- value = 1
- };
-};
-
-typedef CFunctionBlock *TFunctionBlockPtr;
-
-#define FUNCTION_BLOCK_CTOR(fbclass) \
- fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
- CFunctionBlock( pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
-
-#define FUNCTION_BLOCK_CTOR_WITH_BASE_CLASS(fbclass, fbBaseClass) \
- fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
- fbBaseClass( pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
-
-
-#ifdef IN
-#undef IN
-#endif
-
-#ifdef OUT
-#undef OUT
-#endif
-
-#ifdef OPTIONAL
-#undef OPTIONAL
-#endif
-
-#endif /*_FUNCBLOC_H_*/
+/*******************************************************************************
+ * Copyright (c) 2005 - 2018 ACIN, Profactor GmbH, nxtControl GmbH, fortiss GmbH,
+ * Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser, Gunnar Grabmaier, Smodic Rene,
+ * Gerhard Ebenhofer, Michael Hofmann, Martin Melik Merkumians, Ingo Hegny,
+ * Stanislav Meduna, Patrick Smejkal,
+ * - initial implementation and rework communication infrastructure
+ * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
+ *******************************************************************************/
+#ifndef _FUNCBLOC_H_
+#define _FUNCBLOC_H_
+
+#include <forte_config.h>
+#include "mgmcmd.h"
+#include "event.h"
+#include "dataconn.h"
+#include "eventconn.h"
+#include "stringdict.h"
+#include "../arch/devlog.h"
+#include "iec61131_functions.h"
+#include <stringlist.h>
+
+class CEventChainExecutionThread;
+class CAdapter;
+class CTimerHandler;
+
+#ifdef FORTE_SUPPORT_MONITORING
+#include "mgmcmdstruct.h"
+namespace forte {
+ namespace core {
+ class CMonitoringHandler;
+ }
+}
+#endif //FORTE_SUPPORT_MONITORING
+
+#ifndef FORTE_FB_DATA_ARRAY //with this check we can overwrite this define in a platform specific file (e.g., config.h)
+/*! Define that adds the data array to a SIFB, simple FB or CFB
+ * May be overwritten by a platform specific version that adapts for example some alignment requirements
+ */
+#define FORTE_FB_DATA_ARRAY(a_nNumEOs, a_nNumDIs, a_nNumDOs, a_nNumAdapters) \
+ union{ \
+ TForteByte m_anFBConnData[genFBConnDataSizeTemplate<a_nNumEOs, a_nNumDIs, a_nNumDOs>::value]; \
+ void *m_apoDummyConnPointerAlign; \
+ };\
+ union{ \
+ TForteByte m_anFBVarsData[genFBVarsDataSizeTemplate<a_nNumDIs, a_nNumDOs, a_nNumAdapters>::value]; \
+ CIEC_ANY::TLargestUIntValueType m_uDummyDataAlign; \
+ };
+#endif
+
+typedef CAdapter *TAdapterPtr;
+
+typedef TForteUInt8 TDataIOID; //!< \ingroup CORE Type for holding an data In- or output ID (max value 254)
+
+/*!\ingroup CORE\brief Structure to hold all data of adapters instantiated in the function block.
+ */
+struct SAdapterInstanceDef{
+ CStringDictionary::TStringId m_nAdapterTypeNameID; //!< Adapter type name
+ CStringDictionary::TStringId m_nAdapterNameID; //!< Adapter instance name
+ bool m_bIsPlug; //!< Flag for distinction of adapter nature (plug/socket)
+};
+
+/*!\ingroup CORE\brief Structure to hold all the data for specifying a function block interface.
+ */
+struct SFBInterfaceSpec{
+ TForteUInt8 m_nNumEIs; //!< Number of event inputs (max 254)
+ const CStringDictionary::TStringId* m_aunEINames; //!< List of the event input names
+ const TDataIOID* m_anEIWith; //!< Input WITH reference list. This list contains an array of input data ids. For each input event the associated data inputs are listed. The start for each input event is specified in the m_anEIWithIndexes field. The end is defined trough the value 255.
+ const TForteInt16* m_anEIWithIndexes; //!< Index list for each input event. This list gives for each input event an entry in the m_anEIWith. Input events are numbered starting from 0. if the input event has no assciated data inputs -1 is the entry at this event inputs postion.
+ TForteUInt8 m_nNumEOs; //!< Number of event outputs (max 254)
+ const CStringDictionary::TStringId* m_aunEONames; //!< List of the event output names
+ const TDataIOID* m_anEOWith; //!< Output WITH reference list. This list contains an array of output data ids. For each output event the associated data outputs are listed. The start for each output event is specified in the m_anEOWithIndexes field. The end is defined trough the value 255.
+ const TForteInt16* m_anEOWithIndexes; //!< Index list for each output event. This list gives for each output event an entry in the m_anEOWith. Output events are numbered starting from 0. if the output event has no assciated data outputs -1 is the entry at this event outputs postion. Additionally at the postion m_nNumEOs in this list an index to an own list in the m_anEOWith list is stored specifying all output data port that are not associated with any output event. That values will be updated on every FB invocation.
+ TForteUInt8 m_nNumDIs; //!< Number of data inputs (max 254)
+ const CStringDictionary::TStringId* m_aunDINames; //!< List of the data input names
+ const CStringDictionary::TStringId* m_aunDIDataTypeNames; //!< List of the data type names for the data inputs
+ TForteUInt8 m_nNumDOs; //!< Number of data outputs (max 254)
+ const CStringDictionary::TStringId* m_aunDONames; //!< List of the data output names
+ const CStringDictionary::TStringId* m_aunDODataTypeNames; //!< List of the data type names for the data outputs
+ TForteUInt8 m_nNumAdapters; //!< Number of Adapters
+ const SAdapterInstanceDef* m_pstAdapterInstanceDefinition; //!< List of adapter instances
+};
+
+/*!\ingroup CORE\brief Base class for all function blocks.
+ */
+class CFunctionBlock{
+ public:
+ const static TDataIOID scmWithListDelimiter = cg_unInvalidPortId; //!< value identifying the end of a with list
+
+ /*!\brief Possible states of a runable object.
+ *
+ */
+ enum E_FBStates{
+ e_RUNNING = 0, // in the most critical execution path of FORTE we are checking for this enum value it is faster if this is the zero entry
+ e_IDLE, e_STOPPED, e_KILLED
+ };
+
+ /*! \brief Indicator that the given EventID is an included adapter's eventID.
+ *
+ * This will allow 255 Input and Output Events.
+ *
+ * EventIDs > scm_nMaxInterfaceEvents: highByte indicates (AdapterID+1)
+ */
+ static const TForteUInt16 scm_nMaxInterfaceEvents = 0x00FF;
+
+ virtual ~CFunctionBlock();
+
+ /*!\brief Get the resource the function block is contained in.
+ */
+ CResource &getResource(void){
+ return *m_poResource;
+ }
+
+ CResource *getResourcePtr(void){
+ return m_poResource;
+ }
+
+ /*!\brief Get the timer of the device wher the FB is contained.
+ */
+ CTimerHandler& getTimer(void);
+
+ /*!\brief Returns the type of this FB instance
+ */
+ virtual CStringDictionary::TStringId getFBTypeId(void) const = 0;
+ /*!\brief Get the ID of a specific event input of the FB.
+ *
+ * \param pa_unEINameId StringId to the event input name.
+ * \return The ID of the event input or cg_nInvalidEventID.
+ */
+ TEventID getEIID(CStringDictionary::TStringId pa_unEINameId) const{
+ return static_cast<TEventID>(getPortId(pa_unEINameId, m_pstInterfaceSpec->m_nNumEIs, m_pstInterfaceSpec->m_aunEINames));
+ }
+
+ /*!\brief Get the ID of a specific event output of the FB.
+ *
+ * \param pa_unEONameId string id to the event output name.
+ * \return The ID of the event output or cg_nInvalidEventID.
+ */
+ TEventID getEOID(CStringDictionary::TStringId pa_unEONameId) const{
+ return static_cast<TEventID>(getPortId(pa_unEONameId, m_pstInterfaceSpec->m_nNumEOs, m_pstInterfaceSpec->m_aunEONames));
+ }
+
+ CEventConnection *getEOConnection(CStringDictionary::TStringId paEONameId) const;
+
+ /*!\brief Connects specific data input of a FB with a specific data connection.
+ *
+ * If the connection pointer is 0 then it is equal to a disconnect. Furthermore, if their is already a connection
+ * to the given data port the connection attempt will be rejected. However if the further connection attempt
+ * is done with the same connection object then it is a reconfiguration attempt for any data inputs. This is necessary
+ * when during the first connection the data type of the connection was not clear.
+ *
+ * \param pa_unDINameId StringID of the data input name.
+ * \param pa_poDataCon Pointer to the data connection the FB should be connected to.
+ * \return TRUE on success, FALSE if data output not exists or output is already connected.
+ */
+ virtual bool connectDI(TPortId paDIPortId, CDataConnection *pa_poDataCon);
+
+ /*! \brief Gets the index of the m_acDINames array of a specific data output of a FB
+ *
+ * \param pa_unDINameId StringId of the data input name.
+ * \return Returns index of the Data Input Array of a FB
+ */
+ TPortId getDIID(CStringDictionary::TStringId pa_unDINameId) const{
+ return getPortId(pa_unDINameId, m_pstInterfaceSpec->m_nNumDIs, m_pstInterfaceSpec->m_aunDINames);
+ }
+
+ /*!\brief Get the pointer to a data input of the FB.
+ *
+ * \param pa_unDINameId ID of the data input name.
+ * \return Pointer to the data input or 0. If 0 is returned DataInput is ANY
+ */
+ CIEC_ANY* getDataInput(CStringDictionary::TStringId pa_unDINameId) const;
+
+ /*!\brief get the pointer to a data input using the portId as identifier
+ */
+ CIEC_ANY* getDIFromPortId(TPortId paDIPortId) const;
+
+ /*! \brief Gets the index of the m_acDONames array of a specific data output of a FB
+ * \param pa_unDONameId StringId of the data input name.
+ * \return Returns index of the Data Output Array of a FB
+ */
+ TPortId getDOID(CStringDictionary::TStringId pa_unDONameId) const{
+ return getPortId(pa_unDONameId, m_pstInterfaceSpec->m_nNumDOs, m_pstInterfaceSpec->m_aunDONames);
+ }
+
+ /*!\brief get the pointer to a data output using the portId as identifier
+ */
+ CIEC_ANY* getDOFromPortId(TPortId paDOPortId) const;
+
+ CDataConnection *getDOConnection(CStringDictionary::TStringId paDONameId) const;
+
+ CDataConnection *getDIConnection(CStringDictionary::TStringId paDINameId) const;
+
+ /*!\brief if the data output is of generic type (i.e, ANY) this function allows an data connection to configure
+ * the DO with the specific type coming from the other end of the connection
+ */
+ virtual bool configureGenericDO(TPortId paDOPortId, const CIEC_ANY &paRefValue);
+
+ /*!\brief Get the pointer to a data output of the FB.
+ *
+ * \param pa_unDONameId StringID of the data output name.
+ * \return Pointer to the data output or 0. If 0 is returned DataOutput is ANY
+ */
+ CIEC_ANY* getDataOutput(CStringDictionary::TStringId pa_unDONameId) const;
+
+ /*!\brief Get the pointer to a variable of the FB.
+ *
+ * @param paNameList array of the name hierarchy the requested variable
+ * @param paNameListSize length of the array
+ * \return Pointer to the variable or 0.
+ * The variable may be input, output or in the case of a BFB an internal var.
+ */
+ virtual CIEC_ANY* getVar(CStringDictionary::TStringId *paNameList,
+ unsigned int paNameListSize);
+
+ /*!\brief Get the pointer to the adapter instance of the FB.
+ *
+ * \param pa_uAdapterNameId StringId of the adapter name.
+ * \return Pointer to the data output or 0.
+ */
+ CAdapter* getAdapter(CStringDictionary::TStringId paAdapterNameId) const;
+
+ TPortId getAdapterPortId(CStringDictionary::TStringId paAdapterNameId) const;
+
+ /*!\brief Function that handles incoming events.
+ *
+ * \param paEIID ID of the input event that has occurred.
+ * \param paExecEnv Event chain execution environment the FB will be executed in (used for adding output events).
+ */
+ void receiveInputEvent(size_t paEIID, CEventChainExecutionThread &paExecEnv);
+
+ /*!\brief Configuration interface used by the typelib to parameterize generic function blocks.
+ *
+ * \param pa_acConfigString A string containing the needed configuration data.
+ * \return TRUE if configuration went ok, else FALSE.
+ *
+ */
+ virtual bool configureFB(const char *pa_acConfigString);
+
+ void setupFBInterface(const SFBInterfaceSpec *pa_pstInterfaceSpec, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
+
+ const SFBInterfaceSpec* getFBInterfaceSpec() const{
+ return m_pstInterfaceSpec;
+ }
+
+
+ virtual EMGMResponse changeFBExecutionState(EMGMCommandType pa_unCommand);
+
+ /*!\brief Get/set the instance name
+ */
+ CStringDictionary::TStringId getInstanceNameId(void) const{
+ return m_nFBInstanceName;
+ }
+ ;
+
+ const char *getInstanceName(void) const{
+ return CStringDictionary::getInstance().get(m_nFBInstanceName);
+ }
+
+ void setInstanceNameId(const CStringDictionary::TStringId pa_nInstanceNameId){
+ m_nFBInstanceName = pa_nInstanceNameId;
+ }
+
+ /*!\brief Get information if the runable object is deletable by a management command.
+ *
+ */
+ bool getDeletable(void) const{
+ return m_bDeletable;
+ }
+ ;
+ /*!\brief Set attribute to enable/disable the runable object deletion by a management command.
+ *
+ */
+ void setDeletable(const bool &pa_bDelAble){
+ m_bDeletable = pa_bDelAble;
+ }
+ ;
+ /*!\brief Return if the runable object is allowed to be deleted now.
+ *
+ * This is more complex then the simple deleteable flag as the current state has to be incorporated.
+ * According to IEC 61499-1 Figure 24 an FB is deleteable if it is not in the Running state
+ * \return true if currently all conditions are met to be deleteable
+ */
+ bool isCurrentlyDeleteable(void) const{
+ return ((m_bDeletable) && (m_enFBState != e_RUNNING));
+ }
+
+ /*!\brief return the current execution state of the managed object
+ */
+ E_FBStates getState(void) const{
+ return m_enFBState;
+ }
+
+ template<unsigned int ta_nNumEOs, unsigned int ta_nNumDIs, unsigned int ta_nNumDOs>
+ struct genFBConnDataSizeTemplate{
+ enum {
+ value = (sizeof(CEventConnection) * ta_nNumEOs + sizeof(TDataConnectionPtr) * ta_nNumDIs +
+ sizeof(CDataConnection) * ta_nNumDOs)
+ };
+ };
+
+ static size_t genFBConnDataSize(unsigned int pa_nNumEOs, unsigned int pa_nNumDIs,
+ unsigned int pa_nNumDOs){
+ return (sizeof(CEventConnection) * pa_nNumEOs + sizeof(TDataConnectionPtr) * pa_nNumDIs +
+ sizeof(CDataConnection) * pa_nNumDOs);
+ }
+
+ template<unsigned int ta_nNumDIs, unsigned int ta_nNumDOs, unsigned int ta_nNumAdapters = 0>
+ struct genFBVarsDataSizeTemplate{
+ enum {
+ value = (sizeof(CIEC_ANY) * ta_nNumDIs + sizeof(CIEC_ANY) * ta_nNumDOs + sizeof(TAdapterPtr) * ta_nNumAdapters)
+ };
+ };
+
+ static size_t genFBVarsDataSize(unsigned int pa_nNumDIs, unsigned int pa_nNumDOs,
+ unsigned int pa_nNumAdapters = 0){
+ return (sizeof(CIEC_ANY) * pa_nNumDIs + sizeof(CIEC_ANY) * pa_nNumDOs + sizeof(TAdapterPtr) * pa_nNumAdapters);
+
+ }
+
+ /*! \brief Get the data input with given number
+ *
+ * Attention this function will not perform any range checks on the pa_nDINum parameter!
+ * @param pa_nDINum number of the data input starting with 0
+ * @return pointer to the data input
+ */
+ TIEC_ANYPtr getDI(unsigned int pa_nDINum) const {
+ return m_aoDIs + pa_nDINum;
+ }
+
+ /*! \brief Get the data output with given number
+ *
+ * Attention this function will not perform any range checks on the pa_nDONum parameter!
+ * @param pa_nDONum number of the data output starting with 0
+ * @return pointer to the data output
+ */
+ CIEC_ANY *getDO(unsigned int pa_nDONum) const{
+ return m_aoDOs + pa_nDONum;
+ }
+
+#ifdef FORTE_SUPPORT_MONITORING
+ TForteUInt32 &getEIMonitorData(TEventID paEIID);
+
+ TForteUInt32 &getEOMonitorData(TEventID paEOID);
+
+ /*!\brief get any internal FB referenced by the iterator to the name list
+ *
+ * This allows that also adapters and the internals of a CFB can be monitored.
+ */
+ virtual CFunctionBlock *getFB(forte::core::TNameIdentifier::CIterator &paNameListIt);
+
+#endif //FORTE_SUPPORT_MONITORING
+ protected:
+
+ /*!\brief The main constructor for a function block.
+ *
+ * \param pa_poSrcRes pointer to the resource this function block is contained in (mainly necessary for management functions and service interfaces)
+ * \param pa_pstInterfaceSpec const pointer to the interface spec
+ * \param pa_nInstanceNameId string id
+ * \param pa_acFBConnData Byte-array for fb-specific connection data. It will need space for the event output connections,
+ * data input connections, and data output connections, in that order. The space requirements are:
+ * sizeof(TEventConnectionPtr) * Number of Event outputs +
+ * sizeof(TDataConnectionPtr) * Number of Data inputs +
+ * sizeof(TDataConnectionPtr) * Number of Data outputs
+ * \param pa_acFBVarsData Byte-array for fb-specific variable data. It will need space for the data inputs, data outputs, and adapters in that order.
+ * The space requirements are:
+ * sizeof(CIEC_ANY)) * Number of Data inputs +
+ * sizeof(CIEC_ANY)) * Number of Data outputs +
+ * sizeof(TAdapterPtr) * ta_nNumAdapters
+ */
+ CFunctionBlock(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
+ const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData,
+ TForteByte *pa_acFBVarsData);
+
+ static TPortId getPortId(CStringDictionary::TStringId pa_unPortNameId,
+ TPortId pa_unMaxPortNames, const CStringDictionary::TStringId* pa_aunPortNames);
+
+ /*!\brief Function to send an output event of the FB.
+ *
+ * \param pa_nEO Event output ID where event should be fired.
+ */
+ void sendOutputEvent(size_t paEO);
+
+ /*!\brief Function to send an output event via the adapter.
+ *
+ * \param pa_nAdapterID ID of Adapter in current FBs adapter list.
+ * \param pa_nEID Event ID where event should be fired.
+ */
+ void sendAdapterEvent(size_t paAdapterID, size_t paEID) const;
+
+ void setupAdapters(const SFBInterfaceSpec *pa_pstInterfaceSpec, TForteByte *pa_acFBData);
+
+
+ CEventConnection *getEOConUnchecked(TPortId paEONum) const {
+ return (mEOConns + paEONum);
+ }
+
+ /*! \brief Get the data output connection with given number
+ *
+ * Attention this function will not perform any range checks on the pa_nDONum parameter!
+ * @param pa_nDONum number of the data output starting with 0
+ * @return pointer to the data output connection
+ */
+ CDataConnection *getDOConUnchecked(TPortId paDONum){
+ return mDOConns + paDONum;
+ }
+
+ /*!\brief Function to create an data type instance of given type
+ *
+ * @param pa_panDataTypeIds pointer to the data type ids. If the datatype
+ * is an Array to more values are taken from the array. If the given
+ * type is Any 0 is returned as necessary for maintaining the FB's interface.
+ * The functions puts the pointer in the datatype array to the next data point's id.
+ * @param pa_acDataBuf pointer to the data buffer which should be used by the data type to create
+ * @return on success... pointer to the datatype instance
+ * on error... 0
+ */
+ static CIEC_ANY *createDataPoint(const CStringDictionary::TStringId **pa_panDataTypeIds,
+ TForteByte *pa_acDataBuf);
+
+ void freeAllData();
+
+ const SFBInterfaceSpec* m_pstInterfaceSpec; //!< Pointer to the interface specification
+ CEventConnection *mEOConns; //!< A list of event connections pointers storing for each event output the event connection. If the output event is not connected the pointer is 0.
+ TDataConnectionPtr *m_apoDIConns; //!< A list of data connections pointers storing for each data input the data connection. If the data input is not connected the pointer is 0.
+ CDataConnection *mDOConns; //!< A list of data connections pointers storing for each data output the data connection. If the data output is not connected the pointer is 0.
+ CEventChainExecutionThread *m_poInvokingExecEnv; //!< A pointer to the execution thread that invoked the FB. This value is stored here to reduce function parameters and reduce therefore stack usage.
+ CAdapter **m_apoAdapters; //!< A list of pointers to the adapters. This allows to implement a general getAdapter().
+
+ private:
+ /*!\brief Function providing the functionality of the FB (e.g. execute ECC for basic FBs).
+ *
+ * \param pa_nEIID Event input ID where event occurred.
+ */
+ virtual void executeEvent(int pa_nEIID) = 0;
+
+ /*!\brief Set the initial values of data inputs, outputs, and internal vars.
+ *
+ * Functionblocks which need to specify special initial values for their
+ * data inputs, outputs, or internal vars other than 0 need to implement this
+ * function. The function will be invoked on entering the IDLE state (i.e.,
+ * on creation and on RESET).
+ */
+ virtual void setInitialValues(){
+ }
+
+ //!declared but undefined copy constructor as we don't want FBs to be directly copied.
+ CFunctionBlock(const CFunctionBlock&);
+
+ void configureGenericDI(TPortId paDIPortId, const CIEC_ANY *paRefValue);
+
+ CResource *m_poResource; //!< A pointer to the resource containing the function block.
+ CIEC_ANY *m_aoDIs; //!< A list of pointers to the data inputs. This allows to implement a general getDataInput()
+ CIEC_ANY *m_aoDOs; //!< A list of pointers to the data outputs. This allows to implement a general getDataOutput()
+
+#ifdef FORTE_SUPPORT_MONITORING
+ void setupEventMonitoringData();
+
+ // monitoring stuff
+ TForteUInt32 *mEOMonitorCount;
+ TForteUInt32 *mEIMonitorCount;
+#endif
+
+ //! the instance name of the object
+ CStringDictionary::TStringId m_nFBInstanceName;
+
+ /*!\brief Current state of the runnable object.
+ *
+ */
+ E_FBStates m_enFBState;
+
+ /*!\brief Attribute defines if runnable object can be deleted by a management command.
+ *
+ * Default value is set to true.
+ * If the runnable object is declared in a device or resource specification it must be set to false.
+ */
+ bool m_bDeletable;
+
+ //FIXME remove these friends
+ friend class CAdapter;
+
+#ifdef FORTE_SUPPORT_MONITORING
+ friend class forte::core::CMonitoringHandler;
+#endif //FORTE_SUPPORT_MONITORING
+
+#ifdef FORTE_FMU
+ friend class fmuInstance;
+#endif //FORTE_FMU
+};
+
+template<>
+struct CFunctionBlock::genFBConnDataSizeTemplate<0, 0, 0>{
+ enum {
+ value = 1
+ };
+};
+
+template<>
+struct CFunctionBlock::genFBVarsDataSizeTemplate<0, 0, 0>{
+ enum {
+ value = 1
+ };
+};
+
+typedef CFunctionBlock *TFunctionBlockPtr;
+
+#define FUNCTION_BLOCK_CTOR(fbclass) \
+ fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
+ CFunctionBlock( pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
+
+#define FUNCTION_BLOCK_CTOR_WITH_BASE_CLASS(fbclass, fbBaseClass) \
+ fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
+ fbBaseClass( pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
+
+
+#ifdef IN
+#undef IN
+#endif
+
+#ifdef OUT
+#undef OUT
+#endif
+
+#ifdef OPTIONAL
+#undef OPTIONAL
+#endif
+
+#endif /*_FUNCBLOC_H_*/
diff --git a/src/core/genfb.h b/src/core/genfb.h
index 0d6bd88..fbe638d 100644
--- a/src/core/genfb.h
+++ b/src/core/genfb.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial implementation and rework communication infrastructure
@@ -33,10 +34,11 @@
static void generateGenericInterfacePointNameArray(const char * const paPrefix,
- CStringDictionary::TStringId* paNamesArayStart, unsigned int paNumGenericDataPoints);
+ CStringDictionary::TStringId* paNamesArayStart,
+ size_t paNumGenericDataPoints);
static void generateGenericDataPointArrays(const char * const paPrefix,
CStringDictionary::TStringId* paDataTypeNamesArrayStart,
- CStringDictionary::TStringId* paNamesArrayStart, unsigned int paNumGenericDataPoints);
+ CStringDictionary::TStringId* paNamesArrayStart, size_t paNumGenericDataPoints);
private:
/*! \brief parse the config string and generate the according interface specification
diff --git a/src/core/genfb.tpp b/src/core/genfb.tpp
index 5bda9a7..5ef36a2 100644
--- a/src/core/genfb.tpp
+++ b/src/core/genfb.tpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial implementation and rework communication infrastructure
@@ -44,12 +45,13 @@
}
template<class T>
-void CGenFunctionBlock<T>::generateGenericInterfacePointNameArray(const char * const paPrefix, CStringDictionary::TStringId* paNamesArayStart, unsigned int paNumGenericDataPoints){
+void CGenFunctionBlock<T>::generateGenericInterfacePointNameArray(const char * const paPrefix, CStringDictionary::TStringId* paNamesArayStart,
+ size_t paNumGenericDataPoints) {
size_t len = strlen(paPrefix);
unsigned int noOfDigits = 0;
{
- unsigned int tempNum = paNumGenericDataPoints;
+ size_t tempNum = paNumGenericDataPoints;
while(tempNum){
tempNum /= 10;
noOfDigits++;
@@ -63,7 +65,7 @@
acBuffer[len + i] = '\0';
}
- for(unsigned int i = 1; i <= paNumGenericDataPoints; i++){
+ for(size_t i = 1; i <= paNumGenericDataPoints; i++) {
if(i < 10){ //1 digit
acBuffer[len] = static_cast<char>(0x30 + i);
}
@@ -91,7 +93,8 @@
}
template<class T>
-void CGenFunctionBlock<T>::generateGenericDataPointArrays(const char * const paPrefix, CStringDictionary::TStringId* paDataTypeNamesArrayStart, CStringDictionary::TStringId* paNamesArrayStart, unsigned int paNumGenericDataPoints){
+void CGenFunctionBlock<T>::generateGenericDataPointArrays(const char * const paPrefix, CStringDictionary::TStringId* paDataTypeNamesArrayStart,
+ CStringDictionary::TStringId* paNamesArrayStart, size_t paNumGenericDataPoints) {
generateGenericInterfacePointNameArray(paPrefix, paNamesArrayStart, paNumGenericDataPoints);
for(size_t i = 0; i < paNumGenericDataPoints; i++){
diff --git a/src/core/iec61131_cast_helper.h b/src/core/iec61131_cast_helper.h
index 5f69322..41d960f 100644
--- a/src/core/iec61131_cast_helper.h
+++ b/src/core/iec61131_cast_helper.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians
diff --git a/src/core/iec61131_functions.cpp b/src/core/iec61131_functions.cpp
index e7c3afd..41458ce 100644
--- a/src/core/iec61131_functions.cpp
+++ b/src/core/iec61131_functions.cpp
@@ -1,16 +1,20 @@
/*******************************************************************************
- * Copyright (c) 2011 - 2013, 2018 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2011 - 2013, 2018 ACIN, fortiss GmbH, 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger
* - initial implementation and rework communication infrastructure
+ * Martin Melik Merkumians - adds NOW and NOW_MONOTONIC functions
*******************************************************************************/
#include "iec61131_functions.h"
+#include "forte_architecture_time.h"
+
template<> const CIEC_BOOL NOT<CIEC_BOOL>(const CIEC_BOOL& pa_roIN){
return CIEC_BOOL(!pa_roIN);
}
@@ -29,36 +33,36 @@
#ifdef FORTE_USE_64BIT_DATATYPES
const CIEC_TIME_OF_DAY ADD_TOD_TIME(const CIEC_TIME_OF_DAY& pa_roIN1, const CIEC_TIME& pa_roIN2){
- return static_cast<TForteUInt64>(pa_roIN1 + pa_roIN2.getInMiliSeconds());
+ return static_cast<TForteUInt64>(pa_roIN1 + pa_roIN2.getInMilliSeconds());
}
const CIEC_DATE_AND_TIME ADD_DT_TIME(const CIEC_DATE_AND_TIME& pa_roIN1, const CIEC_TIME& pa_roIN2){
- return static_cast<TForteUInt64>(pa_roIN1 + pa_roIN2.getInMiliSeconds());
+ return static_cast<TForteUInt64>(pa_roIN1 + pa_roIN2.getInMilliSeconds());
}
const CIEC_TIME_OF_DAY SUB_TOD_TIME(const CIEC_TIME_OF_DAY& pa_roIN1, const CIEC_TIME& pa_roIN2){
- return static_cast<TForteUInt64>(pa_roIN1 - pa_roIN2.getInMiliSeconds());
+ return static_cast<TForteUInt64>(pa_roIN1 - pa_roIN2.getInMilliSeconds());
}
const CIEC_DATE_AND_TIME SUB_DT_TIME(const CIEC_DATE_AND_TIME& pa_roIN1, const CIEC_TIME& pa_roIN2){
- return static_cast<TForteUInt64>(pa_roIN1 - pa_roIN2.getInMiliSeconds());
+ return static_cast<TForteUInt64>(pa_roIN1 - pa_roIN2.getInMilliSeconds());
}
const CIEC_TIME SUB_DT_DT(const CIEC_DATE_AND_TIME& pa_roIN1, const CIEC_DATE_AND_TIME& pa_roIN2){
CIEC_TIME temp;
- temp.setFromMiliSeconds(pa_roIN1 - pa_roIN2);
+ temp.setFromMilliSeconds(pa_roIN1 - pa_roIN2);
return temp;
}
const CIEC_TIME SUB_TOD_TOD(const CIEC_TIME_OF_DAY &pa_roIN1, const CIEC_TIME_OF_DAY &pa_roIN2){
CIEC_TIME temp;
- temp.setFromMiliSeconds(pa_roIN1 - pa_roIN2);
+ temp.setFromMilliSeconds(pa_roIN1 - pa_roIN2);
return temp;
}
const CIEC_TIME SUB_DATE_DATE(const CIEC_DATE &pa_roIN1, const CIEC_DATE &pa_roIN2){
CIEC_TIME temp;
- temp.setFromMiliSeconds(pa_roIN1 - pa_roIN2);
+ temp.setFromMilliSeconds(pa_roIN1 - pa_roIN2);
return temp;
}
@@ -85,4 +89,14 @@
return temp;
}
+const CIEC_TIME NOW_MONOTONIC() {
+ CIEC_TIME now;
+ now.setFromNanoSeconds(getNanoSecondsMonotonic());
+ return now;
+}
+
+const CIEC_DATE_AND_TIME NOW() {
+ return CIEC_DATE_AND_TIME(forte_time() * 1000ULL);
+}
+
#endif
diff --git a/src/core/iec61131_functions.h b/src/core/iec61131_functions.h
index 18ef6c4..9111066 100644
--- a/src/core/iec61131_functions.h
+++ b/src/core/iec61131_functions.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2013 ACIN, Profactor GmbH, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger, Ingo Hegny, Patrick Smejkal, Gerhard Ebenhofer,
@@ -65,11 +66,11 @@
return CIEC_REAL(sqrtf(pa_roIN));
}
-#ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL SQRT(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(sqrt(pa_roIN));
}
-#endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
@@ -78,11 +79,11 @@
return CIEC_REAL(logf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL LN(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(log(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
@@ -91,11 +92,11 @@
return CIEC_REAL(log10f(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL LOG(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(log10(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
#ifdef FORTE_USE_REAL_DATATYPE
@@ -103,11 +104,11 @@
return CIEC_REAL(sinf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL SIN(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(sin(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
@@ -116,11 +117,11 @@
return CIEC_REAL(cosf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL COS(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(cos(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
#ifdef FORTE_USE_REAL_DATATYPE
@@ -128,11 +129,11 @@
return CIEC_REAL(tanf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL TAN(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(tan(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
#ifdef FORTE_USE_REAL_DATATYPE
@@ -140,11 +141,11 @@
return CIEC_REAL(asinf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL ASIN(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(asin(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
@@ -153,11 +154,11 @@
return CIEC_REAL(acosf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL ACOS(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(acos(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
#ifdef FORTE_USE_REAL_DATATYPE
@@ -165,11 +166,11 @@
return CIEC_REAL(atanf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL ATAN(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(atan(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
#ifdef FORTE_USE_REAL_DATATYPE
@@ -177,11 +178,11 @@
return CIEC_REAL(expf(pa_roIN));
}
- #ifdef FORTE_USE_64BIT_DATATYPES
+# ifdef FORTE_USE_64BIT_DATATYPES
inline const CIEC_LREAL EXP(const CIEC_LREAL &pa_roIN){
return CIEC_LREAL(exp(pa_roIN));
}
- #endif
+# endif //FORTE_USE_64BIT_DATATYPES
#endif //#ifdef FORTE_USE_REAL_DATATYPE
template<typename T> const T ROL(const T& paIn, const CIEC_ANY_INT& paN){
@@ -674,4 +675,19 @@
}
return temp;
}
+
+/**
+ * @brief returns current monotonic clock value as time span in nanoseconds
+ *
+ * @return CIEC_TIME time span since monotonic clock start
+ */
+const CIEC_TIME NOW_MONOTONIC();
+
+/**
+ * @brief returns current local date and time - may be subject to time jumps
+ *
+ * @return CIEC_DATE_AND_TIME of the current local time
+ */
+const CIEC_DATE_AND_TIME NOW();
+
#endif /* IEC61131_FUNCTIONS_H_ */
diff --git a/src/core/if2indco.cpp b/src/core/if2indco.cpp
index b878a26..6865cd3 100644
--- a/src/core/if2indco.cpp
+++ b/src/core/if2indco.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gunnar Grabmaier, Alois Zoitl, Ingo Hegny
diff --git a/src/core/if2indco.h b/src/core/if2indco.h
index e42d839..db34904 100644
--- a/src/core/if2indco.h
+++ b/src/core/if2indco.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gunnar Grabmaier, Alois Zoitl, Thomas Strasser, Ingo Hegny, Monika Wenger
diff --git a/src/core/io/CMakeLists.txt b/src/core/io/CMakeLists.txt
index be0c9ab..d0e4f4b 100644
--- a/src/core/io/CMakeLists.txt
+++ b/src/core/io/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Johannes Messmer
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Johannes Messmer
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/core/io/configFB/CMakeLists.txt b/src/core/io/configFB/CMakeLists.txt
index baf4774..62bbee9 100644
--- a/src/core/io/configFB/CMakeLists.txt
+++ b/src/core/io/configFB/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Johannes Messmer
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Johannes Messmer
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/core/io/configFB/io_adapter_multi.cpp b/src/core/io/configFB/io_adapter_multi.cpp
index 93ad944..d5091bb 100644
--- a/src/core/io/configFB/io_adapter_multi.cpp
+++ b/src/core/io/configFB/io_adapter_multi.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,21 +13,15 @@
#include "io_adapter_multi.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOConfigFBMultiAdapter::IOConfigFBMultiAdapter(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpecSocket,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- const SFBInterfaceSpec *pa_pstInterfaceSpecPlug, bool pa_bIsPlug,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- CAdapter(pa_poSrcRes, pa_pstInterfaceSpecSocket, pa_nInstanceNameId,
- pa_pstInterfaceSpecPlug, pa_bIsPlug, pa_acFBConnData, pa_acFBVarsData), mSlaveConfigurationIO(
- paSlaveConfigurationIO), mSlaveConfigurationIO_num(
- paSlaveConfigurationIO_num) {
+IOConfigFBMultiAdapter::IOConfigFBMultiAdapter(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIONum,
+ CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpecSocket, const CStringDictionary::TStringId paInstanceNameId,
+ const SFBInterfaceSpec *paInterfaceSpecPlug, bool paIsPlug, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ CAdapter(paSrcRes, paInterfaceSpecSocket, paInstanceNameId, paInterfaceSpecPlug, paIsPlug, paFBConnData, paFBVarsData),
+ cmSlaveConfigurationIO(paSlaveConfigurationIO), mSlaveConfigurationIONum(paSlaveConfigurationIONum) {
}
IOConfigFBMultiAdapter::~IOConfigFBMultiAdapter() {
- // TODO Auto-generated destructor stub
}
diff --git a/src/core/io/configFB/io_adapter_multi.h b/src/core/io/configFB/io_adapter_multi.h
index e0bdbbc..a275582 100644
--- a/src/core/io/configFB/io_adapter_multi.h
+++ b/src/core/io/configFB/io_adapter_multi.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -17,59 +18,53 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
#define ADAPTER_CTOR_FOR_IO_MULTI(fbclass) \
- fbclass(CStringDictionary::TStringId pa_anAdapterInstanceName, CResource *pa_poSrcRes, bool pa_bIsPlug) : \
- IOConfigFBMultiAdapter( (const TForteUInt8* const) &scm_slaveConfigurationIO, scm_slaveConfigurationIO_num, pa_poSrcRes, &scm_stFBInterfaceSpecSocket, pa_anAdapterInstanceName, &scm_stFBInterfaceSpecPlug, pa_bIsPlug, m_anFBConnData, m_anFBVarsData)
+ fbclass(CStringDictionary::TStringId paAdapterInstanceName, CResource *paSrcRes, bool paIsPlug) : \
+ IOConfigFBMultiAdapter( (const TForteUInt8* const) &scmSlaveConfigurationIO, scmSlaveConfigurationIONum, paSrcRes, &scm_stFBInterfaceSpecSocket, paAdapterInstanceName, &scm_stFBInterfaceSpecPlug, paIsPlug, m_anFBConnData, m_anFBVarsData)
-class IOConfigFBMultiAdapter: public CAdapter {
-public:
- IOConfigFBMultiAdapter(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpecSocket,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- const SFBInterfaceSpec *pa_pstInterfaceSpecPlug, bool pa_bIsPlug,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~IOConfigFBMultiAdapter();
+ class IOConfigFBMultiAdapter : public CAdapter {
+ public:
+ IOConfigFBMultiAdapter(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIONum, CResource *paSrcRes,
+ const SFBInterfaceSpec *patInterfaceSpecSocket, const CStringDictionary::TStringId paInstanceNameId, const SFBInterfaceSpec *paInterfaceSpecPlug,
+ bool paIsPlug, TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~IOConfigFBMultiAdapter();
- CIEC_BOOL &QO() {
- return *static_cast<CIEC_BOOL*>((isSocket()) ? getDI(0) : getDO(0));
- }
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDI(0) : getDO(0));
+ }
- CIEC_BOOL &QI() {
- return *static_cast<CIEC_BOOL*>((isSocket()) ? getDO(0) : getDI(0));
- }
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDO(0) : getDI(0));
+ }
- CIEC_UINT &MasterId() {
- return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(1) : getDI(1));
- }
+ CIEC_UINT &MasterId() {
+ return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(1) : getDI(1));
+ }
- CIEC_UINT &Index() {
- return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(2) : getDI(2));
- }
+ CIEC_UINT &Index() {
+ return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(2) : getDI(2));
+ }
- static const TEventID scm_nEventINITID = 0;
- int INIT() {
- return m_nParentAdapterListEventID + scm_nEventINITID;
- }
+ static const TEventID scmEventINITID = 0;
+ int INIT() {
+ return m_nParentAdapterListEventID + scmEventINITID;
+ }
- static const TEventID scm_nEventINITOID = 0;
- int INITO() {
- return m_nParentAdapterListEventID + scm_nEventINITOID;
- }
+ static const TEventID scmEventINITOID = 0;
+ int INITO() {
+ return m_nParentAdapterListEventID + scmEventINITOID;
+ }
- const TForteUInt8* mSlaveConfigurationIO;
- TForteUInt8 mSlaveConfigurationIO_num;
+ const TForteUInt8* cmSlaveConfigurationIO;
+ TForteUInt8 mSlaveConfigurationIONum;
- TIEC_ANYPtr getSlaveConfig(int index) {
- return
- (isSocket()) ?
- getDO(mSlaveConfigurationIO[index]) :
- getDI(mSlaveConfigurationIO[index]);
- }
+ TIEC_ANYPtr getSlaveConfig(int paIndex) {
+ return (isSocket()) ? getDO(cmSlaveConfigurationIO[paIndex]) : getDI(cmSlaveConfigurationIO[paIndex]);
+ }
-};
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_adapter_split.cpp b/src/core/io/configFB/io_adapter_split.cpp
index 4bb32de..abb3011 100644
--- a/src/core/io/configFB/io_adapter_split.cpp
+++ b/src/core/io/configFB/io_adapter_split.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,18 +13,14 @@
#include "io_adapter_split.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOConfigFBSplitAdapter::IOConfigFBSplitAdapter(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpecSocket,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- const SFBInterfaceSpec *pa_pstInterfaceSpecPlug, bool pa_bIsPlug,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- CAdapter(pa_poSrcRes, pa_pstInterfaceSpecSocket, pa_nInstanceNameId,
- pa_pstInterfaceSpecPlug, pa_bIsPlug, pa_acFBConnData, pa_acFBVarsData) {
+IOConfigFBSplitAdapter::IOConfigFBSplitAdapter(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpecSocket,
+ const CStringDictionary::TStringId paInstanceNameId, const SFBInterfaceSpec *paInterfaceSpecPlug, bool paIsPlug, TForteByte *paFBConnData,
+ TForteByte *paFBVarsData) :
+ CAdapter(paSrcRes, paInterfaceSpecSocket, paInstanceNameId, paInterfaceSpecPlug, paIsPlug, paFBConnData, paFBVarsData) {
}
IOConfigFBSplitAdapter::~IOConfigFBSplitAdapter() {
- // TODO Auto-generated destructor stub
}
diff --git a/src/core/io/configFB/io_adapter_split.h b/src/core/io/configFB/io_adapter_split.h
index 9eb1fd4..c4f84a7 100644
--- a/src/core/io/configFB/io_adapter_split.h
+++ b/src/core/io/configFB/io_adapter_split.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -17,39 +18,36 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBSplitAdapter: public CAdapter {
-public:
- IOConfigFBSplitAdapter(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpecSocket,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- const SFBInterfaceSpec *pa_pstInterfaceSpecPlug, bool pa_bIsPlug,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~IOConfigFBSplitAdapter();
+ class IOConfigFBSplitAdapter : public CAdapter {
+ public:
+ IOConfigFBSplitAdapter(CResource *paSrcRes, const SFBInterfaceSpec *patInterfaceSpecSocket, const CStringDictionary::TStringId paInstanceNameId,
+ const SFBInterfaceSpec *paInterfaceSpecPlug, bool paIsPlug, TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~IOConfigFBSplitAdapter();
- CIEC_BOOL &QO() {
- return *static_cast<CIEC_BOOL*>((isSocket()) ? getDI(0) : getDO(0));
- }
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDI(0) : getDO(0));
+ }
- CIEC_BOOL &QI() {
- return *static_cast<CIEC_BOOL*>((isSocket()) ? getDO(0) : getDI(0));
- }
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDO(0) : getDI(0));
+ }
- CIEC_UINT &MasterId() {
- return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(1) : getDI(1));
- }
+ CIEC_UINT &MasterId() {
+ return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(1) : getDI(1));
+ }
- static const TEventID scm_nEventINITID = 0;
- int INIT() {
- return m_nParentAdapterListEventID + scm_nEventINITID;
- }
+ static const TEventID scmEventINITID = 0;
+ int INIT() {
+ return m_nParentAdapterListEventID + scmEventINITID;
+ }
- static const TEventID scm_nEventINITOID = 0;
- int INITO() {
- return m_nParentAdapterListEventID + scm_nEventINITOID;
- }
-};
+ static const TEventID scmEventINITOID = 0;
+ int INITO() {
+ return m_nParentAdapterListEventID + scmEventINITOID;
+ }
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_base.cpp b/src/core/io/configFB/io_base.cpp
index 9e04098..5a17469 100644
--- a/src/core/io/configFB/io_base.cpp
+++ b/src/core/io/configFB/io_base.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,18 +13,13 @@
#include "io_base.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOConfigFBBase::IOConfigFBBase(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- CEventSourceFB(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId,
- pa_acFBConnData, pa_acFBVarsData) {
- // TODO Auto-generated constructor stub
-
+IOConfigFBBase::IOConfigFBBase(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ CEventSourceFB(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData) {
}
IOConfigFBBase::~IOConfigFBBase() {
- // TODO Auto-generated destructor stub
}
diff --git a/src/core/io/configFB/io_base.h b/src/core/io/configFB/io_base.h
index 79c521f..a74c7f3 100644
--- a/src/core/io/configFB/io_base.h
+++ b/src/core/io/configFB/io_base.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -17,15 +18,14 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBBase: public CEventSourceFB {
-public:
- IOConfigFBBase(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~IOConfigFBBase();
-};
+ class IOConfigFBBase : public CEventSourceFB {
+ public:
+ IOConfigFBBase(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~IOConfigFBBase();
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_configFB_controller.cpp b/src/core/io/configFB/io_configFB_controller.cpp
index 494c1d1..a4c250d 100644
--- a/src/core/io/configFB/io_configFB_controller.cpp
+++ b/src/core/io/configFB/io_configFB_controller.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -14,185 +15,158 @@
#include "../../device.h"
#include "io_configFB_controller.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-int IOConfigFBController::MaxErrors = 5;
+int IOConfigFBController::smMaxErrors = 5;
const char * const IOConfigFBController::scmOK = "OK";
-const char * const IOConfigFBController::scmInitializing =
- "Waiting for initialization..";
-const char * const IOConfigFBController::scmFailedToInit =
- "Failed to initialize controller.";
+const char * const IOConfigFBController::scmInitializing = "Waiting for initialization..";
+const char * const IOConfigFBController::scmFailedToInit = "Failed to initialize controller.";
const char * const IOConfigFBController::scmStopped = "Stopped";
-IOConfigFBController::IOConfigFBController(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- IOConfigFBBase(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData,
- pa_acFBVarsData), starting(false), errorCounter(0), controller(0), performRestart(
- false) {
-
+IOConfigFBController::IOConfigFBController(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ IOConfigFBBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), mStarting(false), mErrorCounter(0), mController(0),
+ mPerformRestart(false) {
}
IOConfigFBController::~IOConfigFBController() {
deInit(true);
}
-void IOConfigFBController::executeEvent(int pa_nEIID) {
- switch (pa_nEIID) {
-
- case cg_nExternalEventID:
- if (!(controller->notificationHandled = handleNotification(
- controller->notificationType, controller->notificationAttachment))) {
- DEVLOG_ERROR(
- "[IOConfigFBController] Notification of type %d has not been handled.\n",
- controller->notificationType);
+void IOConfigFBController::executeEvent(int paEIID) {
+ if(cg_nExternalEventID == paEIID) {
+ if(!(mController->mNotificationHandled = handleNotification(mController->mNotificationType, mController->mNotificationAttachment))) {
+ DEVLOG_ERROR("[IOConfigFBController] Notification of type %d has not been handled.\n", mController->mNotificationType);
}
- break;
-
- case scm_nEventINITID:
- if (true == QI()) {
- if (!init()) {
+ } else if(scmEventINITID == paEIID) {
+ if(true == QI()) {
+ if(!init()) {
QO() = false;
- sendOutputEvent(scm_nEventINITOID);
+ sendOutputEvent(scmEventINITOID);
}
} else {
QO() = deInit();
- sendOutputEvent(scm_nEventINITOID);
+ sendOutputEvent(scmEventINITOID);
}
- break;
}
}
-bool IOConfigFBController::handleNotification(IODeviceController::NotificationType type,
- const void* attachment) {
+bool IOConfigFBController::handleNotification(IODeviceController::NotificationType paType, const void* paAttachment) {
+ switch(paType){
+ case IODeviceController::Error:
+ onError();
+ if(mStarting) {
+ if(0 == paAttachment) {
+ paAttachment = scmFailedToInit;
+ }
- switch (type) {
+ STATUS() = (const char*) paAttachment;
+ DEVLOG_ERROR("[IOConfigFBController] Failed to initialize controller. Reason: %s\n", STATUS().getValue());
+ } else {
+ STATUS() = (const char*) paAttachment;
- case IODeviceController::Error:
- onError();
-
- if (starting) {
- if (attachment == 0)
- attachment = scmFailedToInit;
-
- STATUS() = (const char*) attachment;
- DEVLOG_ERROR(
- "[IOConfigFBController] Failed to initialize controller. Reason: %s\n",
- STATUS().getValue());
- } else {
- STATUS() = (const char*) attachment;
-
- DEVLOG_ERROR("[IOConfigFBController] Runtime error. Reason: %s\n",
- STATUS().getValue());
- }
- return true;
-
- case IODeviceController::Success:
- if (starting) {
- onStartup();
+ DEVLOG_ERROR("[IOConfigFBController] Runtime error. Reason: %s\n", STATUS().getValue());
+ }
return true;
- }
- return false;
-
- default:
- return false;
+ case IODeviceController::Success:
+ if(mStarting) {
+ onStartup();
+ return true;
+ }
+ return false;
+ default:
+ return false;
}
}
-void IOConfigFBController::onError(bool isFatal) {
- errorCounter++;
- performRestart = errorCounter < MaxErrors;
+void IOConfigFBController::onError(bool paIsFatal) {
+ mErrorCounter++;
+ mPerformRestart = mErrorCounter < smMaxErrors;
// ReInit IOConfigFBController
- if (performRestart) {
+ if(mPerformRestart) {
deInit();
} else {
- starting = false;
+ mStarting = false;
QO() = false;
- sendOutputEvent(scm_nEventINITOID);
+ sendOutputEvent(scmEventINITOID);
- if (isFatal) {
+ if(paIsFatal) {
deInit();
} else {
// Reset error counter if it was not a fatal error
- errorCounter = 0;
+ mErrorCounter = 0;
}
}
}
-bool IOConfigFBController::init(int delay) {
- if (controller != 0) {
- DEVLOG_ERROR(
- "[IOConfigFBController] IOConfigFBController has already been initialized.\n");
+bool IOConfigFBController::init(int paDelay) {
+ if(mController != 0) {
+ DEVLOG_ERROR("[IOConfigFBController] IOConfigFBController has already been initialized.\n");
return false;
}
- controller = createDeviceController(getResource().getDevice().getDeviceExecution());
- if (controller == 0) {
- DEVLOG_ERROR(
- "[IOConfigFBController] Failed to create controller.\n");
+ mController = createDeviceController(getResource().getDevice().getDeviceExecution());
+ if(mController == 0) {
+ DEVLOG_ERROR("[IOConfigFBController] Failed to create controller.\n");
return false;
}
- controller->delegate = this;
- controller->setInitDelay(delay);
+ mController->mDelegate = this;
+ mController->setInitDelay(paDelay);
- starting = true;
+ mStarting = true;
STATUS() = scmInitializing;
setConfig();
setEventChainExecutor(m_poInvokingExecEnv);
- controller->start();
+ mController->start();
return true;
}
-void IOConfigFBController::initHandle(
- IODeviceController::HandleDescriptor *handleDescriptor) {
+void IOConfigFBController::initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor) {
- if (handleDescriptor->id == "")
+ if(paHandleDescriptor->mId == "") {
return;
+ }
- controller->addHandle(handleDescriptor);
+ mController->addHandle(paHandleDescriptor);
}
void IOConfigFBController::onStartup() {
started();
}
-void IOConfigFBController::started(const char* error) {
- if (error != 0) {
- STATUS() = error;
- DEVLOG_ERROR("[IOConfigFBController] Failed to start. Reason: %s\n",
- STATUS().getValue());
+void IOConfigFBController::started(const char* paError) {
+ if(paError != 0) {
+ STATUS() = paError;
+ DEVLOG_ERROR("[IOConfigFBController] Failed to start. Reason: %s\n", STATUS().getValue());
return onError(false);
}
- errorCounter = 0;
- starting = false;
+ mErrorCounter = 0;
+ mStarting = false;
QO() = true;
STATUS() = scmOK;
- sendOutputEvent(scm_nEventINITOID);
+ sendOutputEvent(scmEventINITOID);
}
void IOConfigFBController::onStop() {
stopped();
}
-bool IOConfigFBController::deInit(bool isDestructing) {
- if (controller == 0) {
- DEVLOG_ERROR(
- "[IOConfigFBController] IOConfigFBController has already been stopped.\n");
+bool IOConfigFBController::deInit(bool paIsDestructing) {
+ if(0 == mController) {
+ DEVLOG_ERROR("[IOConfigFBController] IOConfigFBController has already been stopped.\n");
return false;
}
- if (isDestructing) {
- performRestart = false;
-
+ if(paIsDestructing) {
+ mPerformRestart = false;
stopped();
} else {
onStop();
@@ -202,20 +176,21 @@
}
void IOConfigFBController::stopped() {
- controller->delegate = 0;
- if (controller->isAlive())
- controller->end();
+ mController->mDelegate = 0;
+ if(mController->isAlive()) {
+ mController->end();
+ }
- delete controller;
- controller = 0;
- starting = false;
+ delete mController;
+ mController = 0;
+ mStarting = false;
STATUS() = scmStopped;
- if (performRestart) {
- performRestart = false;
+ if(mPerformRestart) {
+ mPerformRestart = false;
- init(errorCounter);
+ init(mErrorCounter);
}
}
diff --git a/src/core/io/configFB/io_configFB_controller.h b/src/core/io/configFB/io_configFB_controller.h
index 4329aaf..5b4e7bc 100644
--- a/src/core/io/configFB/io_configFB_controller.h
+++ b/src/core/io/configFB/io_configFB_controller.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,158 +19,156 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-/*! @brief Abstract controller configuration fb
- *
- * Base class of the controller configuration fb implementation.
- * All master or board IO configuration fb should inherit from this class or from its subclasses.
- *
- * Features:
- * - handles the basic events of a controller configuration fb (INIT, INITO with the corresponding data outputs QI, QO, and STATUS)
- * - thread safe communication with corresponding device controller (see #handleNotification)
- * - automatic error handling and restart of the Device Controller (see #IODeviceController)
- */
-class IOConfigFBController: public IOConfigFBBase {
-public:
- IOConfigFBController(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~IOConfigFBController();
+ /*! @brief Abstract controller configuration fb
+ *
+ * Base class of the controller configuration fb implementation.
+ * All master or board IO configuration fb should inherit from this class or from its subclasses.
+ *
+ * Features:
+ * - handles the basic events of a controller configuration fb (INIT, INITO with the corresponding data outputs QI, QO, and STATUS)
+ * - thread safe communication with corresponding device controller (see #handleNotification)
+ * - automatic error handling and restart of the Device Controller (see #IODeviceController)
+ */
+ class IOConfigFBController : public IOConfigFBBase {
+ public:
+ IOConfigFBController(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~IOConfigFBController();
- IODeviceController* getDeviceController() {
- return controller;
- }
+ IODeviceController* getDeviceController() {
+ return mController;
+ }
-protected:
+ protected:
- static const TEventID scm_nEventINITID = 0;
+ static const TEventID scmEventINITID = 0;
- CIEC_BOOL &QI() {
- return *static_cast<CIEC_BOOL*>(getDI(0));
- }
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ }
- static const TEventID scm_nEventINITOID = 0;
- static const TEventID scm_nEventINDID = 1;
+ static const TEventID scmEventINITOID = 0;
+ static const TEventID scmEventINDID = 1;
- CIEC_BOOL &QO() {
- return *static_cast<CIEC_BOOL*>(getDO(0));
- }
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ }
- CIEC_WSTRING &STATUS() {
- return *static_cast<CIEC_WSTRING*>(getDO(1));
- }
+ CIEC_WSTRING &STATUS() {
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ }
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
- //! Describes the current state of the initialization. Use to detect startup or runtime errors.
- bool starting;
+ /*! @brief Creates an instance of the corresponding Device Controller
+ *
+ * The method should create an instance of the hardware specific Device Controller.
+ * This instance should be set as delegate in the constructor call.
+ *
+ * @param paDeviceExecution Device execution needed for the external handler
+ * @return Instance of the corresponding Device Controller
+ */
+ virtual IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution) = 0;
- //! Maximum value of the #errorCounter. It sets the amount of retries after an error.
- static int MaxErrors;
+ /*! @brief Sets the configuration of the Device Controller
+ *
+ * The method should create a local struct of the Device Controller Config and assign the corresponding global data inputs to it.
+ * It should call the #IODeviceController::setConfig with a reference to the created config struct.
+ */
+ virtual void setConfig() = 0;
- //! Counter for received errors
- int errorCounter;
+ /*! @brief Handles the notifications of the Device Controller
+ *
+ * The method can be overwritten to handle custom notifications between the configuration fb and the Device Controller.
+ * @attention Notifications should not be used for time critical operations, such as a write operation of an output fb.
+ *
+ * @param paType Type of the notification
+ * @param paAttachment Reference to the attachment (e.g. a string of an error message)
+ * @return True if the notification has been handled. In case it is not handled, a warning message is logged.
+ */
+ virtual bool handleNotification(IODeviceController::NotificationType paType, const void* paAttachment);
- //! Instance of the corresponding Device Controller
- IODeviceController *controller;
+ /*! @brief Initializes the configuration fb
+ *
+ * It is usually called by the INIT+ event.
+ * It may also be called after an error and a following recovery attempt.
+ *
+ * @param paDelay Delay the initialization in seconds
+ * @return True if the initialization was successful
+ */
+ bool init(int paDelay = 0);
- /*! @brief Creates an instance of the corresponding Device Controller
- *
- * The method should create an instance of the hardware specific Device Controller.
- * This instance should be set as delegate in the constructor call.
- *
- * @param paDeviceExecution Device execution needed for the external handler
- * @return Instance of the corresponding Device Controller
- */
- virtual IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution) = 0;
+ /*! @brief Initializes an IO handle
+ *
+ * This method is used to forward handle descriptors to the device controller.
+ * The #IODeviceController::addHandle method is called and in case the #IODeviceController::HandleDescriptor::id
+ * is not empty, the handle is initialized with the #IODeviceController::initHandle method.
+ *
+ * @param paHandleDescriptor Descriptor of the handle
+ */
+ void initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor);
- /*! @brief Sets the configuration of the Device Controller
- *
- * The method should create a local struct of the Device Controller Config and assign the corresponding global data inputs to it.
- * It should call the #IODeviceController::setConfig with a reference to the created config struct.
- */
- virtual void setConfig() = 0;
+ /*! @brief Deinitializes the configuration fb
+ *
+ * It is usually called by the INIT- event and after an error.
+ *
+ * @param paIsDestructing True if the deInit is called inside the destructor
+ * @return True if the deinitialization was successful
+ */
+ bool deInit(bool paIsDestructing = false);
- /*! @brief Handles the notifications of the Device Controller
- *
- * The method can be overwritten to handle custom notifications between the configuration fb and the Device Controller.
- * @attention Notifications should not be used for time critical operations, such as a write operation of an output fb.
- *
- * @param type Type of the notification
- * @param attachment Reference to the attachment (e.g. a string of an error message)
- * @return True if the notification has been handled. In case it is not handled, a warning message is logged.
- */
- virtual bool handleNotification(IODeviceController::NotificationType type,
- const void* attachment);
+ /*! @brief Used for asynchronous initialization operations
+ *
+ * The method is called after a successful #init call.
+ * It is, for example, used for the initialization of attached configuration fbs.
+ *
+ * @attention The #started method should be called after the asynchronous initialization operations
+ */
+ virtual void onStartup();
- /*! @brief Initializes the configuration fb
- *
- * It is usually called by the INIT+ event.
- * It may also be called after an error and a following recovery attempt.
- *
- * @param delay Delay the initialization in seconds
- * @return True if the initialization was successful
- */
- bool init(int delay = 0);
+ /*! @brief Confirmation method of the #onStartup method
+ *
+ * @param paError Forward error message in case the startup was not successful. Leads to a re-initialization.
+ */
+ void started(const char* paError = 0);
- /*! @brief Initializes an IO handle
- *
- * This method is used to forward handle descriptors to the device controller.
- * The #IODeviceController::addHandle method is called and in case the #IODeviceController::HandleDescriptor::id
- * is not empty, the handle is initialized with the #IODeviceController::initHandle method.
- *
- * @param handleDescriptor Descriptor of the handle
- */
- void initHandle(IODeviceController::HandleDescriptor *handleDescriptor);
+ /*! @brief Used for asynchronous deinitialization operations
+ *
+ * The method is called after the #deInit function, in case the fb is not destructed.
+ * It is, for example, used for the deinitialization of attached configuration fbs.
+ *
+ * @attention The #stopped method should be called after the deinitialization operations.
+ */
+ virtual void onStop();
- /*! @brief Deinitializes the configuration fb
- *
- * It is usually called by the INIT- event and after an error.
- *
- * @param isDestructing True if the deInit is called inside the destructor
- * @return True if the deinitialization was successful
- */
- bool deInit(bool isDestructing = false);
+ /*! @brief Confirmation method of the #onStop method */
+ void stopped();
- /*! @brief Used for (asynchronous) initialization operations
- *
- * The method is called after a successful #init call.
- * It is, for example, used for the initialization of attached configuration fbs.
- *
- * @attention The #started method should be called after the asynchronous initialization operations
- */
- virtual void onStartup();
+ private:
- /*! @brief Confirmation method of the #onStartup method
- *
- * @param error Forward error message in case the startup was not successful. Leads to a re-initialization.
- */
- void started(const char* error = 0);
+ //! Describes the current state of the initialization. Use to detect startup or runtime errors.
+ bool mStarting;
- /*! @brief Used for (asynchronous) deinitialization operations
- *
- * The method is called after the #deInit function, in case the fb is not destructed.
- * It is, for example, used for the deinitialization of attached configuration fbs.
- *
- * @attention The #stopped method should be called after the deinitialization operations.
- */
- virtual void onStop();
+ //! Maximum value of the #errorCounter. It sets the amount of retries after an error.
+ static int smMaxErrors;
- /*! @brief Confirmation method of the #onStop method */
- void stopped();
+ //! Counter for received errors
+ int mErrorCounter;
-private:
- void onError(bool isFatal = true);
+ //! Instance of the corresponding Device Controller
+ IODeviceController *mController;
- bool performRestart;
+ void onError(bool paIsFatal = true);
- static const char * const scmOK;
- static const char * const scmInitializing;
- static const char * const scmFailedToInit;
- static const char * const scmStopped;
-};
+ bool mPerformRestart;
+
+ static const char * const scmOK;
+ static const char * const scmInitializing;
+ static const char * const scmFailedToInit;
+ static const char * const scmStopped;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_controller_part.cpp b/src/core/io/configFB/io_controller_part.cpp
index 7779f2e..4bcf407 100644
--- a/src/core/io/configFB/io_controller_part.cpp
+++ b/src/core/io/configFB/io_controller_part.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,24 +13,20 @@
#include "io_controller_part.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOConfigFBPartController::IOConfigFBPartController(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- IOConfigFBBase(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData,
- pa_acFBVarsData), master(0) {
-
+IOConfigFBPartController::IOConfigFBPartController(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec,
+ const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ IOConfigFBBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), mMaster(0) {
}
-void IOConfigFBPartController::executeEvent(int pa_nEIID) {
- if (IOConfigFBMultiAdapter().INIT() == pa_nEIID) {
- if (IOConfigFBMultiAdapter().QI() == true) {
+void IOConfigFBPartController::executeEvent(int paEIID) {
+ if(IOConfigFBMultiAdapter().INIT() == paEIID) {
+ if(IOConfigFBMultiAdapter().QI() == true) {
// Get master by id
- master = IOConfigFBSplitController::getControllerById(IOConfigFBMultiAdapter().MasterId());
+ mMaster = IOConfigFBSplitController::getControllerById(IOConfigFBMultiAdapter().MasterId());
- if (master == 0) {
+ if(0 == mMaster) {
QO() = false;
} else {
// Initialize handles
@@ -39,20 +36,17 @@
}
// Send confirmation of init
IOConfigFBMultiAdapter().QO() = QO();
- sendAdapterEvent(scm_nSplitAdapterAdpNum,
- IOConfigFBSplitAdapter::scm_nEventINITOID);
+ sendAdapterEvent(scmSplitAdapterAdpNum, IOConfigFBSplitAdapter::scmEventINITOID);
} else {
QO() = false;
// Send confirmation of deInit
IOConfigFBMultiAdapter().QO() = QO();
- sendAdapterEvent(scm_nSplitAdapterAdpNum,
- IOConfigFBSplitAdapter::scm_nEventINITOID);
+ sendAdapterEvent(scmSplitAdapterAdpNum, IOConfigFBSplitAdapter::scmEventINITOID);
}
}
}
-void IOConfigFBPartController::initHandle(
- IODeviceController::HandleDescriptor *handleDescriptor) {
- master->initHandle(handleDescriptor);
+void IOConfigFBPartController::initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor) {
+ mMaster->initHandle(paHandleDescriptor);
}
diff --git a/src/core/io/configFB/io_controller_part.h b/src/core/io/configFB/io_controller_part.h
index 0f9b0ec..2447878 100644
--- a/src/core/io/configFB/io_controller_part.h
+++ b/src/core/io/configFB/io_controller_part.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -19,43 +20,42 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBPartController: public IOConfigFBBase {
-public:
- IOConfigFBPartController(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
+ class IOConfigFBPartController : public IOConfigFBBase {
+ public:
+ IOConfigFBPartController(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
-protected:
- CIEC_BOOL &QI() {
- return *static_cast<CIEC_BOOL*>(getDI(0));
- }
+ protected:
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ }
- CIEC_BOOL &QO() {
- return *static_cast<CIEC_BOOL*>(getDO(0));
- }
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ }
- static const TEventID scm_nEventMAPID = 0;
+ static const TEventID scmEventMAPID = 0;
- static const TEventID scm_nEventMAPOID = 0;
+ static const TEventID scmEventMAPOID = 0;
- IOConfigFBSplitAdapter& IOConfigFBMultiAdapter() {
- return (*static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[0]));
- }
+ IOConfigFBSplitAdapter& IOConfigFBMultiAdapter() {
+ return (*static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[0]));
+ }
- static const int scm_nSplitAdapterAdpNum = 0;
+ static const int scmSplitAdapterAdpNum = 0;
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
- IOConfigFBSplitController* master;
+ virtual void initHandles() = 0;
- virtual void initHandles() = 0;
+ void initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor);
- void initHandle(IODeviceController::HandleDescriptor *handleDescriptor);
+ private:
+ IOConfigFBSplitController* mMaster;
-};
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_controller_split.cpp b/src/core/io/configFB/io_controller_split.cpp
index acbd1d1..8836924 100644
--- a/src/core/io/configFB/io_controller_split.cpp
+++ b/src/core/io/configFB/io_controller_split.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,104 +13,93 @@
#include "io_controller_split.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-const char * const IOConfigFBSplitController::scmFailedToInitParts =
- "Failed to initialize parts.";
+const char * const IOConfigFBSplitController::scmFailedToInitParts = "Failed to initialize parts.";
-TControllerList* IOConfigFBSplitController::instances = new TControllerList();
-TForteUInt16 IOConfigFBSplitController::instancesIncrement = 0;
+TControllerList IOConfigFBSplitController::mInstances;
+TForteUInt16 IOConfigFBSplitController::mInstancesIncrement = 0;
-IOConfigFBSplitController::IOConfigFBSplitController(const TForteUInt8* const scm_splitAdapter,
- const TForteUInt8 scm_splitAdapter_num, CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- IOConfigFBController(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId,
- pa_acFBConnData, pa_acFBVarsData), scm_splitAdapter(scm_splitAdapter), scm_splitAdapter_num(
- scm_splitAdapter_num), splitIterator(0) {
- id = instancesIncrement++;
- instances->pushBack(this);
+IOConfigFBSplitController::IOConfigFBSplitController(const TForteUInt8* const paSplitAdapter, const TForteUInt8 paSplitAdapterNum, CResource *paSrcRes,
+ const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ IOConfigFBController(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), scmSplitAdapter(paSplitAdapter),
+ scmSplitAdapterNum(paSplitAdapterNum), mSplitIterator(0) {
+ mId = mInstancesIncrement++;
+ mInstances.pushBack(this);
}
-IOConfigFBSplitController* IOConfigFBSplitController::getControllerById(TForteUInt16 id) {
- TControllerList::Iterator itEnd = instances->end();
+IOConfigFBSplitController* IOConfigFBSplitController::getControllerById(TForteUInt16 paId) {
+ TControllerList::Iterator itEnd = mInstances.end();
int i = 0;
- for (TControllerList::Iterator it = instances->begin(); it != itEnd;
- ++it, i++)
- if (id == i && *it != 0)
+ for(TControllerList::Iterator it = mInstances.begin(); it != itEnd; ++it, i++) {
+ if(paId == i && *it != 0) {
return *it;
+ }
+ }
return 0;
}
void IOConfigFBSplitController::onStartup() {
- splitIterator = 0;
+ mSplitIterator = 0;
- if (!scm_splitAdapter_num) {
+ if(!scmSplitAdapterNum) {
return IOConfigFBController::onStartup();
}
- IOConfigFBSplitAdapter *cur =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ IOConfigFBSplitAdapter *cur = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
- while (!cur || cur->getPeer() == 0) {
- splitIterator++;
+ while(!cur || 0 == cur->getPeer()) {
+ mSplitIterator++;
- if (splitIterator == scm_splitAdapter_num) {
+ if(mSplitIterator == scmSplitAdapterNum) {
return IOConfigFBController::onStartup();
}
- cur =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ cur = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
}
- cur->MasterId() = id;
+ cur->MasterId() = mId;
cur->QI() = true;
- sendAdapterEvent(scm_splitAdapter[splitIterator],
- IOConfigFBSplitAdapter::scm_nEventINITID);
+ sendAdapterEvent(scmSplitAdapter[mSplitIterator], IOConfigFBSplitAdapter::scmEventINITID);
}
void IOConfigFBSplitController::onStop() {
- splitIterator = 0;
+ mSplitIterator = 0;
- if (!scm_splitAdapter_num) {
+ if(!scmSplitAdapterNum) {
return IOConfigFBController::onStop();
}
- IOConfigFBSplitAdapter *cur =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ IOConfigFBSplitAdapter *cur = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
- while (cur->getPeer() == 0) {
- splitIterator++;
+ while(cur->getPeer() == 0) {
+ mSplitIterator++;
- if (splitIterator == scm_splitAdapter_num) {
+ if(mSplitIterator == scmSplitAdapterNum) {
return IOConfigFBController::onStop();
}
- cur =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ cur = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
}
cur->QI() = false;
- sendAdapterEvent(scm_splitAdapter[splitIterator],
- IOConfigFBSplitAdapter::scm_nEventINITID);
+ sendAdapterEvent(scmSplitAdapter[mSplitIterator], IOConfigFBSplitAdapter::scmEventINITID);
}
-void IOConfigFBSplitController::executeEvent(int pa_nEIID) {
- IOConfigFBController::executeEvent(pa_nEIID);
+void IOConfigFBSplitController::executeEvent(int paEIID) {
+ IOConfigFBController::executeEvent(paEIID);
- if (splitIterator < scm_splitAdapter_num) {
- IOConfigFBSplitAdapter *cur =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
- if (cur->INITO() == pa_nEIID) {
+ if(mSplitIterator < scmSplitAdapterNum) {
+ IOConfigFBSplitAdapter *cur = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
+ if(cur->INITO() == paEIID) {
QO() = cur->QO();
- splitIterator++;
+ mSplitIterator++;
- if (splitIterator == scm_splitAdapter_num || (cur->QI() && !cur->QO())) {
- if (cur->QI() == true) {
- if (cur->QO() == true) {
+ if(mSplitIterator == scmSplitAdapterNum || (cur->QI() && !cur->QO())) {
+ if(cur->QI() == true) {
+ if(cur->QO() == true) {
IOConfigFBController::onStartup();
} else {
started(scmFailedToInitParts);
@@ -118,29 +108,26 @@
IOConfigFBController::onStop();
}
} else {
- IOConfigFBSplitAdapter *next =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ IOConfigFBSplitAdapter *next = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
- while (!next || next->getPeer() == 0) {
- splitIterator++;
+ while(!next || 0 == next->getPeer()) {
+ mSplitIterator++;
- if (splitIterator == scm_splitAdapter_num) {
- if (cur->QO() == true) {
+ if(mSplitIterator == scmSplitAdapterNum) {
+ if(cur->QO() == true) {
return IOConfigFBController::onStartup();
} else {
return IOConfigFBController::onStop();
}
}
- next =
- static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scm_splitAdapter[splitIterator]]);
+ next = static_cast<IOConfigFBSplitAdapter*>(m_apoAdapters[scmSplitAdapter[mSplitIterator]]);
}
- next->MasterId() = id;
+ next->MasterId() = mId;
next->QI() = cur->QI();
- sendAdapterEvent(scm_splitAdapter[splitIterator],
- IOConfigFBSplitAdapter::scm_nEventINITID);
+ sendAdapterEvent(scmSplitAdapter[mSplitIterator], IOConfigFBSplitAdapter::scmEventINITID);
}
}
}
diff --git a/src/core/io/configFB/io_controller_split.h b/src/core/io/configFB/io_controller_split.h
index fc14847..c56a660 100644
--- a/src/core/io/configFB/io_controller_split.h
+++ b/src/core/io/configFB/io_controller_split.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,50 +19,47 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
#define FUNCTION_BLOCK_CTOR_FOR_IO_SPLIT_CONTROLLER(fbclass) \
- fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
- IOConfigFBSplitController( (const TForteUInt8* const) &scm_splitAdapter, scm_splitAdapter_num, pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
+ fbclass(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) : \
+ IOConfigFBSplitController( (const TForteUInt8* const) &scmSplitAdapter, scmSplitAdapterNum, paSrcRes, &scm_stFBInterfaceSpec, paInstanceNameId, m_anFBConnData, m_anFBVarsData)
-class IOConfigFBSplitController;
+ class IOConfigFBSplitController;
-typedef CSinglyLinkedList<IOConfigFBSplitController*> TControllerList;
+ typedef CSinglyLinkedList<IOConfigFBSplitController*> TControllerList;
-class IOConfigFBSplitController: public IOConfigFBController {
-public:
- IOConfigFBSplitController(const TForteUInt8* const scm_splitAdapter,
- const TForteUInt8 scm_splitAdapter_num, CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
+ class IOConfigFBSplitController : public IOConfigFBController {
+ public:
+ IOConfigFBSplitController(const TForteUInt8* const paSplitAdapter, const TForteUInt8 paSplitAdapterNum, CResource *paSrcRes,
+ const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData);
- static IOConfigFBSplitController* getControllerById(TForteUInt16 id);
+ static IOConfigFBSplitController* getControllerById(TForteUInt16 paId);
- using IOConfigFBController::initHandle;
+ using IOConfigFBController::initHandle;
-protected:
+ protected:
- virtual void onStartup();
+ virtual void onStartup();
- virtual void onStop();
+ virtual void onStop();
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
-private:
- const TForteUInt8* scm_splitAdapter;
- const TForteUInt8 scm_splitAdapter_num;
+ private:
+ const TForteUInt8* scmSplitAdapter;
+ const TForteUInt8 scmSplitAdapterNum;
- TForteUInt8 splitIterator;
+ TForteUInt8 mSplitIterator;
- static TControllerList *instances;
+ static TControllerList mInstances;
- static TForteUInt16 instancesIncrement;
+ static TForteUInt16 mInstancesIncrement;
- TForteUInt16 id;
+ TForteUInt16 mId;
- static const char * const scmFailedToInitParts;
-};
+ static const char * const scmFailedToInitParts;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_master_multi.cpp b/src/core/io/configFB/io_master_multi.cpp
index b6dfcf0..f5bc4b7 100644
--- a/src/core/io/configFB/io_master_multi.cpp
+++ b/src/core/io/configFB/io_master_multi.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,64 +13,63 @@
#include "io_master_multi.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-const char * const IOConfigFBMultiMaster::scmFailedToInitSlaves =
- "Failed to initialize slaves. Check if the configuration matches the hardware setup.";
+const char * const IOConfigFBMultiMaster::scmFailedToInitSlaves = "Failed to initialize slaves. Check if the configuration matches the hardware setup.";
-TMasterList* IOConfigFBMultiMaster::instances = new TMasterList();
-TForteUInt16 IOConfigFBMultiMaster::instancesIncrement = 0;
+TMasterList IOConfigFBMultiMaster::mInstances;
+TForteUInt16 IOConfigFBMultiMaster::mInstancesIncrement = 0;
-IOConfigFBMultiMaster::IOConfigFBMultiMaster(CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- IOConfigFBController(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId,
- pa_acFBConnData, pa_acFBVarsData) {
- id = instancesIncrement++;
- instances->pushBack(this);
+IOConfigFBMultiMaster::IOConfigFBMultiMaster(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ IOConfigFBController(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData) {
+ mId = mInstancesIncrement++;
+ mInstances.pushBack(this);
}
-IOConfigFBMultiMaster* IOConfigFBMultiMaster::getMasterById(TForteUInt16 id) {
- TMasterList::Iterator itEnd = instances->end();
+IOConfigFBMultiMaster* IOConfigFBMultiMaster::getMasterById(TForteUInt16 paId) {
+ TMasterList::Iterator itEnd = mInstances.end();
int i = 0;
- for (TMasterList::Iterator it = instances->begin(); it != itEnd; ++it, i++)
- if (id == i && *it != 0)
+ for(TMasterList::Iterator it = mInstances.begin(); it != itEnd; ++it, i++) {
+ if(paId == i && *it != 0) {
return *it;
+ }
+ }
return 0;
}
void IOConfigFBMultiMaster::onStartup() {
- if (BusAdapterOut().getPeer() == 0) {
+ if(0 == BusAdapterOut().getPeer()) {
return IOConfigFBController::onStartup();
}
- BusAdapterOut().MasterId() = id;
+ BusAdapterOut().MasterId() = mId;
BusAdapterOut().Index() = 0;
BusAdapterOut().QI() = true;
- sendAdapterEvent(scm_nBusAdapterAdpNum, IOConfigFBMultiAdapter::scm_nEventINITID);
+ sendAdapterEvent(scmBusAdapterAdpNum, IOConfigFBMultiAdapter::scmEventINITID);
}
void IOConfigFBMultiMaster::onStop() {
- if (BusAdapterOut().getPeer() == 0) {
+ if(0 == BusAdapterOut().getPeer()) {
return IOConfigFBController::onStop();
}
BusAdapterOut().QI() = false;
- sendAdapterEvent(scm_nBusAdapterAdpNum, IOConfigFBMultiAdapter::scm_nEventINITID);
+ sendAdapterEvent(scmBusAdapterAdpNum, IOConfigFBMultiAdapter::scmEventINITID);
}
-void IOConfigFBMultiMaster::executeEvent(int pa_nEIID) {
- IOConfigFBController::executeEvent(pa_nEIID);
+void IOConfigFBMultiMaster::executeEvent(int paEIID) {
+ IOConfigFBController::executeEvent(paEIID);
- if (BusAdapterOut().INITO() == pa_nEIID) {
+ if(BusAdapterOut().INITO() == paEIID) {
QO() = BusAdapterOut().QO();
- if (BusAdapterOut().QI() == true) {
- if (BusAdapterOut().QO() == true)
+ if(BusAdapterOut().QI() == true) {
+ if(BusAdapterOut().QO() == true) {
IOConfigFBController::onStartup();
- else
+ } else {
started(scmFailedToInitSlaves);
+ }
} else {
IOConfigFBController::onStop();
}
diff --git a/src/core/io/configFB/io_master_multi.h b/src/core/io/configFB/io_master_multi.h
index 2d4eae8..070c5b3 100644
--- a/src/core/io/configFB/io_master_multi.h
+++ b/src/core/io/configFB/io_master_multi.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -20,43 +21,42 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBMultiMaster;
+ class IOConfigFBMultiMaster;
-typedef CSinglyLinkedList<IOConfigFBMultiMaster*> TMasterList;
+ typedef CSinglyLinkedList<IOConfigFBMultiMaster*> TMasterList;
-class IOConfigFBMultiMaster: public IOConfigFBController {
-public:
- IOConfigFBMultiMaster(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
+ class IOConfigFBMultiMaster : public IOConfigFBController {
+ public:
+ IOConfigFBMultiMaster(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
- static IOConfigFBMultiMaster* getMasterById(TForteUInt16 id);
+ static IOConfigFBMultiMaster* getMasterById(TForteUInt16 paId);
- using IOConfigFBController::initHandle;
+ using IOConfigFBController::initHandle;
-protected:
- IOConfigFBMultiAdapter& BusAdapterOut() {
- return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[0]));
- }
- static const int scm_nBusAdapterAdpNum = 0;
+ protected:
+ IOConfigFBMultiAdapter& BusAdapterOut() {
+ return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[0]));
+ }
+ static const int scmBusAdapterAdpNum = 0;
- virtual void onStartup();
+ virtual void onStartup();
- virtual void onStop();
+ virtual void onStop();
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
-private:
- static TMasterList *instances;
+ private:
+ static TMasterList mInstances;
- static TForteUInt16 instancesIncrement;
+ static TForteUInt16 mInstancesIncrement;
- TForteUInt16 id;
+ TForteUInt16 mId;
- static const char * const scmFailedToInitSlaves;
-};
+ static const char * const scmFailedToInitSlaves;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/configFB/io_slave_multi.cpp b/src/core/io/configFB/io_slave_multi.cpp
index 55f5912..b84cb14 100644
--- a/src/core/io/configFB/io_slave_multi.cpp
+++ b/src/core/io/configFB/io_slave_multi.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,7 +13,7 @@
#include "io_slave_multi.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
const char * const IOConfigFBMultiSlave::scmOK = "OK";
const char * const IOConfigFBMultiSlave::scmStopped = "Stopped";
@@ -20,65 +21,55 @@
const char * const IOConfigFBMultiSlave::scmNotFound = "Module not found";
const char * const IOConfigFBMultiSlave::scmIncorrectType = "Module type is incorrect";
-IOConfigFBMultiSlave::IOConfigFBMultiSlave(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, int type,
- CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- IOConfigFBBase(pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData,
- pa_acFBVarsData), master(0), index(-1), type(type), initialized(false), mSlaveConfigurationIO(
- paSlaveConfigurationIO), mSlaveConfigurationIO_num(
- paSlaveConfigurationIO_num), mSlaveConfigurationIO_isDefault(
- new bool[paSlaveConfigurationIO_num]()) {
- for (int i = 0; i < mSlaveConfigurationIO_num; i++)
- mSlaveConfigurationIO_isDefault[i] = false;
+IOConfigFBMultiSlave::IOConfigFBMultiSlave(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIONum, int paType,
+ CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData,
+ TForteByte *paFBVarsData) :
+ IOConfigFBBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), mIndex(-1), mSlaveConfigurationIO(paSlaveConfigurationIO),
+ mMaster(0), mType(paType), mInitialized(false), mSlaveConfigurationIONum(paSlaveConfigurationIONum),
+ mSlaveConfigurationIOIsDefault(new bool[paSlaveConfigurationIONum]()) {
+ for(int i = 0; i < mSlaveConfigurationIONum; i++) {
+ mSlaveConfigurationIOIsDefault[i] = false;
+ }
}
IOConfigFBMultiSlave::~IOConfigFBMultiSlave() {
- delete[] mSlaveConfigurationIO_isDefault;
+ delete[] mSlaveConfigurationIOIsDefault;
}
-void IOConfigFBMultiSlave::executeEvent(int pa_nEIID) {
- if (BusAdapterIn().INIT() == pa_nEIID) {
- if (BusAdapterIn().QI() == true) {
+void IOConfigFBMultiSlave::executeEvent(int paEIID) {
+ if(BusAdapterIn().INIT() == paEIID) {
+ if(BusAdapterIn().QI() == true) {
// Handle initialization event
const char* const error = handleInitEvent();
- QO() = initialized = error == 0;
+ QO() = mInitialized = error == 0;
- if (initialized) {
+ if(mInitialized) {
STATUS() = scmOK;
} else {
STATUS() = error;
}
- if (BusAdapterOut().getPeer() != 0) {
+ if(BusAdapterOut().getPeer() != 0) {
// Initialize next slave
BusAdapterOut().QI() = BusAdapterIn().QI();
BusAdapterOut().Index() = (TForteUInt16) (BusAdapterIn().Index() + 1);
BusAdapterOut().MasterId() = BusAdapterIn().MasterId();
- for (int i = 0; i < BusAdapterIn().mSlaveConfigurationIO_num; i++) {
+ for(int i = 0; i < BusAdapterIn().mSlaveConfigurationIONum; i++) {
TIEC_ANYPtr ptr = BusAdapterIn().getSlaveConfig(i);
- switch (ptr->getDataTypeID()) {
- case CIEC_ANY::e_UINT:
- *static_cast<CIEC_UINT*>(BusAdapterOut().getSlaveConfig(i)) =
- *static_cast<CIEC_UINT*>(ptr);
- break;
- default:
- DEVLOG_WARNING(
- "[IOConfigFBMultiSlave] Unable to handle data type %d. Skip adapter configuration\n",
- ptr->getDataTypeID());
- continue;
+ if(CIEC_ANY::e_UINT == ptr->getDataTypeID()) {
+ *static_cast<CIEC_UINT*>(BusAdapterOut().getSlaveConfig(i)) = *static_cast<CIEC_UINT*>(ptr);
+ } else {
+ DEVLOG_WARNING("[IOConfigFBMultiSlave] Unable to handle data type %d. Skip adapter configuration\n", ptr->getDataTypeID());
}
}
- sendAdapterEvent(scm_nBusAdapterOutAdpNum, IOConfigFBMultiAdapter::scm_nEventINITID);
+ sendAdapterEvent(scm_nBusAdapterOutAdpNum, IOConfigFBMultiAdapter::scmEventINITID);
sendOutputEvent(scm_nEventINDID);
} else {
// Send confirmation of init
BusAdapterIn().QO() = QO();
- sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scm_nEventINITOID);
+ sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scmEventINITOID);
}
} else {
deInit();
@@ -86,32 +77,32 @@
QO() = false;
STATUS() = scmStopped;
- if (BusAdapterOut().getPeer() != 0) {
+ if(BusAdapterOut().getPeer() != 0) {
// DeInit next slave
BusAdapterOut().QI() = BusAdapterIn().QI();
- sendAdapterEvent(scm_nBusAdapterOutAdpNum, IOConfigFBMultiAdapter::scm_nEventINITID);
+ sendAdapterEvent(scm_nBusAdapterOutAdpNum, IOConfigFBMultiAdapter::scmEventINITID);
sendOutputEvent(scm_nEventINDID);
} else {
// Send confirmation of deInit
BusAdapterIn().QO() = QO();
- sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scm_nEventINITOID);
+ sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scmEventINITOID);
}
}
- } else if (BusAdapterOut().INITO() == pa_nEIID) {
+ } else if(BusAdapterOut().INITO() == paEIID) {
// Forward confirmation of initialization
BusAdapterIn().QO() = BusAdapterOut().QO() && QO();
- sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scm_nEventINITOID);
+ sendAdapterEvent(scm_nBusAdapterInAdpNum, IOConfigFBMultiAdapter::scmEventINITOID);
}
- switch (pa_nEIID) {
- case scm_nEventMAPID:
- if (initialized) {
+ if(scm_nEventMAPID == paEIID) {
+ if(mInitialized) {
// Drop all existing handles
- getController().dropSlaveHandles(index);
+ getController().dropSlaveHandles(mIndex);
- if (true == QI())
+ if(true == QI()) {
initHandles();
+ }
QO() = true;
} else {
@@ -119,81 +110,67 @@
}
sendOutputEvent(scm_nEventMAPOID);
- break;
}
}
-void IOConfigFBMultiSlave::initHandle(
- IODeviceMultiController::HandleDescriptor *handleDescriptor) {
- master->initHandle(handleDescriptor);
+void IOConfigFBMultiSlave::initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor) {
+ mMaster->initHandle(paHandleDescriptor);
}
const char* IOConfigFBMultiSlave::handleInitEvent() {
// Get master by id
- master = IOConfigFBMultiMaster::getMasterById(BusAdapterIn().MasterId());
- if (master == 0) {
+ mMaster = IOConfigFBMultiMaster::getMasterById(BusAdapterIn().MasterId());
+ if(0 == mMaster) {
return scmMasterNotFound;
}
- index = BusAdapterIn().Index();
+ mIndex = BusAdapterIn().Index();
// Default parameters
- for (int i = 0; i < mSlaveConfigurationIO_num; i++) {
+ for(int i = 0; i < mSlaveConfigurationIONum; i++) {
bool isSet = true;
TIEC_ANYPtr ptr = getDI(mSlaveConfigurationIO[i]);
- switch (ptr->getDataTypeID()) {
- case CIEC_ANY::e_UINT:
+ if(CIEC_ANY::e_UINT == ptr->getDataTypeID()) {
isSet = !!*static_cast<CIEC_UINT*>(ptr);
- break;
- default:
- DEVLOG_WARNING(
- "[IOConfigFBMultiSlave] Unable to handle data type %d. Skip slave configuration\n",
- ptr->getDataTypeID());
+ } else {
+ DEVLOG_WARNING("[IOConfigFBMultiSlave] Unable to handle data type %d. Skip slave configuration\n", ptr->getDataTypeID());
continue;
}
- if (!mSlaveConfigurationIO_isDefault[i] && !isSet) {
- mSlaveConfigurationIO_isDefault[i] = true;
+ if(!mSlaveConfigurationIOIsDefault[i] && !isSet) {
+ mSlaveConfigurationIOIsDefault[i] = true;
}
- if (mSlaveConfigurationIO_isDefault[i]) {
- switch (ptr->getDataTypeID()) {
- case CIEC_ANY::e_UINT:
- *static_cast<CIEC_UINT*>(ptr) =
- *static_cast<CIEC_UINT*>(BusAdapterIn().getSlaveConfig(i));
- break;
- default:
- break;
- }
+ if(mSlaveConfigurationIOIsDefault[i] && CIEC_ANY::e_UINT == ptr->getDataTypeID()) {
+ *static_cast<CIEC_UINT*>(ptr) = *static_cast<CIEC_UINT*>(BusAdapterIn().getSlaveConfig(i));
}
}
IODeviceMultiController& controller = getController();
// Check if slave exists
- if (!controller.isSlaveAvailable(index)) {
- DEVLOG_DEBUG("[IOConfigFBMultiSlave] No slave found at position %d\n", index);
+ if(!controller.isSlaveAvailable(mIndex)) {
+ DEVLOG_DEBUG("[IOConfigFBMultiSlave] No slave found at position %d\n", mIndex);
return scmNotFound;
}
// Check if slave type is correct
- if (!controller.checkSlaveType(index, type)) {
- DEVLOG_DEBUG(
- "[IOConfigFBMultiSlave] Found slave with incorrect type at position %d\n",
- index);
+ if(!controller.checkSlaveType(mIndex, mType)) {
+ DEVLOG_DEBUG("[IOConfigFBMultiSlave] Found slave with incorrect type at position %d\n", mIndex);
return scmIncorrectType;
}
// Perform slave initialization
const char* const error = init();
- if (error != 0)
+ if(error != 0) {
return error;
-
- controller.dropSlaveHandles(index);
- if (true == QI())
+ }
+ controller.dropSlaveHandles(mIndex);
+ if(true == QI()) {
initHandles();
+ }
- DEVLOG_DEBUG("[IOConfigFBMultiSlave] Initialized slave at position %d\n", index);
+ DEVLOG_DEBUG("[IOConfigFBMultiSlave] Initialized slave at position %d\n", mIndex);
return 0;
}
diff --git a/src/core/io/configFB/io_slave_multi.h b/src/core/io/configFB/io_slave_multi.h
index 3d3b205..edb80dc 100644
--- a/src/core/io/configFB/io_slave_multi.h
+++ b/src/core/io/configFB/io_slave_multi.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,95 +19,93 @@
#include "io_adapter_multi.h"
#include "io_master_multi.h"
-
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
#define FUNCTION_BLOCK_CTOR_FOR_IO_MULTI_SLAVE(fbclass, fbBaseClass, type) \
- fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
- fbBaseClass( (const TForteUInt8* const) &scm_slaveConfigurationIO, scm_slaveConfigurationIO_num, type, pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
+ fbclass(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) : \
+ fbBaseClass( (const TForteUInt8* const) &scmSlaveConfigurationIO, scmSlaveConfigurationIONum, type, paSrcRes, &scm_stFBInterfaceSpec, paInstanceNameId, m_anFBConnData, m_anFBVarsData)
-class IOConfigFBMultiSlave: public IOConfigFBBase {
-public:
- IOConfigFBMultiSlave(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, int type,
- CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~IOConfigFBMultiSlave();
+ class IOConfigFBMultiSlave : public IOConfigFBBase {
+ public:
+ IOConfigFBMultiSlave(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIONum, int paType, CResource *paSrcRes,
+ const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData,
+ TForteByte *paFBVarsData);
+ virtual ~IOConfigFBMultiSlave();
-protected:
- CIEC_BOOL &QI() {
- return *static_cast<CIEC_BOOL*>(getDI(0));
- }
+ protected:
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ }
- CIEC_BOOL &QO() {
- return *static_cast<CIEC_BOOL*>(getDO(0));
- }
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ }
- CIEC_WSTRING &STATUS() {
- return *static_cast<CIEC_WSTRING*>(getDO(1));
- }
+ CIEC_WSTRING &STATUS() {
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ }
- static const TEventID scm_nEventMAPID = 0;
+ static const TEventID scm_nEventMAPID = 0;
- static const TEventID scm_nEventMAPOID = 0;
- static const TEventID scm_nEventINDID = 1;
+ static const TEventID scm_nEventMAPOID = 0;
+ static const TEventID scm_nEventINDID = 1;
- IOConfigFBMultiAdapter& BusAdapterOut() {
- return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[0]));
- }
+ IOConfigFBMultiAdapter& BusAdapterOut() {
+ return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[0]));
+ }
- static const int scm_nBusAdapterOutAdpNum = 0;
- IOConfigFBMultiAdapter& BusAdapterIn() {
- return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[1]));
- }
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ IOConfigFBMultiAdapter& BusAdapterIn() {
+ return (*static_cast<IOConfigFBMultiAdapter*>(m_apoAdapters[1]));
+ }
- static const int scm_nBusAdapterInAdpNum = 1;
+ static const int scm_nBusAdapterInAdpNum = 1;
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
- IOConfigFBMultiMaster* master;
+ IODeviceMultiController& getController() {
+ return (*static_cast<IODeviceMultiController*>(mMaster->getDeviceController()));
+ }
- int index;
+ virtual const char* init() {
+ return 0;
+ }
- int type;
+ virtual void deInit() {
+ //do nothing
+ }
- IODeviceMultiController& getController() {
- return (*static_cast<IODeviceMultiController*>(master->getDeviceController()));
- }
+ virtual void initHandles() = 0;
- bool initialized;
+ void initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor);
- virtual const char* init() {
- return 0;
- }
+ static const char* const scmOK;
+ static const char* const scmMasterNotFound;
- virtual void deInit() {
+ int mIndex;
- }
+ const TForteUInt8* mSlaveConfigurationIO;
- virtual void initHandles() = 0;
+ private:
- void initHandle(IODeviceMultiController::HandleDescriptor *handleDescriptor);
+ IOConfigFBMultiMaster* mMaster;
- static const char* const scmOK;
- static const char* const scmMasterNotFound;
+ int mType;
- const TForteUInt8* mSlaveConfigurationIO;
- TForteUInt8 mSlaveConfigurationIO_num;
- bool* mSlaveConfigurationIO_isDefault;
+ bool mInitialized;
-private:
- const char* handleInitEvent();
+ TForteUInt8 mSlaveConfigurationIONum;
+ bool* mSlaveConfigurationIOIsDefault;
- static const char* const scmStopped;
- static const char* const scmNotFound;
- static const char* const scmIncorrectType;
+ const char* handleInitEvent();
-};
+ static const char* const scmStopped;
+ static const char* const scmNotFound;
+ static const char* const scmIncorrectType;
+
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/device/CMakeLists.txt b/src/core/io/device/CMakeLists.txt
index 65f68c6..113e95d 100644
--- a/src/core/io/device/CMakeLists.txt
+++ b/src/core/io/device/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Johannes Messmer
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Johannes Messmer
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/core/io/device/io_controller.cpp b/src/core/io/device/io_controller.cpp
index 1972214..ec9b77f 100644
--- a/src/core/io/device/io_controller.cpp
+++ b/src/core/io/device/io_controller.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,57 +17,58 @@
#include "../configFB/io_configFB_controller.h"
#include "criticalregion.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IODeviceController::IODeviceController(CDeviceExecution& paDeviceExecution) : CExternalEventHandler(paDeviceExecution),
- notificationType(UnknownNotificationType), notificationAttachment(0), notificationHandled(
- true), delegate(0), error(0), initDelay(0) {
+IODeviceController::IODeviceController(CDeviceExecution& paDeviceExecution) :
+ CExternalEventHandler(paDeviceExecution), mNotificationType(UnknownNotificationType), mNotificationAttachment(0), mNotificationHandled(true), mError(0),
+ mDelegate(0), mInitDelay(0) {
}
void IODeviceController::run() {
// Delay initialization
- if (initDelay > 0)
- CThread::sleepThread(initDelay * 1000);
+ if(mInitDelay > 0) {
+ CThread::sleepThread(mInitDelay * 1000);
+ }
- error = init();
+ mError = init();
- if (!hasError()) {
+ if(!hasError()) {
notifyConfigFB(Success);
runLoop();
- if (hasError())
- notifyConfigFB(Error, error);
+ if(hasError()) {
+ notifyConfigFB(Error, mError);
+ }
} else {
- notifyConfigFB(Error, error);
+ notifyConfigFB(Error, mError);
}
dropHandles();
deInit();
- // TODO Remove statement or add arch independent sleep method
- while (isAlive())
+ while(isAlive()) {
CThread::sleepThread(10);
+ }
}
-void IODeviceController::addHandle(HandleDescriptor *handleDescriptor) {
- IOHandle* handle = initHandle(handleDescriptor);
+void IODeviceController::addHandle(HandleDescriptor *paHandleDescriptor) {
+ IOHandle* handle = initHandle(paHandleDescriptor);
- if (handle == 0) {
- DEVLOG_WARNING(
- "[IODeviceController] Failed to initialize handle '%s'. Check initHandle method.\n",
- handleDescriptor->id.getValue());
+ if(0 == handle) {
+ DEVLOG_WARNING("[IODeviceController] Failed to initialize handle '%s'. Check initHandle method.\n", paHandleDescriptor->mId.getValue());
return;
}
- if (handle->is(IOMapper::In))
- addHandle(&inputHandles, handleDescriptor->id, handle);
- else if (handle->is(IOMapper::Out))
- addHandle(&outputHandles, handleDescriptor->id, handle);
+ if(handle->is(IOMapper::In)) {
+ addHandle(&mInputHandles, paHandleDescriptor->mId, handle);
+ } else if(handle->is(IOMapper::Out)) {
+ addHandle(&mOutputHandles, paHandleDescriptor->mId, handle);
+ }
}
-void IODeviceController::fireIndicationEvent(IOObserver* observer) {
- startNewEventChain((CProcessInterface*) observer);
+void IODeviceController::fireIndicationEvent(IOObserver* paObserver) {
+ startNewEventChain((CProcessInterface*) paObserver);
}
void IODeviceController::handleChangeEvent(IOHandle*) {
@@ -74,63 +76,62 @@
}
bool IODeviceController::hasError() {
- return error != 0;
+ return mError != 0;
}
-void IODeviceController::notifyConfigFB(NotificationType type, const void* attachment) {
- if (delegate == 0) {
- DEVLOG_WARNING(
- "[IODeviceController] No receiver for notification is available. Notification is dropped.\n");
+void IODeviceController::notifyConfigFB(NotificationType paType, const void* paAttachment) {
+ if(0 == mDelegate) {
+ DEVLOG_WARNING("[IODeviceController] No receiver for notification is available. Notification is dropped.\n");
return;
}
- if (!notificationHandled) {
- DEVLOG_WARNING(
- "[IODeviceController] Notification has not yet been handled by the configuration fb. Notification is dropped.\n");
+ if(!mNotificationHandled) {
+ DEVLOG_WARNING("[IODeviceController] Notification has not yet been handled by the configuration fb. Notification is dropped.\n");
return;
}
- this->notificationType = type;
- this->notificationAttachment = attachment;
+ this->mNotificationType = paType;
+ this->mNotificationAttachment = paAttachment;
- notificationHandled = false;
- startNewEventChain(delegate);
+ mNotificationHandled = false;
+ startNewEventChain(mDelegate);
}
void IODeviceController::checkForInputChanges() {
- CCriticalRegion criticalRegion(handleMutex);
+ CCriticalRegion criticalRegion(mHandleMutex);
// Iterate over input handles and check for changes
- THandleList::Iterator itEnd = inputHandles.end();
- for (THandleList::Iterator it = inputHandles.begin(); it != itEnd; ++it)
- if ((*it)->hasObserver() && !isHandleValueEqual(*it)) {
+ THandleList::Iterator itEnd = mInputHandles.end();
+ for(THandleList::Iterator it = mInputHandles.begin(); it != itEnd; ++it) {
+ if((*it)->hasObserver() && !isHandleValueEqual(*it)) {
// Inform Process Interface about change
(*it)->onChange();
}
+ }
}
-void IODeviceController::setInitDelay(int delay) {
- initDelay = delay;
+void IODeviceController::setInitDelay(int paDelay) {
+ mInitDelay = paDelay;
}
void IODeviceController::dropHandles() {
- CCriticalRegion criticalRegion(handleMutex);
+ CCriticalRegion criticalRegion(mHandleMutex);
IOMapper& mapper = IOMapper::getInstance();
- THandleList::Iterator itEnd = inputHandles.end();
- for (THandleList::Iterator it = inputHandles.begin(); it != itEnd; ++it) {
+ THandleList::Iterator itEnd = mInputHandles.end();
+ for(THandleList::Iterator it = mInputHandles.begin(); it != itEnd; ++it) {
mapper.deregisterHandle(*it);
delete *it;
}
- itEnd = outputHandles.end();
- for (THandleList::Iterator it = outputHandles.begin(); it != itEnd; ++it) {
+ itEnd = mOutputHandles.end();
+ for(THandleList::Iterator it = mOutputHandles.begin(); it != itEnd; ++it) {
mapper.deregisterHandle(*it);
delete *it;
}
- inputHandles.clearAll();
- outputHandles.clearAll();
+ mInputHandles.clearAll();
+ mOutputHandles.clearAll();
}
@@ -138,13 +139,12 @@
return true;
}
-void IODeviceController::addHandle(THandleList* list, CIEC_WSTRING const &id,
- IOHandle* handle) {
- if (id != "" && IOMapper::getInstance().registerHandle(id, handle)) {
- CCriticalRegion criticalRegion(handleMutex);
- list->pushBack(handle);
+void IODeviceController::addHandle(THandleList* paList, CIEC_WSTRING const &paId, IOHandle* paHandle) {
+ if(paId != "" && IOMapper::getInstance().registerHandle(paId, paHandle)) {
+ CCriticalRegion criticalRegion(mHandleMutex);
+ paList->pushBack(paHandle);
} else {
- delete handle;
+ delete paHandle;
}
}
diff --git a/src/core/io/device/io_controller.h b/src/core/io/device/io_controller.h
index 7e844af..18d97a2 100644
--- a/src/core/io/device/io_controller.h
+++ b/src/core/io/device/io_controller.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -23,206 +24,210 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBController;
+ class IOConfigFBController;
-/*! @brief Abstract Device Controller
- *
- * Base class of the device controller implementation.
- * All hardware specific IO implementations should inherit from this class.
- *
- * Features:
- * - runs Device Controller in separate thread
- * - thread safe communication with corresponding controller configuration fb (see #notifyConfigFB)
- * - base structure for safe startups and resets (see #init, #runLoop, and #deInit)
- * - automatic error handling and restart (see #IOConfigFBController)
- */
-class IODeviceController: protected CExternalEventHandler, protected CThread {
- friend class IOConfigFBController;
+ /*! @brief Abstract Device Controller
+ *
+ * Base class of the device controller implementation.
+ * All hardware specific IO implementations should inherit from this class.
+ *
+ * Features:
+ * - runs Device Controller in separate thread
+ * - thread safe communication with corresponding controller configuration fb (see #notifyConfigFB)
+ * - base structure for safe startups and resets (see #init, #runLoop, and #deInit)
+ * - automatic error handling and restart (see #IOConfigFBController)
+ */
+ class IODeviceController : protected CExternalEventHandler, protected CThread {
+ friend class IOConfigFBController;
-public:
- /*! @brief Abstract configuration struct.
- *
- * The child controller should implement an own configuration struct, which inherits from this struct and is initialized with default parameters.
- * The controller configuration fb uses the #setConfig method to set the runtime configuration.
- */
- struct Config {
+ public:
+ /*! @brief Abstract configuration struct.
+ *
+ * The child controller should implement an own configuration struct, which inherits from this struct and is initialized with default parameters.
+ * The controller configuration fb uses the #setConfig method to set the runtime configuration.
+ */
+ struct Config {
- };
+ };
- /*! @brief Abstract descriptor of device handles.
- *
- * Used to exchange information about handles between the device controller and the corresponding configuration fb.
- * The device implementation should extend the struct with properties, which uniquely identify the handle.
- * The #initHandle method then creates an #IOHandle instance based on the handle descriptor.
- */
- struct HandleDescriptor {
- CIEC_WSTRING const &id;
- IOMapper::Direction direction;
+ /*! @brief Abstract descriptor of device handles.
+ *
+ * Used to exchange information about handles between the device controller and the corresponding configuration fb.
+ * The device implementation should extend the struct with properties, which uniquely identify the handle.
+ * The #initHandle method then creates an #IOHandle instance based on the handle descriptor.
+ */
+ class HandleDescriptor {
+ public:
+ CIEC_WSTRING const &mId;
+ IOMapper::Direction mDirection;
- HandleDescriptor(CIEC_WSTRING const &id, IOMapper::Direction direction) :
- id(id), direction(direction) {
+ HandleDescriptor(CIEC_WSTRING const &paId, IOMapper::Direction paDirection) :
+ mId(paId), mDirection(paDirection) {
- }
- };
+ }
+ };
- enum NotificationType {
- UnknownNotificationType,
- //! Notifies the configuration fb about a successful operation e.g. a successful startup.
- Success,
- //! Notifies the configuration about an error. It should be emitted during the init method or the runLoop method.
- Error,
- //! Placeholder for custom hardware specific communication between the device and configuration fb controller.
- Custom
- };
- NotificationType notificationType;
- const void* notificationAttachment;
- bool notificationHandled;
+ enum NotificationType {
+ UnknownNotificationType,
+ //! Notifies the configuration fb about a successful operation e.g. a successful startup.
+ Success,
+ //! Notifies the configuration about an error. It should be emitted during the init method or the runLoop method.
+ Error,
+ //! Placeholder for custom hardware specific communication between the device and configuration fb controller.
+ Custom
+ };
+ NotificationType mNotificationType;
+ const void* mNotificationAttachment;
+ bool mNotificationHandled;
- /*! @brief Sets the configuration of the controller
- *
- * @param config Pointer to the configuration struct provided by the corresponding controller configuration fb. Use *static_cast<CustomConfig*>(config) to retrieve the struct instance.
- */
- virtual void setConfig(Config* config) = 0;
+ /*! @brief Sets the configuration of the controller
+ *
+ * @param paConfig Pointer to the configuration struct provided by the corresponding controller configuration fb. Use *static_cast<CustomConfig*>(config) to retrieve the struct instance.
+ */
+ virtual void setConfig(Config* paConfig) = 0;
- void fireIndicationEvent(IOObserver *observer);
+ void fireIndicationEvent(IOObserver *paObserver);
- virtual void handleChangeEvent(IOHandle *handle);
+ virtual void handleChangeEvent(IOHandle *paHandle);
- //TODO: adapt this properly to the new handler model. This mockup is just to avoid the classes below to be abstract
- virtual size_t getIdentifier() const{
- return 0;
- }
+ //TODO: adapt this properly to the new handler model. This mockup is just to avoid the classes below to be abstract
+ virtual size_t getIdentifier() const {
+ return 0;
+ }
-protected:
- explicit IODeviceController(CDeviceExecution& paDeviceExecution);
+ protected:
+ explicit IODeviceController(CDeviceExecution& paDeviceExecution);
- /*! @brief Initializes the controller.
- *
- * The method should initialize and startup the controller.
- * All required hardware libraries should be started and checked for errors.
- * If the system requires an initialization sequence which is executed once at startup, place it here.
- * In case of an error, return an error description.
- *
- * @return 0/NULL if the initialization was successful. Otherwise return an error description.
- */
- virtual const char* init() = 0;
+ /*! @brief Initializes the controller.
+ *
+ * The method should initialize and startup the controller.
+ * All required hardware libraries should be started and checked for errors.
+ * If the system requires an initialization sequence which is executed once at startup, place it here.
+ * In case of an error, return an error description.
+ *
+ * @return 0/NULL if the initialization was successful. Otherwise return an error description.
+ */
+ virtual const char* init() = 0;
- /*! @brief Contains the blocking run sequence.
- *
- * The method should implement the algorithm, which sets and gets the state of the hardware handles.
- * In case of a runtime error, set the #error property.
- * It should always check if the controller is still active (#isAlive method).
- * If the controller got inactive or an error occurred, the method should return.
- *
- * @attention Never use while(true) loops without any sleep methods. They would consume all processing power and slow down FORTE.
- */
- virtual void runLoop() = 0;
+ /*! @brief Contains the blocking run sequence.
+ *
+ * The method should implement the algorithm, which sets and gets the state of the hardware handles.
+ * In case of a runtime error, set the #error property.
+ * It should always check if the controller is still active (#isAlive method).
+ * If the controller got inactive or an error occurred, the method should return.
+ *
+ * @attention Never use While(true) loops without any sleep methods. They would consume all processing power and slow down FORTE.
+ */
+ virtual void runLoop() = 0;
- /*! @brief Deinitializes the controller.
- *
- * Stops all initialized hardware libraries.
- * Frees the allocated resources of the controller.
- */
- virtual void deInit() = 0;
+ /*! @brief Deinitializes the controller.
+ *
+ * Stops all initialized hardware libraries.
+ * Frees the allocated resources of the controller.
+ */
+ virtual void deInit() = 0;
- IOConfigFBController *delegate;
+ bool hasError();
+ const char* mError;
- bool hasError();
- const char* error;
+ /*! @brief Notifies the corresponding configuration fb about a startup or runtime event.
+ *
+ * The method should not be used for time critical operations, such as a write operation of an output fb.
+ * You should avoid multiple messages in a short time period, as notifications are not yet queued but dropped.
+ *
+ * @param paType Type of notification
+ * @param paAttachment Attachment of notification. E.g. a const* char pointer should be attached to an Error notification.
+ */
+ void notifyConfigFB(NotificationType paType, const void* paAttachment = 0);
- /*! @brief Notifies the corresponding configuration fb about a startup or runtime event.
- *
- * The method should not be used for time critical operations, such as a write operation of an output fb.
- * You should avoid multiple messages in a short time period, as notifications are not yet queued but dropped.
- *
- * @param type Type of notification
- * @param attachment Attachment of notification. E.g. a const* char pointer should be attached to an Error notification.
- */
- void notifyConfigFB(NotificationType type, const void* attachment = 0);
+ typedef CSinglyLinkedList<IOHandle *> THandleList;
- /*! @brief Synchronizes the access to the #inputHandles and #outputHandles. Use it for iterations over the lists. */
- CSyncObject handleMutex;
+ /*! @brief Adds an IO handle to the controller
+ *
+ * This method is called by the corresponding configuration function block during the initialization.
+ * The handle is automatically added to the correct list (#inputHandles and #outputHandles).
+ * The handle lists should be accessed by the controller to read and write IOs.
+ *
+ * @param paHandleDescriptor Descriptor of the handle
+ */
+ virtual void addHandle(HandleDescriptor *paHandleDescriptor);
- typedef CSinglyLinkedList<IOHandle *> THandleList;
+ /*! @brief Initializer for all IO handles.
+ *
+ * The method is called when a configuration fb adds an handle via the #addHandle method.
+ * It should return an handle instance based on the descriptor information.
+ *
+ * @param paHandleDescriptor Descriptor of the handle
+ */
+ virtual IOHandle* initHandle(HandleDescriptor *paHandleDescriptor) = 0;
- /*! @brief All input handles of the main controller
- * The list should only contain input handles of the main controller.
- * The list is managed by the #addHandle and #dropHandles method.
- * #dropHandles is called automatically during deinitialization.
- */
- THandleList inputHandles;
+ /*! @brief Iterates over all input handles and fires an indication event in case of a change.
+ *
+ * The method iterates over the #inputHandles list.
+ * It checks if the input handle has a bound observer and then calls the #isHandleValueEqual method.
+ * If the #isHandleValueEqual returns true, the indication event is fired for the bound observer.
+ * @attention The method does only work if the #isHandleValueEqual is overridden.
+ */
+ void checkForInputChanges();
- /*! @brief All output handles of the main controller
- * The list should only contain output handles of the main controller.
- * The list is managed by the #addHandle and #dropHandles method.
- * #dropHandles is called automatically during deinitialization.
- */
- THandleList outputHandles;
+ /*! @brief Checks if the value of a handle has changed. Used by the #checkForInputChanges method.
+ *
+ * @param paHandle IOHandle which should be compared to the previous IO state
+ * @return True if the current state is equal to the previous IO state. In case it has changed, return false.
+ */
+ virtual bool isHandleValueEqual(IOHandle* paHandle);
- /*! @brief Adds an IO handle to the controller
- *
- * This method is called by the corresponding configuration function block during the initialization.
- * The handle is automatically added to the correct list (#inputHandles and #outputHandles).
- * The handle lists should be accessed by the controller to read and write IOs.
- *
- * @param handleDescriptor Descriptor of the handle
- */
- virtual void addHandle(HandleDescriptor *handleDescriptor);
+ /*! @brief Synchronizes the access to the #inputHandles and #outputHandles. Use it for iterations over the lists. */
+ CSyncObject mHandleMutex;
- /*! @brief Initializer for all IO handles.
- *
- * The method is called when a configuration fb adds an handle via the #addHandle method.
- * It should return an handle instance based on the descriptor information.
- *
- * @param handleDescriptor Descriptor of the handle
- */
- virtual IOHandle* initHandle(HandleDescriptor *handleDescriptor) = 0;
+ /*! @brief All input handles of the main controller
+ * The list should only contain input handles of the main controller.
+ * The list is managed by the #addHandle and #dropHandles method.
+ * #dropHandles is called automatically during deinitialization.
+ */
+ THandleList mInputHandles;
- /*! @brief Iterates over all input handles and fires an indication event in case of a change.
- *
- * The method iterates over the #inputHandles list.
- * It checks if the input handle has a bound observer and then calls the #isHandleValueEqual method.
- * If the #isHandleValueEqual returns true, the indication event is fired for the bound observer.
- * @attention The method does only work if the #isHandleValueEqual is overridden.
- */
- void checkForInputChanges();
+ /*! @brief All output handles of the main controller
+ * The list should only contain output handles of the main controller.
+ * The list is managed by the #addHandle and #dropHandles method.
+ * #dropHandles is called automatically during deinitialization.
+ */
+ THandleList mOutputHandles;
- /*! @brief Checks if the value of a handle has changed. Used by the #checkForInputChanges method.
- *
- * @param handle IOHandle which should be compared to the previous IO state
- * @return True if the current state is equal to the previous IO state. In case it has changed, return false.
- */
- virtual bool isHandleValueEqual(IOHandle* handle);
+ private:
-private:
+ IOConfigFBController *mDelegate;
- /*! @brief Drops all handle instances which were previously added by the #addHandle method
- *
- * The method is automatically called during the deinitialization of the corresponding configuration function block.
- */
- void dropHandles();
+ /*! @brief Drops all handle instances which were previously added by the #addHandle method
+ *
+ * The method is automatically called during the deinitialization of the corresponding configuration function block.
+ */
+ void dropHandles();
- void run();
+ void run();
- void setInitDelay(int delay);
+ void setInitDelay(int paDelay);
- int initDelay;
+ int mInitDelay;
- void addHandle(THandleList* list, CIEC_WSTRING const &id, IOHandle* handle);
+ void addHandle(THandleList* paList, CIEC_WSTRING const &paId, IOHandle* paHandle);
- // Functions needed for the external event handler interface
- void enableHandler(void) {
- }
- void disableHandler(void) {
- }
- void setPriority(int) {
- }
- int getPriority(void) const {
- return 0;
- }
-};
+ // Functions needed for the external event handler interface
+ void enableHandler(void) {
+ //do nothing
+ }
+ void disableHandler(void) {
+ //do nothing
+ }
+ void setPriority(int) {
+ //do nothing
+ }
+ int getPriority(void) const {
+ return 0;
+ }
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/device/io_controller_multi.cpp b/src/core/io/device/io_controller_multi.cpp
index 30723bd..12f8695 100644
--- a/src/core/io/device/io_controller_multi.cpp
+++ b/src/core/io/device/io_controller_multi.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,25 +13,23 @@
#include "io_controller_multi.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IODeviceMultiController::IODeviceMultiController(CDeviceExecution& paDeviceExecution) : IODeviceController(paDeviceExecution){
+IODeviceMultiController::IODeviceMultiController(CDeviceExecution& paDeviceExecution) :
+ IODeviceController(paDeviceExecution) {
}
-void IODeviceMultiController::addHandle(
- IODeviceController::HandleDescriptor *handleDescriptor) {
- HandleDescriptor* desc = static_cast<HandleDescriptor*>(handleDescriptor);
+void IODeviceMultiController::addHandle(IODeviceController::HandleDescriptor *paHandleDescriptor) {
+ HandleDescriptor* desc = static_cast<HandleDescriptor*>(paHandleDescriptor);
IOHandle* handle = initHandle(desc);
- if (handle == 0) {
- DEVLOG_WARNING(
- "[IODeviceMultiController] Failed to initialize handle '%s'. Check initHandle method.\n",
- desc->id.getValue());
+ if(0 == handle) {
+ DEVLOG_WARNING("[IODeviceMultiController] Failed to initialize handle '%s'. Check initHandle method.\n", desc->mId.getValue());
return;
}
- if (IOMapper::getInstance().registerHandle(desc->id, handle)) {
- addSlaveHandle(desc->slaveIndex, handle);
+ if(IOMapper::getInstance().registerHandle(desc->mId, handle)) {
+ addSlaveHandle(desc->mSlaveIndex, handle);
} else {
delete handle;
}
diff --git a/src/core/io/device/io_controller_multi.h b/src/core/io/device/io_controller_multi.h
index d44d292..032ccd4 100644
--- a/src/core/io/device/io_controller_multi.h
+++ b/src/core/io/device/io_controller_multi.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,79 +19,75 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOConfigFBMultiSlave;
+ class IOConfigFBMultiSlave;
-/*! @brief Abstract Device Controller for modular devices
- *
- * The IODeviceMultiController extends the abstract #IODeviceController.
- * It integrates additional functionality for modular devices.
- * The controller should be used with the #IOConfigFBMulti configuration fbs.
- */
-class IODeviceMultiController: public IODeviceController {
- friend class IOConfigFBMultiSlave;
+ /*! @brief Abstract Device Controller for modular devices
+ *
+ * The IODeviceMultiController extends the abstract #IODeviceController.
+ * It integrates additional functionality for modular devices.
+ * The controller should be used with the #IOConfigFBMulti configuration fbs.
+ */
+ class IODeviceMultiController : public IODeviceController {
+ friend class IOConfigFBMultiSlave;
-public:
+ public:
- struct HandleDescriptor: IODeviceController::HandleDescriptor {
- int slaveIndex;
+ class HandleDescriptor : public IODeviceController::HandleDescriptor {
+ public:
+ int mSlaveIndex;
- HandleDescriptor(CIEC_WSTRING const &id, IOMapper::Direction direction,
- int slaveIndex) :
- IODeviceController::HandleDescriptor(id, direction), slaveIndex(slaveIndex) {
+ HandleDescriptor(CIEC_WSTRING const &paId, IOMapper::Direction paDirection, int paSlaveIndex) :
+ IODeviceController::HandleDescriptor(paId, paDirection), mSlaveIndex(paSlaveIndex) {
- }
- };
+ }
+ };
- /*! @brief Adds a handle for a slave
- *
- * The controller should read and write the given handle.
- * It should keep a list of handles and delete the provided handle in case the #dropSlaveHandles method is called.
- *
- * @param index Index/Position of the modular slave
- * @param handle IOHandle object which should be updated by the controller.
- */
- virtual void addSlaveHandle(int index, IOHandle* handle) = 0;
+ /*! @brief Adds a handle for a slave
+ *
+ * The controller should read and write the given handle.
+ * It should keep a list of handles and delete the provided handle in case the #dropSlaveHandles method is called.
+ *
+ * @param paIndex Index/Position of the modular slave
+ * @param paHandle IOHandle object which should be updated by the controller.
+ */
+ virtual void addSlaveHandle(int paIndex, IOHandle* paHandle) = 0;
- /*! @brief Drop all handles of a specific slave
- *
- * The method should delete all handles of the indexed slave.
- * All handles which were added by the #addSlaveHandle method should be deleted.
- *
- * @param index Index/Position of the modular slave
- */
- virtual void dropSlaveHandles(int index) = 0;
+ /*! @brief Drop all handles of a specific slave
+ *
+ * The method should delete all handles of the indexed slave.
+ * All handles which were added by the #addSlaveHandle method should be deleted.
+ *
+ * @param paIndex Index/Position of the modular slave
+ */
+ virtual void dropSlaveHandles(int paIndex) = 0;
-protected:
- explicit IODeviceMultiController(CDeviceExecution& paDeviceExecution);
+ protected:
+ explicit IODeviceMultiController(CDeviceExecution& paDeviceExecution);
- virtual void addHandle(IODeviceController::HandleDescriptor *handleDescriptor);
+ virtual void addHandle(IODeviceController::HandleDescriptor *paHandleDescriptor);
- virtual IOHandle* initHandle(HandleDescriptor *handleDescriptor) = 0;
+ virtual IOHandle* initHandle(IODeviceController::HandleDescriptor *paHandleDescriptor) = 0;
-private:
+ private:
- IOHandle* initHandle(IODeviceController::HandleDescriptor *handleDescriptor) {
- return initHandle(static_cast<HandleDescriptor*>(handleDescriptor));
- }
+ /*! @brief Checks if a slave exists at the given index
+ *
+ * @param paIndex Index/Position of the modular slave
+ * @return True in case a slave was found at the given position
+ */
+ virtual bool isSlaveAvailable(int paIndex) = 0;
- /*! @brief Checks if a slave exists at the given index
- *
- * @param index Index/Position of the modular slave
- * @return True in case a slave was found at the given position
- */
- virtual bool isSlaveAvailable(int index) = 0;
+ /*! @brief Checks if the slave type matches the configured type
+ *
+ * @param paIndex Index/Position of the modular slave
+ * @param paType Type identifier which describes the modular slave
+ * @return True in case the slave at the index has the given type
+ */
+ virtual bool checkSlaveType(int paIndex, int paType) = 0;
- /*! @brief Checks if the slave type matches the configured type
- *
- * @param index Index/Position of the modular slave
- * @param type Type identifier which describes the modular slave
- * @return True in case the slave at the index has the given type
- */
- virtual bool checkSlaveType(int index, int type) = 0;
-
-};
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/device/io_controller_poll.cpp b/src/core/io/device/io_controller_poll.cpp
index 84ab6ba..0cf649f 100644
--- a/src/core/io/device/io_controller_poll.cpp
+++ b/src/core/io/device/io_controller_poll.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,10 +13,10 @@
#include "io_controller_poll.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IODevicePollController::IODevicePollController(CDeviceExecution& paDeviceExecution, float PollInterval) : IODeviceController(paDeviceExecution),
- PollInterval(PollInterval){
+IODevicePollController::IODevicePollController(CDeviceExecution& paDeviceExecution, float paPollInterval) :
+ IODeviceController(paDeviceExecution), mPollInterval(paPollInterval) {
}
void IODevicePollController::handleChangeEvent(IOHandle*) {
@@ -23,30 +24,29 @@
}
void IODevicePollController::runLoop() {
- while (isAlive()) {
- forceLoop.timedWait(static_cast<const TForteUInt64>(PollInterval * 1E6)); //If timeout occurred is a normal waiting, otherwise is a forced loop. Don't care about the return value
+ while(isAlive()) {
+ mForceLoop.timedWait(static_cast<const TForteUInt64>(mPollInterval * 1E6)); //If timeout occurred is a normal waiting, otherwise is a forced loop. Don't care about the return value
// Perform poll operation
poll();
- if (hasError())
+ if(hasError()) {
break;
+ }
}
}
-void IODevicePollController::setPollInterval(float PollInterval) {
- if (PollInterval <= 0) {
- DEVLOG_WARNING(
- "[IODevicePollController] Configured PollInterval is set to an invalid value '%d'. Set to 25.\n",
- PollInterval);
- PollInterval = 25;
+void IODevicePollController::setPollInterval(float paPollInterval) {
+ if(paPollInterval <= 0) {
+ DEVLOG_WARNING("[IODevicePollController] Configured PollInterval is set to an invalid value '%d'. Set to 25.\n", paPollInterval);
+ paPollInterval = 25;
}
- this->PollInterval = PollInterval;
+ this->mPollInterval = paPollInterval;
}
void IODevicePollController::forcePoll() {
- forceLoop.inc();
+ mForceLoop.inc();
}
diff --git a/src/core/io/device/io_controller_poll.h b/src/core/io/device/io_controller_poll.h
index 5ac8e52..fea06be 100644
--- a/src/core/io/device/io_controller_poll.h
+++ b/src/core/io/device/io_controller_poll.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,56 +19,57 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-/*! @brief Abstract Device Controller for devices which require cyclic poll operations
- *
- * IO device controller for devices which require an implementation of IOs using poll operations.
- * Offers a #poll method which performs an IO update in a configured #PollInterval.
- * Allows to force a polling routine with the #forcePoll method (e.g. can be used to set an output immediately).
- */
-class IODevicePollController: public IODeviceController {
-public:
+ /*! @brief Abstract Device Controller for devices which require cyclic poll operations
+ *
+ * IO device controller for devices which require an implementation of IOs using poll operations.
+ * Offers a #poll method which performs an IO update in a configured #PollInterval.
+ * Allows to force a polling routine with the #forcePoll method (e.g. can be used to set an output immediately).
+ */
+ class IODevicePollController : public IODeviceController {
+ public:
- virtual void handleChangeEvent(IOHandle *handle);
+ virtual void handleChangeEvent(IOHandle *paHandle);
-protected:
- /*! @brief Constructor
- *
- * @param PollInterval Default poll routines per seconds (Hz). Must be greater than 0. Call #setPollInterval in the #setConfig method.
- */
- IODevicePollController(CDeviceExecution& paDeviceExecution, float PollInterval);
+ protected:
+ /*! @brief Constructor
+ *
+ * @param paDeviceExecution Device execution where the controller runs
+ * @param paPollInterval Default poll routines per seconds (Hz). Must be greater than 0. Call #setPollInterval in the #setConfig method.
+ */
+ IODevicePollController(CDeviceExecution& paDeviceExecution, float paPollInterval);
- /*! @brief Poll routine which updates the IO state of the device
- *
- * The IO states of all handles should be written/read in this method.
- * The method should call the #checkForInputChanges method after receiving new input states.
- *
- * @attention The method should perform a single update routine and not a blocking loop.
- */
- virtual void poll() = 0;
+ /*! @brief Poll routine which updates the IO state of the device
+ *
+ * The IO states of all handles should be written/read in this method.
+ * The method should call the #checkForInputChanges method after receiving new input states.
+ *
+ * @attention The method should perform a single update routine and not a blocking loop.
+ */
+ virtual void poll() = 0;
- /*! @brief Forces an execution of the #poll routine
- *
- * Should be called by the corresponding device #IOHandle implementation after setting/changing an output handle.
- */
- void forcePoll();
+ /*! @brief Forces an execution of the #poll routine
+ *
+ * Should be called by the corresponding device #IOHandle implementation after setting/changing an output handle.
+ */
+ void forcePoll();
- /*! @brief Sets the polling interval in Hz (poll routines per second)
- *
- * The poll interval should not be set to high as the poll operations may consume too much processing power and consequently block other control operations.
- *
- * @param PollInterval Poll routines per seconds (Hz). Must be greater than 0.
- */
- void setPollInterval(float PollInterval);
+ /*! @brief Sets the polling interval in Hz (poll routines per second)
+ *
+ * The poll interval should not be set to high as the poll operations may consume too much processing power and consequently block other control operations.
+ *
+ * @param paPollInterval Poll routines per seconds (Hz). Must be greater than 0.
+ */
+ void setPollInterval(float paPollInterval);
-private:
- virtual void runLoop();
+ private:
+ virtual void runLoop();
- float PollInterval;
+ float mPollInterval;
- CSemaphore forceLoop;
-};
+ CSemaphore mForceLoop;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/mapper/CMakeLists.txt b/src/core/io/mapper/CMakeLists.txt
index 32f275d..2131e11 100644
--- a/src/core/io/mapper/CMakeLists.txt
+++ b/src/core/io/mapper/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Johannes Messmer
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Johannes Messmer
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/core/io/mapper/io_handle.cpp b/src/core/io/mapper/io_handle.cpp
index 1b936ba..e65de18 100644
--- a/src/core/io/mapper/io_handle.cpp
+++ b/src/core/io/mapper/io_handle.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -15,31 +16,27 @@
#include <io/device/io_controller.h>
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOHandle::IOHandle(IODeviceController *controller, IOMapper::Direction direction, CIEC_ANY::EDataTypeID type) :
- controller(controller), observer(0), type(type), direction(
- direction) {
-
+IOHandle::IOHandle(IODeviceController *paController, IOMapper::Direction paDirection, CIEC_ANY::EDataTypeID paType) :
+ mController(paController), mType(paType), mDirection(paDirection), mObserver(0) {
}
IOHandle::~IOHandle() {
IOMapper::getInstance().deregisterHandle(this);
}
-void IOHandle::onObserver(IOObserver *observer) {
- this->observer = observer;
+void IOHandle::onObserver(IOObserver *paObserver) {
+ this->mObserver = paObserver;
}
void IOHandle::dropObserver() {
- this->observer = 0;
+ this->mObserver = 0;
}
void IOHandle::onChange() {
- if (observer != 0) {
- if (observer->onChange()) {
- controller->fireIndicationEvent(observer);
- }
+ if(mObserver != 0 && mObserver->onChange()) {
+ mController->fireIndicationEvent(mObserver);
}
}
diff --git a/src/core/io/mapper/io_handle.h b/src/core/io/mapper/io_handle.h
index 768d85f..de68300 100644
--- a/src/core/io/mapper/io_handle.h
+++ b/src/core/io/mapper/io_handle.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -20,52 +21,57 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IODeviceController;
+ class IODeviceController;
-class IOHandle {
- friend class IOMapper;
+ class IOHandle {
+ friend class IOMapper;
-public:
- IOHandle(IODeviceController *controller, IOMapper::Direction direction, CIEC_ANY::EDataTypeID type);
- virtual ~IOHandle();
+ public:
+ IOHandle(IODeviceController *paController, IOMapper::Direction paDirection, CIEC_ANY::EDataTypeID paType);
+ virtual ~IOHandle();
- bool hasObserver() {
- return !!observer;
- }
+ bool hasObserver() {
+ return !!mObserver;
+ }
- IOObserver* getObserver() {
- return observer;
- }
+ IOObserver* getObserver() {
+ return mObserver;
+ }
- bool is(CIEC_ANY::EDataTypeID type) {
- return this->type == type;
- }
+ bool is(CIEC_ANY::EDataTypeID paType) {
+ return this->mType == paType;
+ }
- bool is(IOMapper::Direction direction) {
- return this->direction == direction;
- }
+ bool is(IOMapper::Direction paDirection) {
+ return this->mDirection == paDirection;
+ }
- virtual void set(const CIEC_ANY &) = 0;
- virtual void get(CIEC_ANY &) = 0;
+ virtual void set(const CIEC_ANY &) = 0;
+ virtual void get(CIEC_ANY &) = 0;
- void onChange();
+ void onChange();
-protected:
- IODeviceController *controller;
+ protected:
- virtual void onObserver(IOObserver *observer);
- virtual void dropObserver();
+ IODeviceController *mController;
+ CIEC_ANY::EDataTypeID mType;
- IOObserver *observer;
- CIEC_ANY::EDataTypeID type;
- IOMapper::Direction direction;
-};
+ IOMapper::Direction mDirection;
+
+ virtual void onObserver(IOObserver *paObserver);
+ virtual void dropObserver();
+
+ private:
+
+ IOObserver *mObserver;
+
+
+ };
} //namespace IO
} //namepsace core
} //namespace forte
-
#endif /* SRC_CORE_IO_MAPPER_HANDLE_H_ */
diff --git a/src/core/io/mapper/io_handle_bit.cpp b/src/core/io/mapper/io_handle_bit.cpp
index 1e3c6c4..99d972c 100644
--- a/src/core/io/mapper/io_handle_bit.cpp
+++ b/src/core/io/mapper/io_handle_bit.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -12,46 +13,44 @@
#include "io_handle_bit.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
-IOHandleBit::IOHandleBit(IODeviceController *controller, IOMapper::Direction direction,
- uint8_t offset, uint8_t position, uint8_t* image) :
- IOHandle(controller, direction, CIEC_ANY::e_BOOL), image(image), offset(
- offset), mask((uint8_t) (1 << position)) {
+IOHandleBit::IOHandleBit(IODeviceController *paController, IOMapper::Direction paDirection, uint8_t paOffset, uint8_t paPosition, uint8_t* paImage) :
+ IOHandle(paController, paDirection, CIEC_ANY::e_BOOL), mOffset(paOffset), mMask((uint8_t) (1 << paPosition)), mImage(paImage) {
}
-void IOHandleBit::onObserver(IOObserver *observer) {
- IOHandle::onObserver(observer);
+void IOHandleBit::onObserver(IOObserver *paObserver) {
+ IOHandle::onObserver(paObserver);
- if (direction == IOMapper::In) {
+ if(mDirection == IOMapper::In) {
CIEC_BOOL state;
get(state);
- if (state) {
- controller->fireIndicationEvent(observer);
+ if(state) {
+ mController->fireIndicationEvent(paObserver);
}
}
}
void IOHandleBit::dropObserver() {
IOHandle::dropObserver();
-
reset();
}
-void IOHandleBit::set(const CIEC_ANY &state) {
- if (static_cast<const CIEC_BOOL&>(state))
- *(image + offset) = (uint8_t) (*(image + offset) | mask);
- else
- *(image + offset) = (uint8_t) (*(image + offset) & ~mask);
+void IOHandleBit::set(const CIEC_ANY &paState) {
+ if(static_cast<const CIEC_BOOL&>(paState)) {
+ *(mImage + mOffset) = (uint8_t) (*(mImage + mOffset) | mMask);
+ } else {
+ *(mImage + mOffset) = (uint8_t) (*(mImage + mOffset) & ~mMask);
+ }
- controller->handleChangeEvent(this);
+ mController->handleChangeEvent(this);
}
-void IOHandleBit::get(CIEC_ANY &state) {
- static_cast<CIEC_BOOL&>(state) = (*(image + offset) & mask) != 0;
+void IOHandleBit::get(CIEC_ANY &paState) {
+ static_cast<CIEC_BOOL&>(paState) = (*(mImage + mOffset) & mMask) != 0;
}
-bool IOHandleBit::equal(uint8_t* oldImage) {
- return (*(image + offset) & mask) == (*(oldImage + offset) & mask);
+bool IOHandleBit::equal(uint8_t* paOldImage) {
+ return (*(mImage + mOffset) & mMask) == (*(paOldImage + mOffset) & mMask);
}
diff --git a/src/core/io/mapper/io_handle_bit.h b/src/core/io/mapper/io_handle_bit.h
index 4a73bda..7fd0842 100644
--- a/src/core/io/mapper/io_handle_bit.h
+++ b/src/core/io/mapper/io_handle_bit.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 - 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,33 +19,33 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOHandleBit: public IOHandle {
-public:
- IOHandleBit(IODeviceController *controller, IOMapper::Direction direction,
- uint8_t offset,
- uint8_t position, uint8_t* image);
+ class IOHandleBit : public IOHandle {
+ public:
+ IOHandleBit(IODeviceController *paController, IOMapper::Direction paDirection, uint8_t paOffset, uint8_t paPosition, uint8_t* paImage);
- virtual void set(const CIEC_ANY &);
- void get(CIEC_ANY &);
+ virtual void set(const CIEC_ANY &);
+ void get(CIEC_ANY &);
- bool equal(unsigned char* oldImage);
+ bool equal(unsigned char* paOldImage);
-protected:
- virtual void onObserver(IOObserver *observer);
+ protected:
+ virtual void onObserver(IOObserver *paObserver);
- virtual void dropObserver();
+ virtual void dropObserver();
- virtual void reset() {
- CIEC_BOOL s = false;
- set(s);
- }
+ virtual void reset() {
+ CIEC_BOOL s = false;
+ set(s);
+ }
- uint8_t* image;
- const uint8_t offset;
- const uint8_t mask;
-};
+ const uint8_t mOffset;
+ const uint8_t mMask;
+
+ private:
+ uint8_t* mImage;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/mapper/io_mapper.cpp b/src/core/io/mapper/io_mapper.cpp
index df92e2e..e99e69c 100644
--- a/src/core/io/mapper/io_mapper.cpp
+++ b/src/core/io/mapper/io_mapper.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,7 +17,7 @@
#include <devlog.h>
#include "criticalregion.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
DEFINE_SINGLETON(IOMapper)
@@ -28,96 +29,92 @@
}
-bool IOMapper::registerHandle(CIEC_WSTRING const &id, IOHandle* handle) {
- CCriticalRegion criticalRegion(syncMutex);
- std::string idStr(id.getValue());
+bool IOMapper::registerHandle(CIEC_WSTRING const &paId, IOHandle* paHandle) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ std::string idStr(paId.getValue());
// Check for duplicates
- if (handles.find(idStr) != handles.end()) {
- DEVLOG_WARNING("[IOMapper] Duplicated handle entry '%s'\n",
- id.getValue());
+ if(mHandles.find(idStr) != mHandles.end()) {
+ DEVLOG_WARNING("[IOMapper] Duplicated handle entry '%s'\n", paId.getValue());
return false;
}
// Insert into handles list
- handles.insert(std::make_pair(idStr, handle));
+ mHandles.insert(std::make_pair(idStr, paHandle));
- DEVLOG_DEBUG("[IOMapper] Register handle %s\n", id.getValue());
+ DEVLOG_DEBUG("[IOMapper] Register handle %s\n", paId.getValue());
// Check for existing observer
- if (observers.find(idStr) != observers.end()) {
- handle->onObserver(observers[idStr]);
- observers[idStr]->onHandle(handle);
+ if(mObservers.find(idStr) != mObservers.end()) {
+ paHandle->onObserver(mObservers[idStr]);
+ mObservers[idStr]->onHandle(paHandle);
- DEVLOG_INFO("[IOMapper] Connected %s\n", id.getValue());
+ DEVLOG_INFO("[IOMapper] Connected %s\n", paId.getValue());
}
return true;
}
-void IOMapper::deregisterHandle(IOHandle* handle) {
- CCriticalRegion criticalRegion(syncMutex);
+void IOMapper::deregisterHandle(IOHandle* paHandle) {
+ CCriticalRegion criticalRegion(mSyncMutex);
- for (THandleMap::iterator it = handles.begin(); it != handles.end(); ++it)
- if (it->second == handle) {
- if (observers.find(it->first) != observers.end()) {
- handle->dropObserver();
- observers[it->first]->dropHandle();
- DEVLOG_INFO("[IOMapper] Disconnected %s (lost handle)\n",
- it->first.data());
+ for(THandleMap::iterator it = mHandles.begin(); it != mHandles.end(); ++it) {
+ if(it->second == paHandle) {
+ if(mObservers.find(it->first) != mObservers.end()) {
+ paHandle->dropObserver();
+ mObservers[it->first]->dropHandle();
+ DEVLOG_INFO("[IOMapper] Disconnected %s (lost handle)\n", it->first.data());
}
DEVLOG_DEBUG("[IOMapper] Deregister handle %s\n", it->first.data());
- handles.erase(it);
+ mHandles.erase(it);
break;
}
-
+ }
}
-bool IOMapper::registerObserver(CIEC_WSTRING const &id, IOObserver* observer) {
- CCriticalRegion criticalRegion(syncMutex);
- std::string idStr(id.getValue());
+bool IOMapper::registerObserver(CIEC_WSTRING const &paId, IOObserver* paObserver) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ std::string idStr(paId.getValue());
// Check for duplicates
- if (observers.find(idStr) != observers.end()) {
- DEVLOG_WARNING("[IOMapper] Duplicated observer entry '%s'\n",
- id.getValue());
+ if(mObservers.find(idStr) != mObservers.end()) {
+ DEVLOG_WARNING("[IOMapper] Duplicated observer entry '%s'\n", paId.getValue());
return false;
}
// Insert into observer list
- observers.insert(std::make_pair(idStr, observer));
+ mObservers.insert(std::make_pair(idStr, paObserver));
- DEVLOG_DEBUG("[IOMapper] Register observer %s\n", id.getValue());
+ DEVLOG_DEBUG("[IOMapper] Register observer %s\n", paId.getValue());
// Check for existing handle
- if (handles.find(idStr) != handles.end()) {
- handles[idStr]->onObserver(observer);
- observer->onHandle(handles[idStr]);
+ if(mHandles.find(idStr) != mHandles.end()) {
+ mHandles[idStr]->onObserver(paObserver);
+ paObserver->onHandle(mHandles[idStr]);
- DEVLOG_INFO("[IOMapper] Connected %s\n", id.getValue());
+ DEVLOG_INFO("[IOMapper] Connected %s\n", paId.getValue());
}
return true;
}
-void IOMapper::deregisterObserver(IOObserver* observer) {
- CCriticalRegion criticalRegion(syncMutex);
+void IOMapper::deregisterObserver(IOObserver* paObserver) {
+ CCriticalRegion criticalRegion(mSyncMutex);
- for (TObserverMap::iterator it = observers.begin(); it != observers.end();
- ++it)
- if (it->second == observer) {
- if (handles.find(it->first) != handles.end()) {
- handles[it->first]->dropObserver();
- observer->dropHandle();
- DEVLOG_INFO("[IOMapper] Disconnected %s (lost observer)\n",
- it->first.data());
+ for(TObserverMap::iterator it = mObservers.begin(); it != mObservers.end(); ++it) {
+ if(it->second == paObserver) {
+ if(mHandles.find(it->first) != mHandles.end()) {
+ mHandles[it->first]->dropObserver();
+ paObserver->dropHandle();
+ DEVLOG_INFO("[IOMapper] Disconnected %s (lost observer)\n", it->first.data());
}
DEVLOG_DEBUG("[IOMapper] Deregister observer %s\n", it->first.data());
- observers.erase(it);
+ mObservers.erase(it);
break;
}
+ }
}
diff --git a/src/core/io/mapper/io_mapper.h b/src/core/io/mapper/io_mapper.h
index ddb0fce..6033630 100644
--- a/src/core/io/mapper/io_mapper.h
+++ b/src/core/io/mapper/io_mapper.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -21,35 +22,37 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOHandle;
-class IOObserver;
+ class IOHandle;
+ class IOObserver;
-class IOMapper {
- DECLARE_SINGLETON (IOMapper)
+ class IOMapper {
+ DECLARE_SINGLETON (IOMapper)
-public:
- enum Direction {
- UnknownDirection, In, Out, InOut
- };
+ public:
+ enum Direction {
+ UnknownDirection,
+ In,
+ Out,
+ InOut
+ };
-public:
- bool registerHandle(CIEC_WSTRING const &id, IOHandle* handle);
- void deregisterHandle(IOHandle* handle);
+ bool registerHandle(CIEC_WSTRING const &paId, IOHandle* paHandle);
+ void deregisterHandle(IOHandle* paHandle);
- bool registerObserver(CIEC_WSTRING const &id, IOObserver* observer);
- void deregisterObserver(IOObserver* observer);
+ bool registerObserver(CIEC_WSTRING const &paId, IOObserver* paObserver);
+ void deregisterObserver(IOObserver* paObserver);
-private:
- typedef std::map<std::string, IOHandle*> THandleMap;
- THandleMap handles;
+ private:
+ typedef std::map<std::string, IOHandle*> THandleMap;
+ THandleMap mHandles;
- typedef std::map<std::string, IOObserver*> TObserverMap;
- TObserverMap observers;
+ typedef std::map<std::string, IOObserver*> TObserverMap;
+ TObserverMap mObservers;
- CSyncObject syncMutex;
-};
+ CSyncObject mSyncMutex;
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/mapper/io_observer.cpp b/src/core/io/mapper/io_observer.cpp
index 1502e9f..9b95db1 100644
--- a/src/core/io/mapper/io_observer.cpp
+++ b/src/core/io/mapper/io_observer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,10 +14,10 @@
#include "io_observer.h"
#include <devlog.h>
-using namespace forte::core::IO;
+using namespace forte::core::io;
IOObserver::IOObserver() :
- handle(NULL), type(CIEC_ANY::e_ANY), direction(IOMapper::UnknownDirection) {
+ mHandle(NULL), mType(CIEC_ANY::e_ANY), mDirection(IOMapper::UnknownDirection) {
}
@@ -24,11 +25,11 @@
IOMapper::getInstance().deregisterObserver(this);
}
-void IOObserver::onHandle(IOHandle *handle) {
- this->handle = handle;
+void IOObserver::onHandle(IOHandle *paHandle) {
+ this->mHandle = paHandle;
}
void IOObserver::dropHandle() {
- this->handle = NULL;
+ this->mHandle = NULL;
}
diff --git a/src/core/io/mapper/io_observer.h b/src/core/io/mapper/io_observer.h
index 23da9bf..dff270b 100644
--- a/src/core/io/mapper/io_observer.h
+++ b/src/core/io/mapper/io_observer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,25 +19,26 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class IOObserver {
- friend class IOMapper;
+ class IOObserver {
+ friend class IOMapper;
-public:
- IOObserver();
- virtual ~IOObserver();
+ public:
+ IOObserver();
+ virtual ~IOObserver();
- virtual bool onChange() = 0;
+ virtual bool onChange() = 0;
-protected:
- virtual void onHandle(IOHandle *handle);
- virtual void dropHandle();
+ protected:
+ IOHandle* mHandle;
+ CIEC_ANY::EDataTypeID mType;
+ IOMapper::Direction mDirection;
- IOHandle* handle;
- CIEC_ANY::EDataTypeID type;
- IOMapper::Direction direction;
-};
+ virtual void onHandle(IOHandle *paHandle);
+ virtual void dropHandle();
+
+ };
} //namespace IO
} //namepsace core
diff --git a/src/core/io/processinterface.cpp b/src/core/io/processinterface.cpp
index 7ae2883..378be77 100644
--- a/src/core/io/processinterface.cpp
+++ b/src/core/io/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,28 +14,20 @@
#include "processinterface.h"
#include "criticalregion.h"
-using namespace forte::core::IO;
+using namespace forte::core::io;
const char * const ProcessInterface::scmOK = "OK";
-const char * const ProcessInterface::scmWaitingForHandle =
- "Waiting for handle..";
-const char * const ProcessInterface::scmFailedToRegister =
- "Failed to register observer.";
-const char * const ProcessInterface::scmMappedWrongDirectionOutput =
- "Mapped invalid direction. A Q block requires an output handle.";
-const char * const ProcessInterface::scmMappedWrongDirectionInput =
- "Mapped invalid direction. An I block requires an input handle.";
-const char * const ProcessInterface::scmMappedWrongDataType =
- "Mapped invalid data type.";
+const char * const ProcessInterface::scmWaitingForHandle = "Waiting for handle..";
+const char * const ProcessInterface::scmFailedToRegister = "Failed to register observer.";
+const char * const ProcessInterface::scmMappedWrongDirectionOutput = "Mapped invalid direction. A Q block requires an output handle.";
+const char * const ProcessInterface::scmMappedWrongDirectionInput = "Mapped invalid direction. An I block requires an input handle.";
+const char * const ProcessInterface::scmMappedWrongDataType = "Mapped invalid data type.";
-ProcessInterface::ProcessInterface(CResource *paSrcRes,
- const SFBInterfaceSpec *paInterfaceSpec,
- const CStringDictionary::TStringId paInstanceNameId,
+ProcessInterface::ProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
TForteByte *paFBConnData, TForteByte *paFBVarsData) :
- CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId,
- paFBConnData, paFBVarsData), IOObserver() {
- isListening = false;
- isReady = false;
+ CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), IOObserver() {
+ mIsListening = false;
+ mIsReady = false;
}
ProcessInterface::~ProcessInterface() {
@@ -42,67 +35,67 @@
}
bool ProcessInterface::initialise(bool paIsInput) {
- direction = paIsInput ? IOMapper::In : IOMapper::Out;
- type = (paIsInput ? getDO(2) : getDI(2))->getDataTypeID();
+ mDirection = paIsInput ? IOMapper::In : IOMapper::Out;
+ mType = (paIsInput ? getDO(2) : getDI(2))->getDataTypeID();
- isReady = false;
+ mIsReady = false;
STATUS() = scmWaitingForHandle;
// Reset before initialization
deinitialise();
// Register interface
- if (!(isListening = IOMapper::getInstance().registerObserver(getInstanceName(),
- this))) {
+ if(!(mIsListening = IOMapper::getInstance().registerObserver(getInstanceName(), this))) {
STATUS() = scmFailedToRegister;
return false;
}
- return isReady;
+ return mIsReady;
}
bool ProcessInterface::deinitialise() {
// Deregister interface
- if (isListening)
+ if(mIsListening) {
IOMapper::getInstance().deregisterObserver(this);
+ }
- return !isReady;
+ return !mIsReady;
}
-bool ProcessInterface::read(CIEC_ANY &data) {
- CCriticalRegion criticalRegion(syncMutex);
- if (!isReady) {
+bool ProcessInterface::read(CIEC_ANY &paData) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ if(!mIsReady) {
return false;
}
- handle->get(data);
+ mHandle->get(paData);
return true;
}
-bool ProcessInterface::write(CIEC_ANY &data) {
- CCriticalRegion criticalRegion(syncMutex);
- if (!isReady) {
+bool ProcessInterface::write(CIEC_ANY &paData) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ if(!mIsReady) {
return false;
}
- handle->set(data);
+ mHandle->set(paData);
return true;
}
bool ProcessInterface::read() {
- CCriticalRegion criticalRegion(syncMutex);
- if (!isReady) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ if(!mIsReady) {
return false;
}
- if (handle->is(CIEC_ANY::e_BOOL)) {
- handle->get(IN_X());
- } else if (handle->is(CIEC_ANY::e_WORD)) {
- handle->get(IN_W());
- } else if (handle->is(CIEC_ANY::e_DWORD)) {
- handle->get(IN_D());
+ if(mHandle->is(CIEC_ANY::e_BOOL)) {
+ mHandle->get(IN_X());
+ } else if(mHandle->is(CIEC_ANY::e_WORD)) {
+ mHandle->get(IN_W());
+ } else if(mHandle->is(CIEC_ANY::e_DWORD)) {
+ mHandle->get(IN_D());
} else {
return false;
}
@@ -111,17 +104,17 @@
}
bool ProcessInterface::write() {
- CCriticalRegion criticalRegion(syncMutex);
- if (!isReady) {
+ CCriticalRegion criticalRegion(mSyncMutex);
+ if(!mIsReady) {
return false;
}
- if (handle->is(CIEC_ANY::e_BOOL)) {
- handle->set(OUT_X());
- } else if (handle->is(CIEC_ANY::e_WORD)) {
- handle->set(OUT_W());
- } else if (handle->is(CIEC_ANY::e_DWORD)) {
- handle->set(OUT_D());
+ if(mHandle->is(CIEC_ANY::e_BOOL)) {
+ mHandle->set(OUT_X());
+ } else if(mHandle->is(CIEC_ANY::e_WORD)) {
+ mHandle->set(OUT_W());
+ } else if(mHandle->is(CIEC_ANY::e_DWORD)) {
+ mHandle->set(OUT_D());
} else {
return false;
}
@@ -133,44 +126,45 @@
return read();
}
-void ProcessInterface::onHandle(IOHandle* handle) {
+void ProcessInterface::onHandle(IOHandle* paHandle) {
{
- CCriticalRegion criticalRegion(syncMutex);
+ CCriticalRegion criticalRegion(mSyncMutex);
- IOObserver::onHandle(handle);
+ IOObserver::onHandle(paHandle);
- if(!handle->is(type)){
+ if(!paHandle->is(mType)) {
STATUS() = scmMappedWrongDataType;
return;
}
- if(!handle->is(direction)){
- STATUS() = direction == IOMapper::In ? scmMappedWrongDirectionInput : scmMappedWrongDirectionOutput;
+ if(!paHandle->is(mDirection)) {
+ STATUS() = mDirection == IOMapper::In ? scmMappedWrongDirectionInput : scmMappedWrongDirectionOutput;
return;
}
- if(direction == IOMapper::In)
+ if(mDirection == IOMapper::In) {
setEventChainExecutor(m_poInvokingExecEnv);
+ }
STATUS() = scmOK;
- isReady = true;
+ mIsReady = true;
}
// Read & write current state
- if (direction == IOMapper::In)
+ if(mDirection == IOMapper::In) {
QO() = read();
- else
+ } else {
QO() = write();
+ }
}
void ProcessInterface::dropHandle() {
- CCriticalRegion criticalRegion(syncMutex);
+ CCriticalRegion criticalRegion(mSyncMutex);
IOObserver::dropHandle();
QO() = false;
STATUS() = scmWaitingForHandle;
- isReady = false;
-
+ mIsReady = false;
}
diff --git a/src/core/io/processinterface.h b/src/core/io/processinterface.h
index df8d1ab..65f6819 100644
--- a/src/core/io/processinterface.h
+++ b/src/core/io/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -21,68 +22,66 @@
namespace forte {
namespace core {
- namespace IO {
+ namespace io {
-class ProcessInterface: public CProcessInterfaceBase, public IOObserver {
+ class ProcessInterface : public CProcessInterfaceBase, public IOObserver {
-public:
- ProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec,
- const CStringDictionary::TStringId paInstanceNameId,
- TForteByte *paFBConnData, TForteByte *paFBVarsData);
- virtual ~ProcessInterface();
+ public:
+ ProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~ProcessInterface();
- bool onChange();
+ bool onChange();
-protected:
- bool initialise(bool paIsInput);
- bool deinitialise();
- bool readPin() {
- return read(IN_X());
- }
- bool writePin() {
- return write(OUT_X());
- }
- bool readWord() {
- return read(IN_W());
- }
- bool writeWord() {
- return write(OUT_W());
- }
- bool readDWord() {
- return read(IN_D());
- }
- bool writeDWord() {
- return write(OUT_D());
- }
+ protected:
+ bool initialise(bool paIsInput);
+ bool deinitialise();
+ bool readPin() {
+ return read(IN_X());
+ }
+ bool writePin() {
+ return write(OUT_X());
+ }
+ bool readWord() {
+ return read(IN_W());
+ }
+ bool writeWord() {
+ return write(OUT_W());
+ }
+ bool readDWord() {
+ return read(IN_D());
+ }
+ bool writeDWord() {
+ return write(OUT_D());
+ }
- bool read();
- bool write();
+ bool read();
+ bool write();
- bool read(CIEC_ANY &);
- bool write(CIEC_ANY &);
+ bool read(CIEC_ANY &);
+ bool write(CIEC_ANY &);
- virtual void onHandle(IOHandle *handle);
- virtual void dropHandle();
+ virtual void onHandle(IOHandle *paHandle);
+ virtual void dropHandle();
- CSyncObject syncMutex;
+ private:
+ bool mIsListening;
+ bool mIsReady;
+ CSyncObject mSyncMutex;
-private:
- bool isListening;
- bool isReady;
-
- static const char * const scmOK;
- static const char * const scmWaitingForHandle;
- static const char * const scmFailedToRegister;
- static const char * const scmMappedWrongDirectionOutput;
- static const char * const scmMappedWrongDirectionInput;
- static const char * const scmMappedWrongDataType;
-};
+ static const char * const scmOK;
+ static const char * const scmWaitingForHandle;
+ static const char * const scmFailedToRegister;
+ static const char * const scmMappedWrongDirectionOutput;
+ static const char * const scmMappedWrongDirectionInput;
+ static const char * const scmMappedWrongDataType;
+ };
} //namespace IO
} //namepsace core
} //namespace forte
-typedef forte::core::IO::ProcessInterface CProcessInterface;
+typedef forte::core::io::ProcessInterface CProcessInterface;
diff --git a/src/core/lua/CMakeLists.txt b/src/core/lua/CMakeLists.txt
index 40d8368..9a997cc 100644
--- a/src/core/lua/CMakeLists.txt
+++ b/src/core/lua/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/core/lua/luaadapter.cpp b/src/core/lua/luaadapter.cpp
index b2b4b59..319da5e 100644
--- a/src/core/lua/luaadapter.cpp
+++ b/src/core/lua/luaadapter.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -13,9 +14,10 @@
#include "luaadapter.h"
#include "resource.h"
-CLuaAdapter::CLuaAdapter(CStringDictionary::TStringId instanceNameId, const CLuaAdapterTypeEntry* typeEntry, bool pa_bIsPlug, TForteByte *connData, TForteByte *varsData, CResource *resource)
- : CAdapter(resource, typeEntry->getSocketInterfaceSpec(), instanceNameId, typeEntry->getPlugInterfaceSpec(), pa_bIsPlug, connData, varsData){
- this->typeEntry = typeEntry;
+CLuaAdapter::CLuaAdapter(CStringDictionary::TStringId paInstanceNameId, const CLuaAdapterTypeEntry* paTypeEntry, bool paIsPlug, TForteByte *paConnData,
+ TForteByte *paVarsData, CResource *paResource) :
+ CAdapter(paResource, paTypeEntry->getSocketInterfaceSpec(), paInstanceNameId, paTypeEntry->getPlugInterfaceSpec(), paIsPlug, paConnData, paVarsData),
+ mTypeEntry(paTypeEntry) {
}
CLuaAdapter::~CLuaAdapter() {
diff --git a/src/core/lua/luaadapter.h b/src/core/lua/luaadapter.h
index 0c6ca24..7a306b3 100644
--- a/src/core/lua/luaadapter.h
+++ b/src/core/lua/luaadapter.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -16,17 +17,18 @@
#include "adapter.h"
#include "luaadaptertypeentry.h"
-class CLuaAdapter: public CAdapter {
-private:
- const CLuaAdapterTypeEntry* typeEntry;
+class CLuaAdapter : public CAdapter {
+ public:
+ CLuaAdapter(CStringDictionary::TStringId paInstanceNameId, const CLuaAdapterTypeEntry* paTypeEntry, bool paIsPlug, TForteByte *paConnData,
+ TForteByte *paVarsData, CResource *paResource);
+ virtual ~CLuaAdapter();
-public:
- CLuaAdapter(CStringDictionary::TStringId instanceNameId, const CLuaAdapterTypeEntry* typeEntry, bool pa_bIsPlug, TForteByte *connData, TForteByte *varsData, CResource *resource);
- virtual ~CLuaAdapter();
+ virtual CStringDictionary::TStringId getFBTypeId(void) const {
+ return mTypeEntry->getTypeNameId();
+ }
- virtual CStringDictionary::TStringId getFBTypeId(void) const {
- return typeEntry->getTypeNameId();
- }
+ private:
+ const CLuaAdapterTypeEntry* mTypeEntry;
};
#endif /* SRC_CORE_LUAADAPTER_H_ */
diff --git a/src/core/lua/luaadaptertypeentry.cpp b/src/core/lua/luaadaptertypeentry.cpp
index 879bbc0..5b851d9 100644
--- a/src/core/lua/luaadaptertypeentry.cpp
+++ b/src/core/lua/luaadaptertypeentry.cpp
@@ -1,154 +1,154 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#include "luaadaptertypeentry.h"
-#include "luaengine.h"
-#include "luatype.h"
-#include "luaadapter.h"
-#include "resource.h"
-#include "adapter.h"
-
-
-
-CLuaAdapterTypeEntry::CLuaAdapterTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& interfaceSpec)
- : CTypeLib::CAdapterTypeEntry(typeNameId, 0), cm_sLuaScriptAsString(paLuaScriptAsString), mSocketInterfaceSpec(interfaceSpec) {
- initPlugInterfaceSpec(mSocketInterfaceSpec);
-}
-
-CLuaAdapterTypeEntry::~CLuaAdapterTypeEntry() {
- deleteInterfaceSpec(mSocketInterfaceSpec);
-}
-
-CLuaAdapterTypeEntry* CLuaAdapterTypeEntry::createLuaAdapterTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING& paLuaScriptAsString) {
- CLuaEngine luaEngine;
- if (!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
- return NULL;
- }
- //interfaceSpec
- SFBInterfaceSpec interfaceSpec = { };
- if (!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
- return NULL;
- }
- if (!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
- deleteInterfaceSpec(interfaceSpec);
- return NULL;
- }
- luaEngine.pop(); //pop interfaceSpec
- luaEngine.pop(); //pop loaded defs
- return new CLuaAdapterTypeEntry(typeNameId, paLuaScriptAsString, interfaceSpec);
-}
-
-CAdapter* CLuaAdapterTypeEntry::createAdapterInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes, bool pa_bIsPlug) {
- CLuaEngine* luaEngine = pa_poSrcRes->getLuaEngine();
- if (!luaEngine->load(this)) {
- if (!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue()))) {
- return NULL;
- }
- }
- TForteByte* connData = 0;
- TForteByte* varsData = 0;
- if(pa_bIsPlug){
- connData = new TForteByte[CAdapter::genAdapterFBConnDataSize(mPlugInterfaceSpec.m_nNumEIs, mPlugInterfaceSpec.m_nNumEOs, mPlugInterfaceSpec.m_nNumDIs, mPlugInterfaceSpec.m_nNumDOs)];
- varsData = new TForteByte[CAdapter::genFBVarsDataSize(mPlugInterfaceSpec.m_nNumDIs, mPlugInterfaceSpec.m_nNumDOs, mPlugInterfaceSpec.m_nNumAdapters)];
- }else{
- connData = new TForteByte[CAdapter::genAdapterFBConnDataSize(mSocketInterfaceSpec.m_nNumEIs, mSocketInterfaceSpec.m_nNumEOs, mSocketInterfaceSpec.m_nNumDIs, mSocketInterfaceSpec.m_nNumDOs)];
- varsData = new TForteByte[CAdapter::genFBVarsDataSize(mSocketInterfaceSpec.m_nNumDIs, mSocketInterfaceSpec.m_nNumDOs, mSocketInterfaceSpec.m_nNumAdapters)];
- }
- return new CLuaAdapter(pa_nInstanceNameId, this, pa_bIsPlug, connData, varsData, pa_poSrcRes);
-}
-
-bool CLuaAdapterTypeEntry::initInterfaceSpec(SFBInterfaceSpec& interfaceSpec, CLuaEngine* luaEngine, int index) {
- //EI
- interfaceSpec.m_nNumEIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEIs");
- size_t numEIs = interfaceSpec.m_nNumEIs;
- interfaceSpec.m_aunEINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EINames", numEIs);
- size_t numEIWith = SIZE_MAX;
- interfaceSpec.m_anEIWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EIWith", numEIWith);
- interfaceSpec.m_anEIWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EIWithIndexes", numEIs);
- //EO
- interfaceSpec.m_nNumEOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEOs");
- size_t numEOs = interfaceSpec.m_nNumEOs;
- interfaceSpec.m_aunEONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EONames", numEOs);
- size_t numEOWith = SIZE_MAX;
- interfaceSpec.m_anEOWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EOWith", numEOWith);
- interfaceSpec.m_anEOWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EOWithIndexes", numEOs);
- //DI
- interfaceSpec.m_nNumDIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDIs");
- size_t numDIs = interfaceSpec.m_nNumDIs;
- interfaceSpec.m_aunDINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DINames", numDIs);
- size_t numDIDataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDIDataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DIDataTypeNames",
- numDIDataTypeNames);
- //DO
- interfaceSpec.m_nNumDOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDOs");
- size_t numDOs = interfaceSpec.m_nNumDOs;
- interfaceSpec.m_aunDONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DONames", numDOs);
- size_t numDODataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDODataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DODataTypeNames",
- numDODataTypeNames);
- interfaceSpec.m_nNumAdapters = 0;
- interfaceSpec.m_pstAdapterInstanceDefinition = 0;
- //checks
- if (interfaceSpec.m_aunEINames == NULL || interfaceSpec.m_anEIWith == NULL || interfaceSpec.m_anEIWithIndexes == NULL || interfaceSpec.m_aunEONames == NULL
- || interfaceSpec.m_anEOWith == NULL || interfaceSpec.m_anEOWithIndexes == NULL || interfaceSpec.m_aunDINames == NULL
- || interfaceSpec.m_aunDIDataTypeNames == NULL || interfaceSpec.m_aunDONames == NULL || interfaceSpec.m_aunDODataTypeNames == NULL) {
- return false;
- }
- for (size_t i = 0; i < numEIs; i++) {
- if (interfaceSpec.m_anEIWithIndexes[i] >= (TForteInt16) numEIWith) {
- return false;
- }
- }
- for (size_t i = 0; i < numEOs; i++) {
- if (interfaceSpec.m_anEOWithIndexes[i] >= (TForteInt16) numEOWith) {
- return false;
- }
- }
- return true;
-}
-
-bool CLuaAdapterTypeEntry::initPlugInterfaceSpec(SFBInterfaceSpec& interfaceSpec) {
- //EI
- mPlugInterfaceSpec.m_nNumEIs = interfaceSpec.m_nNumEOs;
- mPlugInterfaceSpec.m_aunEINames = interfaceSpec.m_aunEONames;
- mPlugInterfaceSpec.m_anEIWith = interfaceSpec.m_anEOWith;
- mPlugInterfaceSpec.m_anEIWithIndexes = interfaceSpec.m_anEOWithIndexes;
- //EO
- mPlugInterfaceSpec.m_nNumEOs = interfaceSpec.m_nNumEIs;
- mPlugInterfaceSpec.m_aunEONames = interfaceSpec.m_aunEINames;
- mPlugInterfaceSpec.m_anEOWith = interfaceSpec.m_anEIWith;
- mPlugInterfaceSpec.m_anEOWithIndexes = interfaceSpec.m_anEIWithIndexes;
- //DI
- mPlugInterfaceSpec.m_nNumDIs = interfaceSpec.m_nNumDOs;
- mPlugInterfaceSpec.m_aunDINames = interfaceSpec.m_aunDONames;
- mPlugInterfaceSpec.m_aunDIDataTypeNames = interfaceSpec.m_aunDODataTypeNames;
- //DO
- mPlugInterfaceSpec.m_nNumDOs = interfaceSpec.m_nNumDIs;
- mPlugInterfaceSpec.m_aunDONames = interfaceSpec.m_aunDINames;
- mPlugInterfaceSpec.m_aunDODataTypeNames = interfaceSpec.m_aunDIDataTypeNames;
- mPlugInterfaceSpec.m_nNumAdapters = 0;
- mPlugInterfaceSpec.m_pstAdapterInstanceDefinition = 0;
- return true;
-}
-
-void CLuaAdapterTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& interfaceSpec) {
- delete[] interfaceSpec.m_aunEINames;
- delete[] interfaceSpec.m_anEIWith;
- delete[] interfaceSpec.m_anEIWithIndexes;
- delete[] interfaceSpec.m_aunEONames;
- delete[] interfaceSpec.m_anEOWith;
- delete[] interfaceSpec.m_anEOWithIndexes;
- delete[] interfaceSpec.m_aunDINames;
- delete[] interfaceSpec.m_aunDIDataTypeNames;
- delete[] interfaceSpec.m_aunDONames;
- delete[] interfaceSpec.m_aunDODataTypeNames;
-}
+/*******************************************************************************
+ * Copyright (c) 2017 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "luaadaptertypeentry.h"
+#include "luaengine.h"
+#include "luatype.h"
+#include "luaadapter.h"
+#include "resource.h"
+#include "adapter.h"
+
+CLuaAdapterTypeEntry::CLuaAdapterTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& paInterfaceSpec) :
+ CTypeLib::CAdapterTypeEntry(paTypeNameId, 0, &mSocketInterfaceSpec), cm_sLuaScriptAsString(paLuaScriptAsString), mSocketInterfaceSpec(paInterfaceSpec) {
+ initPlugInterfaceSpec(mSocketInterfaceSpec);
+}
+
+CLuaAdapterTypeEntry::~CLuaAdapterTypeEntry() {
+ deleteInterfaceSpec(mSocketInterfaceSpec);
+}
+
+CLuaAdapterTypeEntry* CLuaAdapterTypeEntry::createLuaAdapterTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING& paLuaScriptAsString) {
+ CLuaEngine luaEngine;
+ if(!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
+ return NULL;
+ }
+ //interfaceSpec
+ SFBInterfaceSpec interfaceSpec = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ if(!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
+ return NULL;
+ }
+ if(!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
+ deleteInterfaceSpec(interfaceSpec);
+ return NULL;
+ }
+ luaEngine.pop(); //pop interfaceSpec
+ luaEngine.pop(); //pop loaded defs
+ return new CLuaAdapterTypeEntry(paTypeNameId, paLuaScriptAsString, interfaceSpec);
+}
+
+CAdapter* CLuaAdapterTypeEntry::createAdapterInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes, bool pa_bIsPlug) {
+ CLuaEngine* luaEngine = pa_poSrcRes->getLuaEngine();
+ if(!luaEngine->load(this) && (!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue())))) {
+ return NULL;
+ }
+ TForteByte* connData = 0;
+ TForteByte* varsData = 0;
+ if(pa_bIsPlug) {
+ connData = new TForteByte[CAdapter::genAdapterFBConnDataSize(mPlugInterfaceSpec.m_nNumEIs, mPlugInterfaceSpec.m_nNumEOs, mPlugInterfaceSpec.m_nNumDIs,
+ mPlugInterfaceSpec.m_nNumDOs)];
+ varsData = new TForteByte[CAdapter::genFBVarsDataSize(mPlugInterfaceSpec.m_nNumDIs, mPlugInterfaceSpec.m_nNumDOs, mPlugInterfaceSpec.m_nNumAdapters)];
+ } else {
+ connData = new TForteByte[CAdapter::genAdapterFBConnDataSize(mSocketInterfaceSpec.m_nNumEIs, mSocketInterfaceSpec.m_nNumEOs, mSocketInterfaceSpec.m_nNumDIs,
+ mSocketInterfaceSpec.m_nNumDOs)];
+ varsData = new TForteByte[CAdapter::genFBVarsDataSize(mSocketInterfaceSpec.m_nNumDIs, mSocketInterfaceSpec.m_nNumDOs, mSocketInterfaceSpec.m_nNumAdapters)];
+ }
+ return new CLuaAdapter(pa_nInstanceNameId, this, pa_bIsPlug, connData, varsData, pa_poSrcRes);
+}
+
+bool CLuaAdapterTypeEntry::initInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec, CLuaEngine* paLuaEngine, int paIndex) {
+ //EI
+ paInterfaceSpec.m_nNumEIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEIs");
+ size_t numEIs = paInterfaceSpec.m_nNumEIs;
+ paInterfaceSpec.m_aunEINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EINames", numEIs);
+ size_t numEIWith = SIZE_MAX;
+ paInterfaceSpec.m_anEIWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EIWith", numEIWith);
+ paInterfaceSpec.m_anEIWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EIWithIndexes", numEIs);
+ //EO
+ paInterfaceSpec.m_nNumEOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEOs");
+ size_t numEOs = paInterfaceSpec.m_nNumEOs;
+ paInterfaceSpec.m_aunEONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EONames", numEOs);
+ size_t numEOWith = SIZE_MAX;
+ paInterfaceSpec.m_anEOWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EOWith", numEOWith);
+ paInterfaceSpec.m_anEOWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EOWithIndexes", numEOs);
+ //DI
+ paInterfaceSpec.m_nNumDIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDIs");
+ size_t numDIs = paInterfaceSpec.m_nNumDIs;
+ paInterfaceSpec.m_aunDINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DINames", numDIs);
+ size_t numDIDataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDIDataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DIDataTypeNames",
+ numDIDataTypeNames);
+ //DO
+ paInterfaceSpec.m_nNumDOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDOs");
+ size_t numDOs = paInterfaceSpec.m_nNumDOs;
+ paInterfaceSpec.m_aunDONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DONames", numDOs);
+ size_t numDODataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDODataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DODataTypeNames",
+ numDODataTypeNames);
+ paInterfaceSpec.m_nNumAdapters = 0;
+ paInterfaceSpec.m_pstAdapterInstanceDefinition = 0;
+ //checks
+ if(paInterfaceSpec.m_aunEINames == NULL || paInterfaceSpec.m_anEIWith == NULL || paInterfaceSpec.m_anEIWithIndexes == NULL
+ || paInterfaceSpec.m_aunEONames == NULL || paInterfaceSpec.m_anEOWith == NULL || paInterfaceSpec.m_anEOWithIndexes == NULL
+ || paInterfaceSpec.m_aunDINames == NULL || paInterfaceSpec.m_aunDIDataTypeNames == NULL || paInterfaceSpec.m_aunDONames == NULL
+ || paInterfaceSpec.m_aunDODataTypeNames == NULL) {
+ return false;
+ }
+ for(size_t i = 0; i < numEIs; i++) {
+ if(paInterfaceSpec.m_anEIWithIndexes[i] >= (TForteInt16) numEIWith) {
+ return false;
+ }
+ }
+ for(size_t i = 0; i < numEOs; i++) {
+ if(paInterfaceSpec.m_anEOWithIndexes[i] >= (TForteInt16) numEOWith) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool CLuaAdapterTypeEntry::initPlugInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec) {
+ //EI
+ mPlugInterfaceSpec.m_nNumEIs = paInterfaceSpec.m_nNumEOs;
+ mPlugInterfaceSpec.m_aunEINames = paInterfaceSpec.m_aunEONames;
+ mPlugInterfaceSpec.m_anEIWith = paInterfaceSpec.m_anEOWith;
+ mPlugInterfaceSpec.m_anEIWithIndexes = paInterfaceSpec.m_anEOWithIndexes;
+ //EO
+ mPlugInterfaceSpec.m_nNumEOs = paInterfaceSpec.m_nNumEIs;
+ mPlugInterfaceSpec.m_aunEONames = paInterfaceSpec.m_aunEINames;
+ mPlugInterfaceSpec.m_anEOWith = paInterfaceSpec.m_anEIWith;
+ mPlugInterfaceSpec.m_anEOWithIndexes = paInterfaceSpec.m_anEIWithIndexes;
+ //DI
+ mPlugInterfaceSpec.m_nNumDIs = paInterfaceSpec.m_nNumDOs;
+ mPlugInterfaceSpec.m_aunDINames = paInterfaceSpec.m_aunDONames;
+ mPlugInterfaceSpec.m_aunDIDataTypeNames = paInterfaceSpec.m_aunDODataTypeNames;
+ //DO
+ mPlugInterfaceSpec.m_nNumDOs = paInterfaceSpec.m_nNumDIs;
+ mPlugInterfaceSpec.m_aunDONames = paInterfaceSpec.m_aunDINames;
+ mPlugInterfaceSpec.m_aunDODataTypeNames = paInterfaceSpec.m_aunDIDataTypeNames;
+ mPlugInterfaceSpec.m_nNumAdapters = 0;
+ mPlugInterfaceSpec.m_pstAdapterInstanceDefinition = 0;
+ return true;
+}
+
+void CLuaAdapterTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec) {
+ delete[] paInterfaceSpec.m_aunEINames;
+ delete[] paInterfaceSpec.m_anEIWith;
+ delete[] paInterfaceSpec.m_anEIWithIndexes;
+ delete[] paInterfaceSpec.m_aunEONames;
+ delete[] paInterfaceSpec.m_anEOWith;
+ delete[] paInterfaceSpec.m_anEOWithIndexes;
+ delete[] paInterfaceSpec.m_aunDINames;
+ delete[] paInterfaceSpec.m_aunDIDataTypeNames;
+ delete[] paInterfaceSpec.m_aunDONames;
+ delete[] paInterfaceSpec.m_aunDODataTypeNames;
+}
diff --git a/src/core/lua/luaadaptertypeentry.h b/src/core/lua/luaadaptertypeentry.h
index fcc4508..baff37d 100644
--- a/src/core/lua/luaadaptertypeentry.h
+++ b/src/core/lua/luaadaptertypeentry.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/core/lua/luabfb.cpp b/src/core/lua/luabfb.cpp
index 9b5110c..29c589d 100644
--- a/src/core/lua/luabfb.cpp
+++ b/src/core/lua/luabfb.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst
@@ -15,35 +16,34 @@
#include "luaengine.h"
#include "../adapter.h"
-
extern "C" {
#include <lualib.h>
}
// write variable to lua engine
-int CLuaFB_index(lua_State *luaState) {
- CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(luaState, 1);
- TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(luaState, 2));
+int CLuaFB_index(lua_State *paLuaState) {
+ CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);
+ TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));
CIEC_ANY* var = luaFB->getVariable(id);
- CLuaEngine::luaPushAny(luaState, var);
+ CLuaEngine::luaPushAny(paLuaState, var);
return 1;
}
// get variables from lua engine
-int CLuaFB_newindex(lua_State *luaState) {
- CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(luaState, 1);
- TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(luaState, 2));
+int CLuaFB_newindex(lua_State *paLuaState) {
+ CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);
+ TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));
CIEC_ANY* var = luaFB->getVariable(id);
- CLuaEngine::luaGetAny(luaState, var, 3);
+ CLuaEngine::luaGetAny(paLuaState, var, 3);
return 0;
}
-int CLuaFB_call(lua_State *luaState) {
- CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(luaState, 1);
- TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(luaState, 2));
- if((id & CLuaBFB::LUA_FB_AD_FLAG) != 0){
+int CLuaFB_call(lua_State *paLuaState) {
+ CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);
+ TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));
+ if((id & CLuaBFB::LUA_FB_AD_FLAG) != 0) {
luaFB->sendAdapterEvent((id >> 16) & CLuaBFB::LUA_AD_VAR_MAX, id & CLuaBFB::LUA_FB_VAR_MAX);
- }else{
+ } else {
luaFB->sendOutputEvent(id);
}
return 0;
@@ -52,8 +52,10 @@
const char CLuaBFB::LUA_NAME[] = "FORTE_CLuaFB";
const luaL_Reg CLuaBFB::LUA_FUNCS[] = { { "__index", CLuaFB_index }, { "__newindex", CLuaFB_newindex }, { "__call", CLuaFB_call }, { NULL, NULL } };
-CLuaBFB::CLuaBFB(CStringDictionary::TStringId instanceNameId, const CLuaBFBTypeEntry* typeEntry, TForteByte *connData, TForteByte *varsData, CResource *resource)
- : CBasicFB(resource, typeEntry->getInterfaceSpec(), instanceNameId, typeEntry->getInternalVarsInformation(), connData, varsData), typeEntry(typeEntry) {
+CLuaBFB::CLuaBFB(CStringDictionary::TStringId paInstanceNameId, const CLuaBFBTypeEntry* paTypeEntry, TForteByte *paConnData, TForteByte *paVarsData,
+ CResource *paResource) :
+ CBasicFB(paResource, paTypeEntry->getInterfaceSpec(), paInstanceNameId, paTypeEntry->getInternalVarsInformation(), paConnData, paVarsData),
+ mTypeEntry(paTypeEntry) {
CLuaEngine *luaEngine = getResource().getLuaEngine();
luaEngine->registerType<CLuaBFB>();
luaEngine->pushObject<CLuaBFB>(this);
@@ -63,38 +65,37 @@
CLuaBFB::~CLuaBFB() {
}
-void CLuaBFB::executeEvent(int pa_nEIID) {
+void CLuaBFB::executeEvent(int paEIID) {
CLuaEngine *luaEngine = getResource().getLuaEngine();
- luaEngine->load(typeEntry);
+ luaEngine->load(mTypeEntry);
luaEngine->load(this);
- luaEngine->pushInteger(pa_nEIID > 255 ? recalculateID(pa_nEIID) : pa_nEIID);
- if (!luaEngine->call(2, 0)) {
+ luaEngine->pushInteger(paEIID > 255 ? recalculateID(paEIID) : paEIID);
+ if(!luaEngine->call(2, 0)) {
DEVLOG_ERROR("Error calling function executeEvent for instance %s\n", getInstanceName());
- return;
}
}
-CIEC_ANY* CLuaBFB::getVariable(TForteUInt32 id) {
- if (CLuaBFB::LUA_FB_STATE == id) {
+CIEC_ANY* CLuaBFB::getVariable(TForteUInt32 paId) {
+ if(CLuaBFB::LUA_FB_STATE == paId) {
return &m_nECCState;
}
- if((id & CLuaBFB::LUA_FB_IN_FLAG) != 0) {
- return getVarInternal(id & CLuaBFB::LUA_FB_VAR_MAX);
+ if((paId & CLuaBFB::LUA_FB_IN_FLAG) != 0) {
+ return getVarInternal(paId & CLuaBFB::LUA_FB_VAR_MAX);
}
- if ((id & CLuaBFB::LUA_FB_AD_FLAG) != 0) {
- if ((id & CLuaBFB::LUA_FB_DI_FLAG) != 0) {
- return m_apoAdapters[(id >> 16) & CLuaBFB::LUA_AD_VAR_MAX]->getDO(id & CLuaBFB::LUA_FB_VAR_MAX);
+ if((paId & CLuaBFB::LUA_FB_AD_FLAG) != 0) {
+ if((paId & CLuaBFB::LUA_FB_DO_FLAG) != 0) {
+ return m_apoAdapters[(paId >> 16) & CLuaBFB::LUA_AD_VAR_MAX]->getDO(paId & CLuaBFB::LUA_FB_VAR_MAX);
}
- if ((id & CLuaBFB::LUA_FB_DO_FLAG) != 0) {
- return m_apoAdapters[(id >> 16) & CLuaBFB::LUA_AD_VAR_MAX]->getDI(id & CLuaBFB::LUA_FB_VAR_MAX);
+ if((paId & CLuaBFB::LUA_FB_DI_FLAG) != 0) {
+ return m_apoAdapters[(paId >> 16) & CLuaBFB::LUA_AD_VAR_MAX]->getDI(paId & CLuaBFB::LUA_FB_VAR_MAX);
}
return 0;
}
- if ((id & CLuaBFB::LUA_FB_DI_FLAG) != 0) {
- return getDI(id & CLuaBFB::LUA_FB_VAR_MAX);
+ if((paId & CLuaBFB::LUA_FB_DI_FLAG) != 0) {
+ return getDI(paId & CLuaBFB::LUA_FB_VAR_MAX);
}
- if ((id & CLuaBFB::LUA_FB_DO_FLAG) != 0) {
- return getDO(id & CLuaBFB::LUA_FB_VAR_MAX);
+ if((paId & CLuaBFB::LUA_FB_DO_FLAG) != 0) {
+ return getDO(paId & CLuaBFB::LUA_FB_VAR_MAX);
}
return 0;
}
diff --git a/src/core/lua/luabfb.h b/src/core/lua/luabfb.h
index fbdd612..828f7aa 100644
--- a/src/core/lua/luabfb.h
+++ b/src/core/lua/luabfb.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst
@@ -27,41 +28,42 @@
int CLuaFB_call(lua_State *luaState);
}
-class CLuaBFB: public CBasicFB {
-private:
- static const TForteUInt32 LUA_FB_VAR_MAX = 65535;
- static const TForteUInt32 LUA_AD_VAR_MAX = 255;
+class CLuaBFB : public CBasicFB {
+ private:
+ static const TForteUInt32 LUA_FB_VAR_MAX = 65535;
+ static const TForteUInt32 LUA_AD_VAR_MAX = 255;
- static const TForteUInt32 LUA_FB_STATE = 0;
- static const TForteUInt32 LUA_FB_DI_FLAG = 1 << 25;
- static const TForteUInt32 LUA_FB_DO_FLAG = 1 << 26;
- static const TForteUInt32 LUA_FB_AD_FLAG = 1 << 27;
- static const TForteUInt32 LUA_FB_IN_FLAG = 1 << 28;
+ static const TForteUInt32 LUA_FB_STATE = 0;
+ static const TForteUInt32 LUA_FB_DI_FLAG = 1 << 25;
+ static const TForteUInt32 LUA_FB_DO_FLAG = 1 << 26;
+ static const TForteUInt32 LUA_FB_AD_FLAG = 1 << 27;
+ static const TForteUInt32 LUA_FB_IN_FLAG = 1 << 28;
- const CLuaBFBTypeEntry* typeEntry;
+ const CLuaBFBTypeEntry* mTypeEntry;
- CIEC_ANY* getVariable(TForteUInt32 id);
+ CIEC_ANY* getVariable(TForteUInt32 paId);
- int recalculateID(int pa_nEIID) {
- return CLuaBFB::LUA_FB_AD_FLAG | ((pa_nEIID >> 8) - 1) | (pa_nEIID & 0x00ff);
- }
+ int recalculateID(int pa_nEIID) {
+ return CLuaBFB::LUA_FB_AD_FLAG | ((((pa_nEIID >> 8) - 1) << 16) & 0xFF00) | (pa_nEIID & 0x00FF);
+ }
-public:
- static const char LUA_NAME[];
- static const luaL_Reg LUA_FUNCS[];
+ public:
+ static const char LUA_NAME[];
+ static const luaL_Reg LUA_FUNCS[];
- CLuaBFB(CStringDictionary::TStringId instanceNameId, const CLuaBFBTypeEntry* typeEntry, TForteByte *connData, TForteByte *varsData, CResource *resource);
- virtual ~CLuaBFB();
+ CLuaBFB(CStringDictionary::TStringId paInstanceNameId, const CLuaBFBTypeEntry* paTypeEntry, TForteByte *paConnData, TForteByte *paVarsData,
+ CResource *paResource);
+ virtual ~CLuaBFB();
- virtual void executeEvent(int pa_nEIID);
+ virtual void executeEvent(int paEIID);
- virtual CStringDictionary::TStringId getFBTypeId(void) const {
- return typeEntry->getTypeNameId();
- }
+ virtual CStringDictionary::TStringId getFBTypeId(void) const {
+ return mTypeEntry->getTypeNameId();
+ }
- friend int CLuaFB_index(lua_State *luaState);
- friend int CLuaFB_newindex(lua_State *luaState);
- friend int CLuaFB_call(lua_State *luaState);
+ friend int CLuaFB_index(lua_State *paLuaState);
+ friend int CLuaFB_newindex(lua_State *paLuaState);
+ friend int CLuaFB_call(lua_State *paLuaState);
};
#endif /* SRC_CORE_LUABFB_H_ */
diff --git a/src/core/lua/luabfbtypeentry.cpp b/src/core/lua/luabfbtypeentry.cpp
index ae1ac3b..9c090e6 100644
--- a/src/core/lua/luabfbtypeentry.cpp
+++ b/src/core/lua/luabfbtypeentry.cpp
@@ -1,162 +1,154 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#include "luabfbtypeentry.h"
-
-#include "luaengine.h"
-#include "luabfb.h"
-#include "luatype.h"
-#include "resource.h"
-
-CLuaBFBTypeEntry::CLuaBFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& interfaceSpec,
- SInternalVarsInformation& internalVarsInformation)
- : CTypeLib::CFBTypeEntry(typeNameId, 0), cm_sLuaScriptAsString(paLuaScriptAsString), m_interfaceSpec(interfaceSpec), m_internalVarsInformation(internalVarsInformation) {
-}
-
-CLuaBFBTypeEntry::~CLuaBFBTypeEntry() {
- deleteInterfaceSpec(m_interfaceSpec);
- deleteInternalVarsInformation(m_internalVarsInformation);
-}
-
-CLuaBFBTypeEntry* CLuaBFBTypeEntry::createLuaFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING& paLuaScriptAsString) {
- CLuaEngine luaEngine;
- if (!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
- return NULL;
- }
- //interfaceSpec
- SFBInterfaceSpec interfaceSpec = { };
- if (!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
- return NULL;
- }
- if (!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
- deleteInterfaceSpec(interfaceSpec);
- return NULL;
- }
- luaEngine.pop(); //pop interfaceSpec
- //internalVarsInformation
- SInternalVarsInformation internalVarsInformation = { };
- if (!luaEngine.pushField(-1, "internalVarsInformation", LUA_TTABLE)) {
- deleteInterfaceSpec(interfaceSpec);
- return NULL;
- }
- if (!initInternalVarsInformation(internalVarsInformation, &luaEngine, -1)) {
- deleteInterfaceSpec(interfaceSpec);
- deleteInternalVarsInformation(internalVarsInformation);
- return NULL;
- }
- luaEngine.pop(); //pop internalVarsInformation
- luaEngine.pop(); //pop loaded defs
- return new CLuaBFBTypeEntry(typeNameId, paLuaScriptAsString, interfaceSpec, internalVarsInformation);
-}
-
-CFunctionBlock* CLuaBFBTypeEntry::createFBInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) {
- CLuaEngine* luaEngine = pa_poSrcRes->getLuaEngine();
- if (!luaEngine->load(this)) {
- if (!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue()))) {
- return NULL;
- }
- luaEngine->pushField(-1, "ECC", LUA_TFUNCTION);
- luaEngine->store(this); //store ECC
- }
- luaEngine->pop(); //pop ECC / loaded defs
- TForteByte* connData = new TForteByte[CFunctionBlock::genFBConnDataSize(m_interfaceSpec.m_nNumEOs, m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs)];
- TForteByte* varsData = new TForteByte[CBasicFB::genBasicFBVarsDataSize(m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs,
- m_internalVarsInformation.m_nNumIntVars, m_interfaceSpec.m_nNumAdapters)];
- return new CLuaBFB(pa_nInstanceNameId, this, connData, varsData, pa_poSrcRes);
-}
-
-bool CLuaBFBTypeEntry::initInterfaceSpec(SFBInterfaceSpec& interfaceSpec, CLuaEngine* luaEngine, int index) {
- //EI
- interfaceSpec.m_nNumEIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEIs");
- size_t numEIs = interfaceSpec.m_nNumEIs;
- interfaceSpec.m_aunEINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EINames", numEIs);
- size_t numEIWith = SIZE_MAX;
- interfaceSpec.m_anEIWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EIWith", numEIWith);
- interfaceSpec.m_anEIWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EIWithIndexes", numEIs);
- //EO
- interfaceSpec.m_nNumEOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEOs");
- size_t numEOs = interfaceSpec.m_nNumEOs;
- interfaceSpec.m_aunEONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EONames", numEOs);
- size_t numEOWith = SIZE_MAX;
- interfaceSpec.m_anEOWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EOWith", numEOWith);
- interfaceSpec.m_anEOWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EOWithIndexes", numEOs);
- //DI
- interfaceSpec.m_nNumDIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDIs");
- size_t numDIs = interfaceSpec.m_nNumDIs;
- interfaceSpec.m_aunDINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DINames", numDIs);
- size_t numDIDataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDIDataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DIDataTypeNames",
- numDIDataTypeNames);
- //DO
- interfaceSpec.m_nNumDOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDOs");
- size_t numDOs = interfaceSpec.m_nNumDOs;
- interfaceSpec.m_aunDONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DONames", numDOs);
- size_t numDODataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDODataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DODataTypeNames",
- numDODataTypeNames);
- //Adapters
- interfaceSpec.m_nNumAdapters = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numAdapters");
- size_t numAdapters = interfaceSpec.m_nNumAdapters;
- interfaceSpec.m_pstAdapterInstanceDefinition = luaEngine->getCustomArrayField<SAdapterInstanceDef, luatype::getAdapterInstanceDefinition>(index,
- "adapterInstanceDefinition", numAdapters);
- //checks
- if (interfaceSpec.m_aunEINames == NULL || interfaceSpec.m_anEIWith == NULL || interfaceSpec.m_anEIWithIndexes == NULL || interfaceSpec.m_aunEONames == NULL
- || interfaceSpec.m_anEOWith == NULL || interfaceSpec.m_anEOWithIndexes == NULL || interfaceSpec.m_aunDINames == NULL
- || interfaceSpec.m_aunDIDataTypeNames == NULL || interfaceSpec.m_aunDONames == NULL || interfaceSpec.m_aunDODataTypeNames == NULL
- || interfaceSpec.m_pstAdapterInstanceDefinition == NULL) {
- return false;
- }
- for (size_t i = 0; i < numEIs; i++) {
- if (interfaceSpec.m_anEIWithIndexes[i] >= (TForteInt16) numEIWith) {
- return false;
- }
- }
- for (size_t i = 0; i < numEOs; i++) {
- if (interfaceSpec.m_anEOWithIndexes[i] >= (TForteInt16) numEOWith) {
- return false;
- }
- }
- return true;
-}
-
-void CLuaBFBTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& interfaceSpec) {
- delete[] interfaceSpec.m_aunEINames;
- delete[] interfaceSpec.m_anEIWith;
- delete[] interfaceSpec.m_anEIWithIndexes;
- delete[] interfaceSpec.m_aunEONames;
- delete[] interfaceSpec.m_anEOWith;
- delete[] interfaceSpec.m_anEOWithIndexes;
- delete[] interfaceSpec.m_aunDINames;
- delete[] interfaceSpec.m_aunDIDataTypeNames;
- delete[] interfaceSpec.m_aunDONames;
- delete[] interfaceSpec.m_aunDODataTypeNames;
- delete[] interfaceSpec.m_pstAdapterInstanceDefinition;
-}
-
-bool CLuaBFBTypeEntry::initInternalVarsInformation(SInternalVarsInformation& internalVarsInformation, CLuaEngine* luaEngine, int index) {
- internalVarsInformation.m_nNumIntVars = luaEngine->getField<TPortId, &CLuaEngine::getInteger<TPortId> >(index, "numIntVars");
- size_t numIntVars = internalVarsInformation.m_nNumIntVars;
- internalVarsInformation.m_aunIntVarsNames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "intVarsNames",
- numIntVars);
- size_t numIntVarTypes = SIZE_MAX;
- internalVarsInformation.m_aunIntVarsDataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index,
- "intVarsDataTypeNames", numIntVarTypes);
- if (internalVarsInformation.m_aunIntVarsNames == NULL || internalVarsInformation.m_aunIntVarsDataTypeNames == NULL) {
- return false;
- }
- return true;
-}
-
-void CLuaBFBTypeEntry::deleteInternalVarsInformation(SInternalVarsInformation& internalVarsInformation) {
- delete[] internalVarsInformation.m_aunIntVarsNames;
- delete[] internalVarsInformation.m_aunIntVarsDataTypeNames;
-}
+/*******************************************************************************
+ * Copyright (c) 2017 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "luabfbtypeentry.h"
+
+#include "luaengine.h"
+#include "luabfb.h"
+#include "luatype.h"
+#include "resource.h"
+
+CLuaBFBTypeEntry::CLuaBFBTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& paInterfaceSpec,
+ SInternalVarsInformation& paInternalVarsInformation) :
+ CFBTypeEntry(paTypeNameId, 0, &m_interfaceSpec), cm_sLuaScriptAsString(paLuaScriptAsString), m_interfaceSpec(paInterfaceSpec),
+ m_internalVarsInformation(paInternalVarsInformation) {
+}
+
+CLuaBFBTypeEntry::~CLuaBFBTypeEntry() {
+ deleteInterfaceSpec(m_interfaceSpec);
+ deleteInternalVarsInformation(m_internalVarsInformation);
+}
+
+CLuaBFBTypeEntry* CLuaBFBTypeEntry::createLuaFBTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING& paLuaScriptAsString) {
+ CLuaEngine luaEngine;
+ if(!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
+ return NULL;
+ }
+ //interfaceSpec
+ SFBInterfaceSpec interfaceSpec = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ if(!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
+ return NULL;
+ }
+ if(!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
+ deleteInterfaceSpec(interfaceSpec);
+ return NULL;
+ }
+ luaEngine.pop(); //pop interfaceSpec
+ //internalVarsInformation
+ SInternalVarsInformation internalVarsInformation = { 0, 0, 0 };
+ if(!luaEngine.pushField(-1, "internalVarsInformation", LUA_TTABLE)) {
+ deleteInterfaceSpec(interfaceSpec);
+ return NULL;
+ }
+ if(!initInternalVarsInformation(internalVarsInformation, &luaEngine, -1)) {
+ deleteInterfaceSpec(interfaceSpec);
+ deleteInternalVarsInformation(internalVarsInformation);
+ return NULL;
+ }
+ luaEngine.pop(); //pop internalVarsInformation
+ luaEngine.pop(); //pop loaded defs
+ return new CLuaBFBTypeEntry(paTypeNameId, paLuaScriptAsString, interfaceSpec, internalVarsInformation);
+}
+
+CFunctionBlock* CLuaBFBTypeEntry::createFBInstance(CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) {
+ CLuaEngine* luaEngine = paSrcRes->getLuaEngine();
+ if(!luaEngine->load(this)) {
+ if(!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue()))) {
+ return NULL;
+ }
+ luaEngine->pushField(-1, "ECC", LUA_TFUNCTION);
+ luaEngine->store(this); //store ECC
+ }
+ luaEngine->pop(); //pop ECC / loaded defs
+ TForteByte* connData = new TForteByte[CFunctionBlock::genFBConnDataSize(m_interfaceSpec.m_nNumEOs, m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs)];
+ TForteByte* varsData = new TForteByte[CBasicFB::genBasicFBVarsDataSize(m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs,
+ m_internalVarsInformation.m_nNumIntVars, m_interfaceSpec.m_nNumAdapters)];
+ return new CLuaBFB(paInstanceNameId, this, connData, varsData, paSrcRes);
+}
+
+bool CLuaBFBTypeEntry::initInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec, CLuaEngine* paLuaEngine, int paIndex) {
+ //EI
+ paInterfaceSpec.m_nNumEIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEIs");
+ size_t numEIs = paInterfaceSpec.m_nNumEIs;
+ paInterfaceSpec.m_aunEINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EINames", numEIs);
+ size_t numEIWith = SIZE_MAX;
+ paInterfaceSpec.m_anEIWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EIWith", numEIWith);
+ paInterfaceSpec.m_anEIWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EIWithIndexes", numEIs);
+ //EO
+ paInterfaceSpec.m_nNumEOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEOs");
+ size_t numEOs = paInterfaceSpec.m_nNumEOs;
+ paInterfaceSpec.m_aunEONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EONames", numEOs);
+ size_t numEOWith = SIZE_MAX;
+ paInterfaceSpec.m_anEOWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EOWith", numEOWith);
+ paInterfaceSpec.m_anEOWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EOWithIndexes", numEOs);
+ //DI
+ paInterfaceSpec.m_nNumDIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDIs");
+ size_t numDIs = paInterfaceSpec.m_nNumDIs;
+ paInterfaceSpec.m_aunDINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DINames", numDIs);
+ size_t numDIDataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDIDataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DIDataTypeNames",
+ numDIDataTypeNames);
+ //DO
+ paInterfaceSpec.m_nNumDOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDOs");
+ size_t numDOs = paInterfaceSpec.m_nNumDOs;
+ paInterfaceSpec.m_aunDONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DONames", numDOs);
+ size_t numDODataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDODataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DODataTypeNames",
+ numDODataTypeNames);
+ //Adapters
+ paInterfaceSpec.m_nNumAdapters = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numAdapters");
+ size_t numAdapters = paInterfaceSpec.m_nNumAdapters;
+ paInterfaceSpec.m_pstAdapterInstanceDefinition = paLuaEngine->getCustomArrayField<SAdapterInstanceDef, luatype::getAdapterInstanceDefinition>(paIndex,
+ "adapterInstanceDefinition", numAdapters);
+ //checks
+ if(paInterfaceSpec.m_aunEINames == NULL || paInterfaceSpec.m_anEIWith == NULL || paInterfaceSpec.m_anEIWithIndexes == NULL
+ || paInterfaceSpec.m_aunEONames == NULL || paInterfaceSpec.m_anEOWith == NULL || paInterfaceSpec.m_anEOWithIndexes == NULL
+ || paInterfaceSpec.m_aunDINames == NULL || paInterfaceSpec.m_aunDIDataTypeNames == NULL || paInterfaceSpec.m_aunDONames == NULL
+ || paInterfaceSpec.m_aunDODataTypeNames == NULL || paInterfaceSpec.m_pstAdapterInstanceDefinition == NULL) {
+ return false;
+ }
+ return true;
+}
+
+void CLuaBFBTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec) {
+ delete[] paInterfaceSpec.m_aunEINames;
+ delete[] paInterfaceSpec.m_anEIWith;
+ delete[] paInterfaceSpec.m_anEIWithIndexes;
+ delete[] paInterfaceSpec.m_aunEONames;
+ delete[] paInterfaceSpec.m_anEOWith;
+ delete[] paInterfaceSpec.m_anEOWithIndexes;
+ delete[] paInterfaceSpec.m_aunDINames;
+ delete[] paInterfaceSpec.m_aunDIDataTypeNames;
+ delete[] paInterfaceSpec.m_aunDONames;
+ delete[] paInterfaceSpec.m_aunDODataTypeNames;
+ delete[] paInterfaceSpec.m_pstAdapterInstanceDefinition;
+}
+
+bool CLuaBFBTypeEntry::initInternalVarsInformation(SInternalVarsInformation& paInternalVarsInformation, CLuaEngine* paLuaEngine, int paIndex) {
+ paInternalVarsInformation.m_nNumIntVars = paLuaEngine->getField<TPortId, &CLuaEngine::getInteger<TPortId> >(paIndex, "numIntVars");
+ size_t numIntVars = paInternalVarsInformation.m_nNumIntVars;
+ paInternalVarsInformation.m_aunIntVarsNames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "intVarsNames",
+ numIntVars);
+ size_t numIntVarTypes = SIZE_MAX;
+ paInternalVarsInformation.m_aunIntVarsDataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex,
+ "intVarsDataTypeNames", numIntVarTypes);
+ if(paInternalVarsInformation.m_aunIntVarsNames == NULL || paInternalVarsInformation.m_aunIntVarsDataTypeNames == NULL) {
+ return false;
+ }
+ return true;
+}
+
+void CLuaBFBTypeEntry::deleteInternalVarsInformation(SInternalVarsInformation& paInternalVarsInformation) {
+ delete[] paInternalVarsInformation.m_aunIntVarsNames;
+ delete[] paInternalVarsInformation.m_aunIntVarsDataTypeNames;
+}
diff --git a/src/core/lua/luabfbtypeentry.h b/src/core/lua/luabfbtypeentry.h
index b85208d..028b412 100644
--- a/src/core/lua/luabfbtypeentry.h
+++ b/src/core/lua/luabfbtypeentry.h
@@ -1,50 +1,52 @@
-/*******************************************************************************
- * Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Jobst
- * - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#ifndef SRC_CORE_LUAFBTYPEENTRY_H_
-#define SRC_CORE_LUAFBTYPEENTRY_H_
-
-#include "typelib.h"
-#include "basicfb.h"
-
-class CLuaEngine;
-
-class CLuaBFBTypeEntry: public CTypeLib::CFBTypeEntry {
-private:
-
- const CIEC_STRING cm_sLuaScriptAsString;
- SFBInterfaceSpec m_interfaceSpec;
- SInternalVarsInformation m_internalVarsInformation;
-
- CLuaBFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& interfaceSpec,
- SInternalVarsInformation& internalVarsInformation);
-
- virtual ~CLuaBFBTypeEntry();
-
- static bool initInterfaceSpec(SFBInterfaceSpec& interfaceSpec, CLuaEngine* luaEngine, int index);
- static void deleteInterfaceSpec(SFBInterfaceSpec& interfaceSpec);
- static bool initInternalVarsInformation(SInternalVarsInformation& internalVarsInformation, CLuaEngine* luaEngine, int index);
- static void deleteInternalVarsInformation(SInternalVarsInformation& internalVarsInformation);
-public:
- static CLuaBFBTypeEntry* createLuaFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING& paLuaScriptAsString);
-
- virtual CFunctionBlock* createFBInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes);
-
- const SFBInterfaceSpec* getInterfaceSpec() const {
- return &m_interfaceSpec;
- }
- const SInternalVarsInformation* getInternalVarsInformation() const {
- return &m_internalVarsInformation;
- }
-};
-
-#endif /* SRC_CORE_LUABFBTYPEENTRY_H_ */
+/*******************************************************************************
+ * Copyright (c) 2015 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Jobst
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef SRC_CORE_LUAFBTYPEENTRY_H_
+#define SRC_CORE_LUAFBTYPEENTRY_H_
+
+#include "typelib.h"
+#include "basicfb.h"
+
+class CLuaEngine;
+
+class CLuaBFBTypeEntry: public CTypeLib::CFBTypeEntry {
+private:
+
+ const CIEC_STRING cm_sLuaScriptAsString;
+ SFBInterfaceSpec m_interfaceSpec;
+ SInternalVarsInformation m_internalVarsInformation;
+
+ CLuaBFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& interfaceSpec,
+ SInternalVarsInformation& internalVarsInformation);
+
+ virtual ~CLuaBFBTypeEntry();
+
+ static bool initInterfaceSpec(SFBInterfaceSpec& interfaceSpec, CLuaEngine* luaEngine, int index);
+ static void deleteInterfaceSpec(SFBInterfaceSpec& interfaceSpec);
+ static bool initInternalVarsInformation(SInternalVarsInformation& internalVarsInformation, CLuaEngine* luaEngine, int index);
+ static void deleteInternalVarsInformation(SInternalVarsInformation& internalVarsInformation);
+public:
+ static CLuaBFBTypeEntry* createLuaFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING& paLuaScriptAsString);
+
+ virtual CFunctionBlock* createFBInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes);
+
+ const SFBInterfaceSpec* getInterfaceSpec() const {
+ return &m_interfaceSpec;
+ }
+
+ const SInternalVarsInformation* getInternalVarsInformation() const {
+ return &m_internalVarsInformation;
+ }
+};
+
+#endif /* SRC_CORE_LUABFBTYPEENTRY_H_ */
diff --git a/src/core/lua/luacfb.cpp b/src/core/lua/luacfb.cpp
index b81e324..7280787 100644
--- a/src/core/lua/luacfb.cpp
+++ b/src/core/lua/luacfb.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -13,8 +14,9 @@
#include "luacfb.h"
#include "resource.h"
-CLuaCFB::CLuaCFB(CStringDictionary::TStringId instanceNameId, const CLuaCFBTypeEntry* typeEntry, SCFB_FBNData *fbnData, TForteByte *connData, TForteByte *varsData, CResource *resource)
- : CCompositeFB(resource, typeEntry->getInterfaceSpec(), instanceNameId, fbnData, connData, varsData), typeEntry(typeEntry) {
+CLuaCFB::CLuaCFB(CStringDictionary::TStringId paInstanceNameId, const CLuaCFBTypeEntry* paTypeEntry, SCFB_FBNData *paFbnData, TForteByte *paConnData,
+ TForteByte *paVarsData, CResource *paResource) :
+ CCompositeFB(paResource, paTypeEntry->getInterfaceSpec(), paInstanceNameId, paFbnData, paConnData, paVarsData), mTypeEntry(paTypeEntry) {
}
CLuaCFB::~CLuaCFB() {
diff --git a/src/core/lua/luacfb.h b/src/core/lua/luacfb.h
index a1e87a9..6c3ecfc 100644
--- a/src/core/lua/luacfb.h
+++ b/src/core/lua/luacfb.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -16,17 +17,18 @@
#include "cfb.h"
#include "luacfbtypeentry.h"
-class CLuaCFB: public CCompositeFB {
-private:
- const CLuaCFBTypeEntry* typeEntry;
+class CLuaCFB : public CCompositeFB {
+ private:
+ const CLuaCFBTypeEntry* mTypeEntry;
-public:
- CLuaCFB(CStringDictionary::TStringId instanceNameId, const CLuaCFBTypeEntry* typeEntry, SCFB_FBNData *fbnData, TForteByte *connData, TForteByte *varsData, CResource *resource);
- virtual ~CLuaCFB();
+ public:
+ CLuaCFB(CStringDictionary::TStringId paInstanceNameId, const CLuaCFBTypeEntry* paTypeEntry, SCFB_FBNData *paFbnData, TForteByte *paConnData,
+ TForteByte *paVarsData, CResource *paResource);
+ virtual ~CLuaCFB();
- virtual CStringDictionary::TStringId getFBTypeId(void) const {
- return typeEntry->getTypeNameId();
- }
+ virtual CStringDictionary::TStringId getFBTypeId(void) const {
+ return mTypeEntry->getTypeNameId();
+ }
};
#endif /* SRC_CORE_LUACFB_H_ */
diff --git a/src/core/lua/luacfbtypeentry.cpp b/src/core/lua/luacfbtypeentry.cpp
index 7d2b374..66be122 100644
--- a/src/core/lua/luacfbtypeentry.cpp
+++ b/src/core/lua/luacfbtypeentry.cpp
@@ -1,221 +1,224 @@
-/*******************************************************************************
- * Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Monika Wenger
- * - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-#include "luacfbtypeentry.h"
-
-#include "resource.h"
-#include "luaengine.h"
-#include "luacfb.h"
-#include "luatype.h"
-
-namespace luatype {
- bool getFBInstanceData(SCFB_FBInstanceData& def, CLuaEngine* luaEngine, int index) {
- def.m_nFBInstanceNameId = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "fbNameID");
- def.m_nFBTypeNameId = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "fbTypeID");
- if (def.m_nFBInstanceNameId == CStringDictionary::scm_nInvalidStringId || def.m_nFBTypeNameId == CStringDictionary::scm_nInvalidStringId) {
- return false;
- }
- return true;
- }
-
- bool getFBConnectionData(SCFB_FBConnectionData& def, CLuaEngine* luaEngine, int index) {
- def.m_nDstFBNum = luaEngine->getField<int, &CLuaEngine::getInteger<int> >(index, "dstFBNum");
- def.m_nDstId = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "dstID");
- def.m_nSrcFBNum = luaEngine->getField<int, &CLuaEngine::getInteger<int> >(index, "srcFBNum");
- def.m_nSrcId = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "srcID");
- if (def.m_nDstId == CStringDictionary::scm_nInvalidStringId || def.m_nSrcId == CStringDictionary::scm_nInvalidStringId) {
- return false;
- }
- return true;
- }
-
- bool getFBFannedOutConnectionData(SCFB_FBFannedOutConnectionData& def, CLuaEngine* luaEngine, int index) {
- def.m_nConnectionNum = luaEngine->getField<int, &CLuaEngine::getInteger<int> >(index, "connectionNum");
- def.m_nDstFBNum = luaEngine->getField<int, &CLuaEngine::getInteger<int> >(index, "dstFBNum");
- def.m_nDstId = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "dstID");
- if (def.m_nDstId == CStringDictionary::scm_nInvalidStringId) {
- return false;
- }
- return true;
- }
-
- bool getFBParameter(SCFB_FBParameter& def, CLuaEngine* luaEngine, int index) {
- def.m_acParamValue = luaEngine->getField<char *, &CLuaEngine::getString>(index, "paramValue");
- def.m_nDINameID = luaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "diNameID");
- def.m_nFBNum = luaEngine->getField<int, &CLuaEngine::getInteger<int> >(index, "fbNum");
- if (def.m_nDINameID == CStringDictionary::scm_nInvalidStringId) {
- return false;
- }
- return true;
- }
-}
-
-CLuaCFBTypeEntry::CLuaCFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& interfaceSpec, SCFB_FBNData& fbnSpec)
- : CTypeLib::CFBTypeEntry(typeNameId, 0), cm_sLuaScriptAsString(paLuaScriptAsString), m_interfaceSpec(interfaceSpec), m_fbnSpec(fbnSpec) {
-}
-
-CLuaCFBTypeEntry::~CLuaCFBTypeEntry() {
- deleteInterfaceSpec(m_interfaceSpec);
- deleteFbnSpec(m_fbnSpec);
-}
-
-CLuaCFBTypeEntry* CLuaCFBTypeEntry::createLuaFBTypeEntry(CStringDictionary::TStringId typeNameId, CIEC_STRING& paLuaScriptAsString) {
- CLuaEngine luaEngine;
- if (!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
- return NULL;
- }
- //interfaceSpec
- SFBInterfaceSpec interfaceSpec = { };
- if (!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
- return NULL;
- }
- if (!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
- deleteInterfaceSpec(interfaceSpec);
- return NULL;
- }
- luaEngine.pop(); //pop interfaceSpec
- //fbnSpec
- SCFB_FBNData fbnSpec = { };
- if (!luaEngine.pushField(-1, "fbnSpec", LUA_TTABLE)) {
- deleteInterfaceSpec(interfaceSpec);
- return NULL;
- }
- if (!initFbnSpec(fbnSpec, &luaEngine, -1)) {
- deleteInterfaceSpec(interfaceSpec);
- deleteFbnSpec(fbnSpec);
- return NULL;
- }
- luaEngine.pop(); //pop fbnSpec
- luaEngine.pop(); //pop loaded defs
- return new CLuaCFBTypeEntry(typeNameId, paLuaScriptAsString, interfaceSpec, fbnSpec);
-}
-
-CFunctionBlock* CLuaCFBTypeEntry::createFBInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) {
- CLuaEngine* luaEngine = pa_poSrcRes->getLuaEngine();
- if (!luaEngine->load(this)) {
- if (!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue()))) {
- return NULL;
- }
- }
- TForteByte* connData = new TForteByte[CFunctionBlock::genFBConnDataSize(m_interfaceSpec.m_nNumEOs, m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs)];
- TForteByte* varsData = new TForteByte[CCompositeFB::genFBVarsDataSize(m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs, m_interfaceSpec.m_nNumAdapters)];
- return new CLuaCFB(pa_nInstanceNameId, this, getFbnSpec(), connData, varsData, pa_poSrcRes);
-}
-
-bool CLuaCFBTypeEntry::initInterfaceSpec(SFBInterfaceSpec& interfaceSpec, CLuaEngine* luaEngine, int index) {
- //EI
- interfaceSpec.m_nNumEIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEIs");
- size_t numEIs = interfaceSpec.m_nNumEIs;
- interfaceSpec.m_aunEINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EINames", numEIs);
- size_t numEIWith = SIZE_MAX;
- interfaceSpec.m_anEIWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EIWith", numEIWith);
- interfaceSpec.m_anEIWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EIWithIndexes", numEIs);
- //EO
- interfaceSpec.m_nNumEOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numEOs");
- size_t numEOs = interfaceSpec.m_nNumEOs;
- interfaceSpec.m_aunEONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "EONames", numEOs);
- size_t numEOWith = SIZE_MAX;
- interfaceSpec.m_anEOWith = luaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(index, "EOWith", numEOWith);
- interfaceSpec.m_anEOWithIndexes = luaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(index, "EOWithIndexes", numEOs);
- //DI
- interfaceSpec.m_nNumDIs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDIs");
- size_t numDIs = interfaceSpec.m_nNumDIs;
- interfaceSpec.m_aunDINames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DINames", numDIs);
- size_t numDIDataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDIDataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DIDataTypeNames",
- numDIDataTypeNames);
- //DO
- interfaceSpec.m_nNumDOs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDOs");
- size_t numDOs = interfaceSpec.m_nNumDOs;
- interfaceSpec.m_aunDONames = luaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(index, "DONames", numDOs);
- size_t numDODataTypeNames = SIZE_MAX;
- interfaceSpec.m_aunDODataTypeNames = luaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(index, "DODataTypeNames",
- numDODataTypeNames);
- //Adapters
- interfaceSpec.m_nNumAdapters = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numAdapters");
- size_t numAdapters = interfaceSpec.m_nNumAdapters;
- interfaceSpec.m_pstAdapterInstanceDefinition = luaEngine->getCustomArrayField<SAdapterInstanceDef, luatype::getAdapterInstanceDefinition>(index,
- "adapterInstanceDefinition", numAdapters);
- //checks
- if (interfaceSpec.m_aunEINames == NULL || interfaceSpec.m_anEIWith == NULL || interfaceSpec.m_anEIWithIndexes == NULL || interfaceSpec.m_aunEONames == NULL
- || interfaceSpec.m_anEOWith == NULL || interfaceSpec.m_anEOWithIndexes == NULL || interfaceSpec.m_aunDINames == NULL
- || interfaceSpec.m_aunDIDataTypeNames == NULL || interfaceSpec.m_aunDONames == NULL || interfaceSpec.m_aunDODataTypeNames == NULL
- || interfaceSpec.m_pstAdapterInstanceDefinition == NULL) {
- return false;
- }
- for (size_t i = 0; i < numEIs; i++) {
- if (interfaceSpec.m_anEIWithIndexes[i] >= (TForteInt16) numEIWith) {
- return false;
- }
- }
- for (size_t i = 0; i < numEOs; i++) {
- if (interfaceSpec.m_anEOWithIndexes[i] >= (TForteInt16) numEOWith) {
- return false;
- }
- }
- return true;
-}
-
-void CLuaCFBTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& interfaceSpec) {
- delete[] interfaceSpec.m_aunEINames;
- delete[] interfaceSpec.m_anEIWith;
- delete[] interfaceSpec.m_anEIWithIndexes;
- delete[] interfaceSpec.m_aunEONames;
- delete[] interfaceSpec.m_anEOWith;
- delete[] interfaceSpec.m_anEOWithIndexes;
- delete[] interfaceSpec.m_aunDINames;
- delete[] interfaceSpec.m_aunDIDataTypeNames;
- delete[] interfaceSpec.m_aunDONames;
- delete[] interfaceSpec.m_aunDODataTypeNames;
- delete[] interfaceSpec.m_pstAdapterInstanceDefinition;
-}
-
-bool CLuaCFBTypeEntry::initFbnSpec(SCFB_FBNData& fbnSpec, CLuaEngine* luaEngine, int index) {
- //internalFBs
- fbnSpec.m_nNumFBs = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numFBs");
- size_t numFBs = fbnSpec.m_nNumFBs;
- fbnSpec.m_pstFBInstances = luaEngine->getCustomArrayField<SCFB_FBInstanceData, luatype::getFBInstanceData>(index, "internalFBs", numFBs);
- //eventConnections
- fbnSpec.m_nNumEventConnections = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numECons");
- size_t numECons = fbnSpec.m_nNumEventConnections;
- fbnSpec.m_pstEventConnections = luaEngine->getCustomArrayField<SCFB_FBConnectionData, luatype::getFBConnectionData>(index, "eventConnections", numECons);
- //fannedOutEventConnections
- fbnSpec.m_nNumFannedOutEventConnections = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numFECons");
- size_t numFECons = fbnSpec.m_nNumFannedOutEventConnections;
- fbnSpec.m_pstFannedOutEventConnections = luaEngine->getCustomArrayField<SCFB_FBFannedOutConnectionData, luatype::getFBFannedOutConnectionData>(index, "fannedOutEventConnections", numFECons);
- //dataConnections
- fbnSpec.m_nNumDataConnections = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numDCons");
- size_t numDCons = fbnSpec.m_nNumDataConnections;
- fbnSpec.m_pstDataConnections = luaEngine->getCustomArrayField<SCFB_FBConnectionData, luatype::getFBConnectionData>(index, "dataConnections", numDCons);
- //fannedOutDataConnections
- fbnSpec.m_nNumFannedOutDataConnections = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numFDCons");
- size_t numFDCons = fbnSpec.m_nNumFannedOutDataConnections;
- fbnSpec.m_pstFannedOutDataConnections = luaEngine->getCustomArrayField<SCFB_FBFannedOutConnectionData, luatype::getFBFannedOutConnectionData>(index, "fannedOutDataConnections", numFDCons);
- //parameters
- fbnSpec.m_nNumParams = luaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(index, "numParams");
- size_t numParams = fbnSpec.m_nNumParams;
- fbnSpec.m_pstParams = luaEngine->getCustomArrayField<SCFB_FBParameter, luatype::getFBParameter>(index, "parameters", numParams);
- //checks
- if (fbnSpec.m_pstFBInstances == NULL) {
- return false;
- }
- return true;
-}
-
-void CLuaCFBTypeEntry::deleteFbnSpec(SCFB_FBNData& fbnSpec) {
- delete[] fbnSpec.m_pstFBInstances;
- delete[] fbnSpec.m_pstEventConnections;
- delete[] fbnSpec.m_pstFannedOutEventConnections;
- delete[] fbnSpec.m_pstDataConnections;
- delete[] fbnSpec.m_pstFannedOutDataConnections;
- delete[] fbnSpec.m_pstParams;
-}
+/*******************************************************************************
+ * Copyright (c) 2017 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Monika Wenger
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "luacfbtypeentry.h"
+
+#include "resource.h"
+#include "luaengine.h"
+#include "luacfb.h"
+#include "luatype.h"
+
+namespace luatype {
+ bool getFBInstanceData(SCFB_FBInstanceData& paDef, CLuaEngine* paLuaEngine, int paIndex) {
+ paDef.m_nFBInstanceNameId = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "fbNameID");
+ paDef.m_nFBTypeNameId = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "fbTypeID");
+ if(paDef.m_nFBInstanceNameId == CStringDictionary::scm_nInvalidStringId || paDef.m_nFBTypeNameId == CStringDictionary::scm_nInvalidStringId) {
+ return false;
+ }
+ return true;
+ }
+
+ bool getFBConnectionData(SCFB_FBConnectionData& paDef, CLuaEngine* paLuaEngine, int paIndex) {
+ paDef.m_nDstFBNum = paLuaEngine->getField<int, &CLuaEngine::getInteger<int> >(paIndex, "dstFBNum");
+ paDef.m_nDstId = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "dstID");
+ paDef.m_nSrcFBNum = paLuaEngine->getField<int, &CLuaEngine::getInteger<int> >(paIndex, "srcFBNum");
+ paDef.m_nSrcId = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "srcID");
+ if(paDef.m_nDstId == CStringDictionary::scm_nInvalidStringId || paDef.m_nSrcId == CStringDictionary::scm_nInvalidStringId) {
+ return false;
+ }
+ return true;
+ }
+
+ bool getFBFannedOutConnectionData(SCFB_FBFannedOutConnectionData& paDef, CLuaEngine* paLuaEngine, int paIndex) {
+ paDef.m_nConnectionNum = paLuaEngine->getField<int, &CLuaEngine::getInteger<int> >(paIndex, "connectionNum");
+ paDef.m_nDstFBNum = paLuaEngine->getField<int, &CLuaEngine::getInteger<int> >(paIndex, "dstFBNum");
+ paDef.m_nDstId = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "dstID");
+ if(paDef.m_nDstId == CStringDictionary::scm_nInvalidStringId) {
+ return false;
+ }
+ return true;
+ }
+
+ bool getFBParameter(SCFB_FBParameter& paDef, CLuaEngine* paLuaEngine, int paIndex) {
+ paDef.m_acParamValue = paLuaEngine->getField<char *, &CLuaEngine::getString>(paIndex, "paramValue");
+ paDef.m_nDINameID = paLuaEngine->getField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "diNameID");
+ paDef.m_nFBNum = paLuaEngine->getField<int, &CLuaEngine::getInteger<int> >(paIndex, "fbNum");
+ if(paDef.m_nDINameID == CStringDictionary::scm_nInvalidStringId) {
+ return false;
+ }
+ return true;
+ }
+}
+
+CLuaCFBTypeEntry::CLuaCFBTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING paLuaScriptAsString, SFBInterfaceSpec& paInterfaceSpec,
+ SCFB_FBNData& paFbnSpec) :
+ CTypeLib::CFBTypeEntry(paTypeNameId, 0, &m_interfaceSpec), cm_sLuaScriptAsString(paLuaScriptAsString), m_interfaceSpec(paInterfaceSpec), m_fbnSpec(paFbnSpec) {
+}
+
+CLuaCFBTypeEntry::~CLuaCFBTypeEntry() {
+ deleteInterfaceSpec(m_interfaceSpec);
+ deleteFbnSpec(m_fbnSpec);
+}
+
+CLuaCFBTypeEntry* CLuaCFBTypeEntry::createLuaFBTypeEntry(CStringDictionary::TStringId paTypeNameId, CIEC_STRING& paLuaScriptAsString) {
+ CLuaEngine luaEngine;
+ if(!luaEngine.loadString(std::string(paLuaScriptAsString.getValue()))) {
+ return NULL;
+ }
+ //interfaceSpec
+ SFBInterfaceSpec interfaceSpec = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ if(!luaEngine.pushField(-1, "interfaceSpec", LUA_TTABLE)) {
+ return NULL;
+ }
+ if(!initInterfaceSpec(interfaceSpec, &luaEngine, -1)) {
+ deleteInterfaceSpec(interfaceSpec);
+ return NULL;
+ }
+ luaEngine.pop(); //pop interfaceSpec
+ //fbnSpec
+ SCFB_FBNData fbnSpec = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ if(!luaEngine.pushField(-1, "fbnSpec", LUA_TTABLE)) {
+ deleteInterfaceSpec(interfaceSpec);
+ return NULL;
+ }
+ if(!initFbnSpec(fbnSpec, &luaEngine, -1)) {
+ deleteInterfaceSpec(interfaceSpec);
+ deleteFbnSpec(fbnSpec);
+ return NULL;
+ }
+ luaEngine.pop(); //pop fbnSpec
+ luaEngine.pop(); //pop loaded defs
+ return new CLuaCFBTypeEntry(paTypeNameId, paLuaScriptAsString, interfaceSpec, fbnSpec);
+}
+
+CFunctionBlock* CLuaCFBTypeEntry::createFBInstance(CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) {
+ CLuaEngine* luaEngine = paSrcRes->getLuaEngine();
+ if(!luaEngine->load(this) && (!luaEngine->loadString(std::string(cm_sLuaScriptAsString.getValue())))) {
+ return NULL;
+ }
+ TForteByte* connData = new TForteByte[CFunctionBlock::genFBConnDataSize(m_interfaceSpec.m_nNumEOs, m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs)];
+ TForteByte* varsData = new TForteByte[CCompositeFB::genFBVarsDataSize(m_interfaceSpec.m_nNumDIs, m_interfaceSpec.m_nNumDOs, m_interfaceSpec.m_nNumAdapters)];
+ return new CLuaCFB(paInstanceNameId, this, getFbnSpec(), connData, varsData, paSrcRes);
+}
+
+bool CLuaCFBTypeEntry::initInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec, CLuaEngine* paLuaEngine, int paIndex) {
+ //EI
+ paInterfaceSpec.m_nNumEIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEIs");
+ size_t numEIs = paInterfaceSpec.m_nNumEIs;
+ paInterfaceSpec.m_aunEINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EINames", numEIs);
+ size_t numEIWith = SIZE_MAX;
+ paInterfaceSpec.m_anEIWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EIWith", numEIWith);
+ paInterfaceSpec.m_anEIWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EIWithIndexes", numEIs);
+ //EO
+ paInterfaceSpec.m_nNumEOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numEOs");
+ size_t numEOs = paInterfaceSpec.m_nNumEOs;
+ paInterfaceSpec.m_aunEONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "EONames", numEOs);
+ size_t numEOWith = SIZE_MAX;
+ paInterfaceSpec.m_anEOWith = paLuaEngine->getArrayField<TDataIOID, &CLuaEngine::getInteger<TDataIOID> >(paIndex, "EOWith", numEOWith);
+ paInterfaceSpec.m_anEOWithIndexes = paLuaEngine->getArrayField<TForteInt16, &CLuaEngine::getInteger<TForteInt16> >(paIndex, "EOWithIndexes", numEOs);
+ //DI
+ paInterfaceSpec.m_nNumDIs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDIs");
+ size_t numDIs = paInterfaceSpec.m_nNumDIs;
+ paInterfaceSpec.m_aunDINames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DINames", numDIs);
+ size_t numDIDataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDIDataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DIDataTypeNames",
+ numDIDataTypeNames);
+ //DO
+ paInterfaceSpec.m_nNumDOs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDOs");
+ size_t numDOs = paInterfaceSpec.m_nNumDOs;
+ paInterfaceSpec.m_aunDONames = paLuaEngine->getArrayField<CStringDictionary::TStringId, &CLuaEngine::getStringId>(paIndex, "DONames", numDOs);
+ size_t numDODataTypeNames = SIZE_MAX;
+ paInterfaceSpec.m_aunDODataTypeNames = paLuaEngine->getCustomArrayField<CStringDictionary::TStringId, luatype::getTypeNameId>(paIndex, "DODataTypeNames",
+ numDODataTypeNames);
+ //Adapters
+ paInterfaceSpec.m_nNumAdapters = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numAdapters");
+ size_t numAdapters = paInterfaceSpec.m_nNumAdapters;
+ paInterfaceSpec.m_pstAdapterInstanceDefinition = paLuaEngine->getCustomArrayField<SAdapterInstanceDef, luatype::getAdapterInstanceDefinition>(paIndex,
+ "adapterInstanceDefinition", numAdapters);
+ //checks
+ if(paInterfaceSpec.m_aunEINames == NULL || paInterfaceSpec.m_anEIWith == NULL || paInterfaceSpec.m_anEIWithIndexes == NULL
+ || paInterfaceSpec.m_aunEONames == NULL || paInterfaceSpec.m_anEOWith == NULL || paInterfaceSpec.m_anEOWithIndexes == NULL
+ || paInterfaceSpec.m_aunDINames == NULL || paInterfaceSpec.m_aunDIDataTypeNames == NULL || paInterfaceSpec.m_aunDONames == NULL
+ || paInterfaceSpec.m_aunDODataTypeNames == NULL || paInterfaceSpec.m_pstAdapterInstanceDefinition == NULL) {
+ return false;
+ }
+ for(size_t i = 0; i < numEIs; i++) {
+ if(paInterfaceSpec.m_anEIWithIndexes[i] >= (TForteInt16) numEIWith) {
+ return false;
+ }
+ }
+ for(size_t i = 0; i < numEOs; i++) {
+ if(paInterfaceSpec.m_anEOWithIndexes[i] >= (TForteInt16) numEOWith) {
+ return false;
+ }
+ }
+ return true;
+}
+
+void CLuaCFBTypeEntry::deleteInterfaceSpec(SFBInterfaceSpec& paInterfaceSpec) {
+ delete[] paInterfaceSpec.m_aunEINames;
+ delete[] paInterfaceSpec.m_anEIWith;
+ delete[] paInterfaceSpec.m_anEIWithIndexes;
+ delete[] paInterfaceSpec.m_aunEONames;
+ delete[] paInterfaceSpec.m_anEOWith;
+ delete[] paInterfaceSpec.m_anEOWithIndexes;
+ delete[] paInterfaceSpec.m_aunDINames;
+ delete[] paInterfaceSpec.m_aunDIDataTypeNames;
+ delete[] paInterfaceSpec.m_aunDONames;
+ delete[] paInterfaceSpec.m_aunDODataTypeNames;
+ delete[] paInterfaceSpec.m_pstAdapterInstanceDefinition;
+}
+
+bool CLuaCFBTypeEntry::initFbnSpec(SCFB_FBNData& paFbnSpec, CLuaEngine* paLuaEngine, int paIndex) {
+ //internalFBs
+ paFbnSpec.m_nNumFBs = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numFBs");
+ size_t numFBs = paFbnSpec.m_nNumFBs;
+ paFbnSpec.m_pstFBInstances = paLuaEngine->getCustomArrayField<SCFB_FBInstanceData, luatype::getFBInstanceData>(paIndex, "internalFBs", numFBs);
+ //eventConnections
+ paFbnSpec.m_nNumEventConnections = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numECons");
+ size_t numECons = paFbnSpec.m_nNumEventConnections;
+ paFbnSpec.m_pstEventConnections = paLuaEngine->getCustomArrayField<SCFB_FBConnectionData, luatype::getFBConnectionData>(paIndex, "eventConnections",
+ numECons);
+ //fannedOutEventConnections
+ paFbnSpec.m_nNumFannedOutEventConnections = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numFECons");
+ size_t numFECons = paFbnSpec.m_nNumFannedOutEventConnections;
+ paFbnSpec.m_pstFannedOutEventConnections = paLuaEngine->getCustomArrayField<SCFB_FBFannedOutConnectionData, luatype::getFBFannedOutConnectionData>(paIndex,
+ "fannedOutEventConnections", numFECons);
+ //dataConnections
+ paFbnSpec.m_nNumDataConnections = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numDCons");
+ size_t numDCons = paFbnSpec.m_nNumDataConnections;
+ paFbnSpec.m_pstDataConnections = paLuaEngine->getCustomArrayField<SCFB_FBConnectionData, luatype::getFBConnectionData>(paIndex, "dataConnections", numDCons);
+ //fannedOutDataConnections
+ paFbnSpec.m_nNumFannedOutDataConnections = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numFDCons");
+ size_t numFDCons = paFbnSpec.m_nNumFannedOutDataConnections;
+ paFbnSpec.m_pstFannedOutDataConnections = paLuaEngine->getCustomArrayField<SCFB_FBFannedOutConnectionData, luatype::getFBFannedOutConnectionData>(paIndex,
+ "fannedOutDataConnections", numFDCons);
+ //parameters
+ paFbnSpec.m_nNumParams = paLuaEngine->getField<TForteUInt8, &CLuaEngine::getInteger<TForteUInt8> >(paIndex, "numParams");
+ size_t numParams = paFbnSpec.m_nNumParams;
+ paFbnSpec.m_pstParams = paLuaEngine->getCustomArrayField<SCFB_FBParameter, luatype::getFBParameter>(paIndex, "parameters", numParams);
+ //checks
+ if(paFbnSpec.m_pstFBInstances == NULL) {
+ return false;
+ }
+ return true;
+}
+
+void CLuaCFBTypeEntry::deleteFbnSpec(SCFB_FBNData& paFbnSpec) {
+ delete[] paFbnSpec.m_pstFBInstances;
+ delete[] paFbnSpec.m_pstEventConnections;
+ delete[] paFbnSpec.m_pstFannedOutEventConnections;
+ delete[] paFbnSpec.m_pstDataConnections;
+ delete[] paFbnSpec.m_pstFannedOutDataConnections;
+ delete[] paFbnSpec.m_pstParams;
+}
diff --git a/src/core/lua/luacfbtypeentry.h b/src/core/lua/luacfbtypeentry.h
index e111bea..012b5b7 100644
--- a/src/core/lua/luacfbtypeentry.h
+++ b/src/core/lua/luacfbtypeentry.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst
diff --git a/src/core/lua/luaengine.cpp b/src/core/lua/luaengine.cpp
index 621b672..c789cf0 100644
--- a/src/core/lua/luaengine.cpp
+++ b/src/core/lua/luaengine.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 - 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst, Monika Wenger
@@ -50,10 +51,10 @@
lua_close(luaState);
}
-bool CLuaEngine::loadString(const std::string& str) {
- int err = luaL_loadstring(luaState, str.c_str());
- if (err) {
- switch (err) {
+bool CLuaEngine::loadString(const std::string& paStr) {
+ int err = luaL_loadstring(luaState, paStr.c_str());
+ if(err) {
+ switch(err){
case LUA_ERRSYNTAX:
DEVLOG_ERROR("Syntax error loading Lua definitions\n");
break;
@@ -65,17 +66,17 @@
}
return false;
}
- if (!call(0, 1)) {
+ if(!call(0, 1)) {
DEVLOG_ERROR("Error loading definitions\n");
return false;
}
return true;
}
-bool CLuaEngine::call(int args, int results) {
- int err = lua_pcall(luaState, args, results, 0);
- if (err) {
- switch (err) {
+bool CLuaEngine::call(int paArgs, int paResults) {
+ int err = lua_pcall(luaState, paArgs, paResults, 0);
+ if(err) {
+ switch(err){
case LUA_ERRRUN:
DEVLOG_ERROR("Runtime error calling Lua function: %s\n", lua_tostring(luaState, -1));
break;
@@ -93,185 +94,187 @@
return true;
}
-bool CLuaEngine::luaPushAny(lua_State *luaState, CIEC_ANY *value) {
- if (!value)
+bool CLuaEngine::luaPushAny(lua_State *paLuaState, CIEC_ANY *paValue) {
+ if(!paValue) {
return false;
+ }
- switch (value->getDataTypeID()) {
+ switch(paValue->getDataTypeID()){
case CIEC_ANY::e_BOOL:
- lua_pushboolean(luaState, static_cast<bool>(*static_cast<CIEC_BOOL*>(value)));
+ lua_pushboolean(paLuaState, static_cast<bool>(*static_cast<CIEC_BOOL*>(paValue)));
break;
case CIEC_ANY::e_SINT:
- lua_pushinteger(luaState, static_cast<TForteInt8>(*static_cast<CIEC_SINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteInt8>(*static_cast<CIEC_SINT*>(paValue)));
break;
case CIEC_ANY::e_INT:
- lua_pushinteger(luaState, static_cast<TForteInt16>(*static_cast<CIEC_INT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteInt16>(*static_cast<CIEC_INT*>(paValue)));
break;
case CIEC_ANY::e_DINT:
- lua_pushinteger(luaState, static_cast<TForteInt32>(*static_cast<CIEC_DINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteInt32>(*static_cast<CIEC_DINT*>(paValue)));
break;
case CIEC_ANY::e_LINT:
- lua_pushinteger(luaState, static_cast<TForteInt64>(*static_cast<CIEC_LINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteInt64>(*static_cast<CIEC_LINT*>(paValue))));
break;
case CIEC_ANY::e_USINT:
- lua_pushinteger(luaState, static_cast<TForteUInt8>(*static_cast<CIEC_USINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteUInt8>(*static_cast<CIEC_USINT*>(paValue)));
break;
case CIEC_ANY::e_UINT:
- lua_pushinteger(luaState, static_cast<TForteUInt16>(*static_cast<CIEC_UINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteUInt16>(*static_cast<CIEC_UINT*>(paValue)));
break;
case CIEC_ANY::e_UDINT:
- lua_pushinteger(luaState, static_cast<TForteUInt32>(*static_cast<CIEC_UDINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteUInt32>(*static_cast<CIEC_UDINT*>(paValue)));
break;
case CIEC_ANY::e_ULINT:
- lua_pushinteger(luaState, static_cast<TForteUInt64>(*static_cast<CIEC_ULINT*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteUInt64>(*static_cast<CIEC_ULINT*>(paValue))));
break;
case CIEC_ANY::e_BYTE:
- lua_pushinteger(luaState, static_cast<TForteByte>(*static_cast<CIEC_BYTE*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteByte>(*static_cast<CIEC_BYTE*>(paValue)));
break;
case CIEC_ANY::e_WORD:
- lua_pushinteger(luaState, static_cast<TForteWord>(*static_cast<CIEC_WORD*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteWord>(*static_cast<CIEC_WORD*>(paValue)));
break;
case CIEC_ANY::e_DWORD:
- lua_pushinteger(luaState, static_cast<TForteDWord>(*static_cast<CIEC_DWORD*>(value)));
+ lua_pushinteger(paLuaState, static_cast<TForteDWord>(*static_cast<CIEC_DWORD*>(paValue)));
break;
case CIEC_ANY::e_LWORD:
- lua_pushinteger(luaState, static_cast<TForteLWord>(*static_cast<CIEC_LWORD*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteLWord>(*static_cast<CIEC_LWORD*>(paValue))));
break;
case CIEC_ANY::e_DATE:
- lua_pushinteger(luaState, static_cast<TForteUInt64>(*static_cast<CIEC_DATE*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteUInt64>(*static_cast<CIEC_DATE*>(paValue))));
break;
case CIEC_ANY::e_TIME_OF_DAY:
- lua_pushinteger(luaState, static_cast<TForteUInt64>(*static_cast<CIEC_TIME_OF_DAY*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteUInt64>(*static_cast<CIEC_TIME_OF_DAY*>(paValue))));
break;
case CIEC_ANY::e_DATE_AND_TIME:
- lua_pushinteger(luaState, static_cast<TForteUInt64>(*static_cast<CIEC_DATE_AND_TIME*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteUInt64>(*static_cast<CIEC_DATE_AND_TIME*>(paValue))));
break;
case CIEC_ANY::e_TIME:
- lua_pushinteger(luaState, static_cast<TForteInt64>(*static_cast<CIEC_TIME*>(value)));
+ lua_pushinteger(paLuaState, static_cast<lua_Integer>(static_cast<TForteInt64>(*static_cast<CIEC_TIME*>(paValue))));
break;
case CIEC_ANY::e_REAL:
- lua_pushnumber(luaState, static_cast<TForteFloat>(*static_cast<CIEC_REAL*>(value)));
+ lua_pushnumber(paLuaState, static_cast<TForteFloat>(*static_cast<CIEC_REAL*>(paValue)));
break;
case CIEC_ANY::e_LREAL:
- lua_pushnumber(luaState, static_cast<TForteDFloat>(*static_cast<CIEC_LREAL*>(value)));
+ lua_pushnumber(paLuaState, static_cast<TForteDFloat>(*static_cast<CIEC_LREAL*>(paValue)));
break;
case CIEC_ANY::e_STRING:
- lua_pushstring(luaState, static_cast<CIEC_STRING*>(value)->getValue());
+ lua_pushstring(paLuaState, static_cast<CIEC_STRING*>(paValue)->getValue());
break;
case CIEC_ANY::e_WSTRING:
- lua_pushstring(luaState, static_cast<CIEC_WSTRING*>(value)->getValue());
+ lua_pushstring(paLuaState, static_cast<CIEC_WSTRING*>(paValue)->getValue());
break;
case CIEC_ANY::e_ARRAY:
- return luaPushArray(luaState, static_cast<CIEC_ARRAY*>(value));
+ return luaPushArray(paLuaState, static_cast<CIEC_ARRAY*>(paValue));
default:
- DEVLOG_ERROR("Conversion to Lua datatype unsupported for type with id %s\n", value->getDataTypeID());
- lua_pushnil(luaState);
+ DEVLOG_ERROR("Conversion to Lua datatype unsupported for type with id %s\n", paValue->getDataTypeID());
+ lua_pushnil(paLuaState);
}
return true;
}
-bool CLuaEngine::luaGetAny(lua_State *luaState, CIEC_ANY *value, int index) {
- if (!value)
+bool CLuaEngine::luaGetAny(lua_State *paLuaState, CIEC_ANY *paValue, int paIndex) {
+ if(!paValue) {
return false;
- switch (value->getDataTypeID()) {
+ }
+ switch(paValue->getDataTypeID()){
case CIEC_ANY::e_BOOL:
- *static_cast<CIEC_BOOL*>(value) = static_cast<bool>(lua_toboolean(luaState, index));
+ *static_cast<CIEC_BOOL*>(paValue) = static_cast<bool>(lua_toboolean(paLuaState, paIndex));
break;
case CIEC_ANY::e_SINT:
- *static_cast<CIEC_SINT*>(value) = static_cast<TForteInt8>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_SINT*>(paValue) = static_cast<TForteInt8>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_INT:
- *static_cast<CIEC_INT*>(value) = static_cast<TForteInt16>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_INT*>(paValue) = static_cast<TForteInt16>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_DINT:
- *static_cast<CIEC_DINT*>(value) = static_cast<TForteInt32>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_DINT*>(paValue) = static_cast<TForteInt32>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_LINT:
- *static_cast<CIEC_LINT*>(value) = static_cast<TForteInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_LINT*>(paValue) = static_cast<TForteInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_USINT:
- *static_cast<CIEC_USINT*>(value) = static_cast<TForteUInt8>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_USINT*>(paValue) = static_cast<TForteUInt8>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_UINT:
- *static_cast<CIEC_UINT*>(value) = static_cast<TForteUInt16>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_UINT*>(paValue) = static_cast<TForteUInt16>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_UDINT:
- *static_cast<CIEC_UDINT*>(value) = static_cast<TForteUInt32>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_UDINT*>(paValue) = static_cast<TForteUInt32>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_ULINT:
- *static_cast<CIEC_ULINT*>(value) = static_cast<TForteUInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_ULINT*>(paValue) = static_cast<TForteUInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_BYTE:
- *static_cast<CIEC_BYTE*>(value) = static_cast<TForteByte>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_BYTE*>(paValue) = static_cast<TForteByte>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_WORD:
- *static_cast<CIEC_WORD*>(value) = static_cast<TForteWord>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_WORD*>(paValue) = static_cast<TForteWord>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_DWORD:
- *static_cast<CIEC_DWORD*>(value) = static_cast<TForteDWord>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_DWORD*>(paValue) = static_cast<TForteDWord>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_LWORD:
- *static_cast<CIEC_LWORD*>(value) = static_cast<TForteLWord>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_LWORD*>(paValue) = static_cast<TForteLWord>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_DATE:
- *static_cast<CIEC_DATE*>(value) = static_cast<TForteUInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_DATE*>(paValue) = static_cast<TForteUInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_TIME_OF_DAY:
- *static_cast<CIEC_TIME_OF_DAY*>(value) = static_cast<TForteUInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_TIME_OF_DAY*>(paValue) = static_cast<TForteUInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_DATE_AND_TIME:
- *static_cast<CIEC_DATE_AND_TIME*>(value) = static_cast<TForteUInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_DATE_AND_TIME*>(paValue) = static_cast<TForteUInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_TIME:
- *static_cast<CIEC_TIME*>(value) = static_cast<TForteInt64>(lua_tointeger(luaState, index));
+ *static_cast<CIEC_TIME*>(paValue) = static_cast<TForteInt64>(lua_tointeger(paLuaState, paIndex));
break;
case CIEC_ANY::e_REAL:
- *static_cast<CIEC_REAL*>(value) = static_cast<TForteFloat>(lua_tonumber(luaState, index));
+ *static_cast<CIEC_REAL*>(paValue) = static_cast<TForteFloat>(lua_tonumber(paLuaState, paIndex));
break;
case CIEC_ANY::e_LREAL:
- *static_cast<CIEC_LREAL*>(value) = static_cast<TForteDFloat>(lua_tonumber(luaState, index));
+ *static_cast<CIEC_LREAL*>(paValue) = static_cast<TForteDFloat>(lua_tonumber(paLuaState, paIndex));
break;
case CIEC_ANY::e_STRING:
- *static_cast<CIEC_STRING*>(value) = strdup(lua_tostring(luaState, index));
+ *static_cast<CIEC_STRING*>(paValue) = strdup(lua_tostring(paLuaState, paIndex));
break;
case CIEC_ANY::e_WSTRING:
- *static_cast<CIEC_WSTRING*>(value) = strdup(lua_tostring(luaState, index));
+ *static_cast<CIEC_WSTRING*>(paValue) = strdup(lua_tostring(paLuaState, paIndex));
break;
case CIEC_ANY::e_ARRAY:
- return luaGetArray(luaState, static_cast<CIEC_ARRAY*>(value), index);
+ return luaGetArray(paLuaState, static_cast<CIEC_ARRAY*>(paValue), paIndex);
default:
- DEVLOG_ERROR("Conversion from Lua datatype unsupported for type with id %s\n", value->getDataTypeID());
+ DEVLOG_ERROR("Conversion from Lua datatype unsupported for type with id %s\n", paValue->getDataTypeID());
return false;
}
return true;
}
-bool CLuaEngine::luaPushArray(lua_State *luaState, CIEC_ARRAY* array) {
- if (!array) {
+bool CLuaEngine::luaPushArray(lua_State *paLuaState, CIEC_ARRAY* paArray) {
+ if(!paArray) {
return false;
}
- lua_createtable(luaState, array->size(), 0);
- for (int i = array->size(); i > 0; i--) {
- if (!luaPushAny(luaState, (*array)[(TForteUInt16)(i - 1)])) { // index starts at 0
- lua_pop(luaState, 1); // pop table
+ lua_createtable(paLuaState, paArray->size(), 0);
+ for(int i = paArray->size(); i > 0; i--) {
+ if(!luaPushAny(paLuaState, (*paArray)[(TForteUInt16) (i - 1)])) { // index starts at 0
+ lua_pop(paLuaState, 1); // pop table
return false;
}
- lua_rawseti(luaState, -2, i); // index starts at 1
+ lua_rawseti(paLuaState, -2, i); // index starts at 1
}
return true;
}
-bool CLuaEngine::luaGetArray(lua_State *luaState, CIEC_ARRAY* array, int index) {
- if (!array || !lua_istable(luaState, index)) {
+bool CLuaEngine::luaGetArray(lua_State *paLuaState, CIEC_ARRAY* paArray, int paIndex) {
+ if(!paArray || !lua_istable(paLuaState, paIndex)) {
return false;
}
- for (int i = array->size(); i > 0; i--) {
- lua_rawgeti(luaState, index, i); // index starts at 1
- bool res = luaGetAny(luaState, (*array)[(TForteUInt16)(i - 1)], -1); // index starts at 0
- lua_pop(luaState, 1); // pop element
- if (!res) {
+ for(int i = paArray->size(); i > 0; i--) {
+ lua_rawgeti(paLuaState, paIndex, i); // index starts at 1
+ bool res = luaGetAny(paLuaState, (*paArray)[(TForteUInt16) (i - 1)], -1); // index starts at 0
+ lua_pop(paLuaState, 1); // pop element
+ if(!res) {
return false;
}
}
diff --git a/src/core/lua/luaengine.h b/src/core/lua/luaengine.h
index eec8b1c..9ccf162 100644
--- a/src/core/lua/luaengine.h
+++ b/src/core/lua/luaengine.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst
diff --git a/src/core/lua/luatype.cpp b/src/core/lua/luatype.cpp
index e4705f4..35422ae 100644
--- a/src/core/lua/luatype.cpp
+++ b/src/core/lua/luatype.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Jobst, Monika Wenger
diff --git a/src/core/lua/luatype.h b/src/core/lua/luatype.h
index 696c374..d5a5d67 100644
--- a/src/core/lua/luatype.h
+++ b/src/core/lua/luatype.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/core/mgmcmd.h b/src/core/mgmcmd.h
index 7d937a2..55c90ac 100644
--- a/src/core/mgmcmd.h
+++ b/src/core/mgmcmd.h
@@ -1,237 +1,256 @@
-/*******************************************************************************
- * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Gunnar Grabmaier, Thomas Strasser, Gerhard Ebenhofer,
- * Martin Melik Merkumians, Ingo Hegny,
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
-#ifndef _MGMCMD_H_
-#define _MGMCMD_H_
-
-/** \ingroup CORE \defgroup MGMCommands Management Commands Internal Representation
- * \brief In this section the FORTE representation of the management commands is described.
- */
-/*@{*/
-
-/*!\brief Type for the management command (e.g. create, delete ...)
- *
- * The constants for the management commands are selected in the following way:
- * - the lower 4 bit are the same as the corresponding command defined by the standard (see 61499-1: Table 6, p47).
- * - the higher 4 bits are counted as they are listed in the Table 8, p48 in 61499-1.
- *
- */
-enum EMGMCommandType{
- cg_nMGM_CMD_Create_Group = 0x00, //!< Identifier for all create commands
-
- cg_nMGM_CMD_Create_DataType = 0x10, //!< Create a new data type definition in the FORTE.
- cg_nMGM_CMD_Create_FBType = 0x20, //!< Create a new FB type definition in the FORTE.
- cg_nMGM_CMD_Create_AdapterType = 0x50, //!< Create a new Adapter type definition in the FORTE.
-
- /*! \brief Create a new FB or resource instance.
- *
- * When creating a FB instance the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
- * - m_sFistParam = FB Instance name
- * - m_sSecondParam = FB Type
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Create_FBInstance = 0x30,
-
- /*! \brief Create a new connection (can be event or data connection).
- *
- * When creating a connection the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
- * - m_sFistParam = source of the connection given by: "fbname.output"
- * - m_sSecondParam = destination of the connection given by: "fbname.intput"
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Create_Connection = 0x40,
-
- cg_nMGM_CMD_Delete_Group = 0x01, //!<Identifier for all delete commands
- cg_nMGM_CMD_Delete_DataType = 0x11,
- cg_nMGM_CMD_Delete_FBType = 0x21,
-
- /*! \brief Delete a FB or resource instance.
- *
- * When deleting a FB instance the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for deleting within the device or "resname" for creating within a resource
- * - m_sFistParam = FB Instance name
- * - m_sSecondParam not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Delete_FBInstance = 0x31,
-
- /*! \brief Delete a connection (can be event or data connection).
- *
- * When deleting a connection the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for deleting within the device or "resname" for deleting within a resource
- * - m_sFistParam = source of the connection given by: "fbname.output"
- * - m_sSecondParam = destination of the connection given by: "fbname.intput"
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Delete_Connection = 0x41,
-
- /*! \brief Delete all FBs or resource instances.
- *
- * When deleting a FB instance the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for deleting within the device or "resname" for deleting within a resource
- * - m_sFistParam not used
- * - m_sSecondParam not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Delete_AllFBInstances = 0x61,
-
- /*! \brief start a FB, resource or the device.
- *
- * When starting a FB, resource or the device the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for starting within the device or "resname" for starting within a resource
- * - m_sFirstParam = target to be started can be empty for starting the whole device or resource, or contain a name for the resource or FB to start.
- * - m_sSecondParam = not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Start = 0x02,
-
- /*! \brief stop a FB, resource or the device.
- *
- * When stopping a FB, resource or the device the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for stopping within the device or "resname" for stopping within a resource
- * - m_sFirstParam = target to be stopped can be empty for starting the whole device or resource, or contain a name for the resource or FB to stop.
- * - m_sSecondParam = not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Stop = 0x03,
-
- /*! \brief Read values from FB in- and outputs or from resource inputs
- *
- * When reading a parameter value the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
- * - m_sFistParam = Source qualifier for reading an FB's variable ("fbname.var") variable identifier may be input, output, or internal var
- * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
- * - m_sAdditionalParams the read value is stored here
- */
- cg_nMGM_CMD_Read = 0x04,
-
- /*! \brief Write value to a given data input or output (FB or Resource)
- *
- * When writing a parameter value the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
- * - m_sFistParam = Destination qualifier for writing on an FB's variable ("fbname.var") variable identifier may be input, output, or internal var
- * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
- * - m_sAdditionalParams = the string converted value to be set
- */
- cg_nMGM_CMD_Write = 0x05,
-
- /*! \brief kill a FB, resource or the device.
- *
- * When killing a FB, resource or the device the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for killing within the device or "resname" for stopping within a resource
- * - m_sFistParam = target to be killed can be empty for starting the whole device or resource, or contain a name for the resource or FB to stop.
- * - m_sSecondParam = not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Kill = 0x06,
-
-#ifdef FORTE_SUPPORT_QUERY_CMD
- cg_nMGM_CMD_Query_Group = 0x07, //!< Identifier for all query commands
-
- /*! \brief query FBs
- *
- * The parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" to query within the device or "resname" for fetching within a resource
- * - m_acFirstParam = CStringDictionary::scm_nInvalidStringId for all FBs or instance name
- * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId for all FB types or type name
- * - m_sAdditionalParams the response value of the query
- */
- cg_nMGM_CMD_QUERY_FB = 0x17,
-
- /*! \brief query connections
- *
- * The parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" to query within the device or "resname" for fetching within a resource
- * - m_acFirstParam = CStringDictionary::scm_nInvalidStringId
- * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
- * - m_sAdditionalParams the response value of the query - a list of event and data connections (comma separated list of end points to end points)
- */
- cg_nMGM_CMD_QUERY_Connection = 0x27,
-
- /*! \brief Read the existing fb types.
- *
- * When reading the fb types the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
- * - m_sFistParam = not used
- * - m_sSecondParam = not used
- * - m_sAdditionalParams the read value is stored here
- */
- cg_nMGM_CMD_QUERY_FBTypes = 0x37,
-
- /*! \brief Read the existing data types.
- *
- * When reading the data types the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
- * - m_sFistParam = not used
- * - m_sSecondParam = not used
- * - m_sAdditionalParams the read value is stored here
- */
- cg_nMGM_CMD_QUERY_DTTypes = 0x47,
-
- /*! \brief Read the existing data types.
- *
- * When reading the data types the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
- * - m_sFirstParam = not used
- * - m_sSecondParam = not used
- * - m_sAdditionalParams the read value is stored here
- */
- cg_nMGM_CMD_QUERY_AdapterTypes = 0x57,
-
- /**
- * currently not implemented
- */
- cg_nMGM_CMD_QUERY_TypeVers = 0x67,
-#endif
-
- /*! \brief reset a FB, resource or the device.
- *
- * When reseting a FB, resource or the device the parameters of the SManagementCMD are defined as:
- * - m_sDestination = "" for reseting within the device or "resname" for reseting within a resource
- * - m_sFistParam = target to be reset can be empty for reseting the whole device or resource, or contain a name for the resource or FB to reset.
- * - m_sSecondParam = not used
- * - m_sAdditionalParams not used
- */
- cg_nMGM_CMD_Reset = 0x08,
-
-
-
- #ifdef FORTE_SUPPORT_MONITORING
- cg_nMGM_CMD_Monitoring_Group = 0x0A,
- cg_nMGM_CMD_Monitoring_Add_Watch = 0x1A,
- cg_nMGM_CMD_Monitoring_Remove_Watch = 0x2A,
- cg_nMGM_CMD_Monitoring_Read_Watches = 0x3A,
- cg_nMGM_CMD_Monitoring_Force = 0x5A,
- cg_nMGM_CMD_Monitoring_ClearForce = 0x6A,
- cg_nMGM_CMD_Monitoring_Trigger_Event = 0x7A,
- cg_nMGM_CMD_Monitoring_Reset_Event_Count = 0x8A,
- #endif // FORTE_SUPPORT_MONITORING
-
-
- /*! \brief invalid command: some of the data could not be parsed
- */
- cg_nMGM_CMD_INVALID = 0xFF
-};
-
-
-/*!\brief Type for the response of MGM commands
- *
- * TODO fully define all responses as defined in IEC 61499 inc. numbers.
- */
-enum EMGMResponse {e_RDY, e_BAD_PARAMS, e_LOCAL_TERMINATION, e_SYSTEM_TERMINATION, e_NOT_READY, e_UNSUPPORTED_CMD,
- e_UNSUPPORTED_TYPE, e_NO_SUCH_OBJECT, e_INVALID_OBJECT, e_INVALID_OPERATION, e_INVALID_STATE,
- e_OVERFLOW, e_INVALID_DST};
-
-/*@}*/
-#endif /*MGMCMD_H_*/
+/*******************************************************************************
+ * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Gunnar Grabmaier, Thomas Strasser, Gerhard Ebenhofer,
+ * Martin Melik Merkumians, Ingo Hegny,
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
+#ifndef _MGMCMD_H_
+#define _MGMCMD_H_
+
+/** \ingroup CORE \defgroup MGMCommands Management Commands Internal Representation
+ * \brief In this section the FORTE representation of the management commands is described.
+ */
+/*@{*/
+
+/*!\brief Type for the management command (e.g. create, delete ...)
+ *
+ * The constants for the management commands are selected in the following way:
+ * - the lower 4 bit are the same as the corresponding command defined by the standard (see 61499-1: Table 6, p47).
+ * - the higher 4 bits are counted as they are listed in the Table 8, p48 in 61499-1.
+ *
+ */
+enum EMGMCommandType{
+ cg_nMGM_CMD_Create_Group = 0x00, //!< Identifier for all create commands
+
+ cg_nMGM_CMD_Create_DataType = 0x10, //!< Create a new data type definition in the FORTE.
+ cg_nMGM_CMD_Create_FBType = 0x20, //!< Create a new FB type definition in the FORTE.
+ cg_nMGM_CMD_Create_AdapterType = 0x50, //!< Create a new Adapter type definition in the FORTE.
+
+ /*! \brief Create a new FB or resource instance.
+ *
+ * When creating a FB instance the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
+ * - m_sFistParam = FB Instance name
+ * - m_sSecondParam = FB Type
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Create_FBInstance = 0x30,
+
+ /*! \brief Create a new connection (can be event or data connection).
+ *
+ * When creating a connection the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
+ * - m_sFistParam = source of the connection given by: "fbname.output"
+ * - m_sSecondParam = destination of the connection given by: "fbname.intput"
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Create_Connection = 0x40,
+
+ cg_nMGM_CMD_Delete_Group = 0x01, //!<Identifier for all delete commands
+ cg_nMGM_CMD_Delete_DataType = 0x11,
+ cg_nMGM_CMD_Delete_FBType = 0x21,
+
+ /*! \brief Delete a FB or resource instance.
+ *
+ * When deleting a FB instance the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for deleting within the device or "resname" for creating within a resource
+ * - m_sFistParam = FB Instance name
+ * - m_sSecondParam not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Delete_FBInstance = 0x31,
+
+ /*! \brief Delete a connection (can be event or data connection).
+ *
+ * When deleting a connection the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for deleting within the device or "resname" for deleting within a resource
+ * - m_sFistParam = source of the connection given by: "fbname.output"
+ * - m_sSecondParam = destination of the connection given by: "fbname.intput"
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Delete_Connection = 0x41,
+
+ /*! \brief Delete all FBs or resource instances.
+ *
+ * When deleting a FB instance the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for deleting within the device or "resname" for deleting within a resource
+ * - m_sFistParam not used
+ * - m_sSecondParam not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Delete_AllFBInstances = 0x61,
+
+ /*! \brief start a FB, resource or the device.
+ *
+ * When starting a FB, resource or the device the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for starting within the device or "resname" for starting within a resource
+ * - m_sFirstParam = target to be started can be empty for starting the whole device or resource, or contain a name for the resource or FB to start.
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Start = 0x02,
+
+ /*! \brief stop a FB, resource or the device.
+ *
+ * When stopping a FB, resource or the device the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for stopping within the device or "resname" for stopping within a resource
+ * - m_sFirstParam = target to be stopped can be empty for starting the whole device or resource, or contain a name for the resource or FB to stop.
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Stop = 0x03,
+
+ /*! \brief Read values from FB in- and outputs or from resource inputs
+ *
+ * When reading a parameter value the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
+ * - m_sFistParam = Source qualifier for reading an FB's variable ("fbname.var") variable identifier may be input, output, or internal var
+ * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_Read = 0x04,
+
+ /*! \brief Write value to a given data input or output (FB or Resource)
+ *
+ * When writing a parameter value the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for creating within the device or "resname" for creating within a resource
+ * - m_sFistParam = Destination qualifier for writing on an FB's variable ("fbname.var") variable identifier may be input, output, or internal var
+ * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
+ * - m_sAdditionalParams = the string converted value to be set
+ */
+ cg_nMGM_CMD_Write = 0x05,
+
+ /*! \brief kill a FB, resource or the device.
+ *
+ * When killing a FB, resource or the device the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for killing within the device or "resname" for stopping within a resource
+ * - m_sFistParam = target to be killed can be empty for starting the whole device or resource, or contain a name for the resource or FB to stop.
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Kill = 0x06,
+
+#ifdef FORTE_SUPPORT_QUERY_CMD
+ cg_nMGM_CMD_Query_Group = 0x07, //!< Identifier for all query commands
+
+ /*! \brief query FBs
+ *
+ * The parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" to query within the device or "resname" for fetching within a resource
+ * - m_acFirstParam = CStringDictionary::scm_nInvalidStringId for all FBs or instance name
+ * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId for all FB types or type name
+ * - m_sAdditionalParams the response value of the query
+ */
+ cg_nMGM_CMD_QUERY_FB = 0x17,
+
+ /*! \brief query connections
+ *
+ * The parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" to query within the device or "resname" for fetching within a resource
+ * - m_acFirstParam = CStringDictionary::scm_nInvalidStringId
+ * - m_sSecondParam = CStringDictionary::scm_nInvalidStringId
+ * - m_sAdditionalParams the response value of the query - a list of event and data connections (comma separated list of end points to end points)
+ */
+ cg_nMGM_CMD_QUERY_Connection = 0x27,
+
+ /*! \brief Read the existing fb types.
+ *
+ * When reading the fb types the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
+ * - m_sFistParam = not used
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_QUERY_FBTypes = 0x37,
+
+ /*! \brief Read the existing data types.
+ *
+ * When reading the data types the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
+ * - m_sFistParam = not used
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_QUERY_DTTypes = 0x47,
+
+ /*! \brief Read the existing data types.
+ *
+ * When reading the data types the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for reading within the device or "resname" for reading within a resource
+ * - m_sFirstParam = not used
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_QUERY_AdapterTypes = 0x57,
+
+ /**
+ * currently not implemented
+ */
+ cg_nMGM_CMD_QUERY_TypeVers = 0x67,
+
+ /*! \brief Read the interface of a specific FB type.
+ *
+ * When reading the FB interface the parameters of the SManagementCMD are defined as:
+ * - m_sFirstParam = FB type name
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_QUERY_FBType = 0x77,
+
+ /*! \brief Read the interface of a specific adapter type.
+ *
+ * When reading the adapter interface the parameters of the SManagementCMD are defined as:
+ * - m_sFirstParam = adapter type name
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams the read value is stored here
+ */
+ cg_nMGM_CMD_QUERY_AdapterType = 0x87,
+#endif
+
+ /*! \brief reset a FB, resource or the device.
+ *
+ * When reseting a FB, resource or the device the parameters of the SManagementCMD are defined as:
+ * - m_sDestination = "" for reseting within the device or "resname" for reseting within a resource
+ * - m_sFistParam = target to be reset can be empty for reseting the whole device or resource, or contain a name for the resource or FB to reset.
+ * - m_sSecondParam = not used
+ * - m_sAdditionalParams not used
+ */
+ cg_nMGM_CMD_Reset = 0x08,
+
+
+
+#ifdef FORTE_SUPPORT_MONITORING
+ cg_nMGM_CMD_Monitoring_Group = 0x0A,
+ cg_nMGM_CMD_Monitoring_Add_Watch = 0x1A,
+ cg_nMGM_CMD_Monitoring_Remove_Watch = 0x2A,
+ cg_nMGM_CMD_Monitoring_Read_Watches = 0x3A,
+ cg_nMGM_CMD_Monitoring_Force = 0x5A,
+ cg_nMGM_CMD_Monitoring_ClearForce = 0x6A,
+ cg_nMGM_CMD_Monitoring_Trigger_Event = 0x7A,
+ cg_nMGM_CMD_Monitoring_Reset_Event_Count = 0x8A,
+#endif // FORTE_SUPPORT_MONITORING
+
+
+ /*! \brief invalid command: some of the data could not be parsed
+ */
+ cg_nMGM_CMD_INVALID = 0xFF
+};
+
+
+/*!\brief Type for the response of MGM commands
+ *
+ * TODO fully define all responses as defined in IEC 61499 inc. numbers.
+ */
+enum EMGMResponse {e_RDY, e_BAD_PARAMS, e_LOCAL_TERMINATION, e_SYSTEM_TERMINATION, e_NOT_READY, e_UNSUPPORTED_CMD,
+ e_UNSUPPORTED_TYPE, e_NO_SUCH_OBJECT, e_INVALID_OBJECT, e_INVALID_OPERATION, e_INVALID_STATE,
+ e_OVERFLOW, e_INVALID_DST};
+
+/*@}*/
+#endif /*MGMCMD_H_*/
diff --git a/src/core/mgmcmdstruct.h b/src/core/mgmcmdstruct.h
index c263123..57a3af9 100644
--- a/src/core/mgmcmdstruct.h
+++ b/src/core/mgmcmdstruct.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny, Alois Zoitl
diff --git a/src/core/monitoring.cpp b/src/core/monitoring.cpp
index ac9e406..cdf4bef 100644
--- a/src/core/monitoring.cpp
+++ b/src/core/monitoring.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2018 fortiss GmbH, Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -356,7 +357,7 @@
void CMonitoringHandler::appendDataWatch(CIEC_STRING &paResponse,
SDataWatchEntry &paDataWatchEntry){
- unsigned int bufferSize = paDataWatchEntry.mDataValue.getToStringBufferSize() + getExtraSizeForEscapedChars(paDataWatchEntry.mDataValue);
+ size_t bufferSize = paDataWatchEntry.mDataValue.getToStringBufferSize() + getExtraSizeForEscapedChars(paDataWatchEntry.mDataValue);
appendPortTag(paResponse, paDataWatchEntry.mPortId);
paResponse.append("<Data value=\"");
char* acDataValue = new char [bufferSize]; //TODO try to directly use the response string instead
@@ -366,14 +367,14 @@
case CIEC_ANY::e_STRING:
consumedBytes = static_cast<CIEC_WSTRING&>(paDataWatchEntry.mDataValue).toUTF8(acDataValue, bufferSize, false);
if(bufferSize != paDataWatchEntry.mDataValue.getToStringBufferSize() && 0 < consumedBytes) { //avoid re-running on strings which were already proven not to have any special character
- consumedBytes += forte::core::util::transformNonEscapedToEscapedXMLText(acDataValue);
+ consumedBytes += static_cast<int>(forte::core::util::transformNonEscapedToEscapedXMLText(acDataValue));
}
break;
case CIEC_ANY::e_ARRAY:
case CIEC_ANY::e_STRUCT:
consumedBytes = paDataWatchEntry.mDataValue.toString(acDataValue, bufferSize);
if(bufferSize != paDataWatchEntry.mDataValue.getToStringBufferSize() && 0 < consumedBytes) { //avoid re-running on elements which were already proven not to have any special character
- consumedBytes += forte::core::util::transformNonEscapedToEscapedXMLText(acDataValue);
+ consumedBytes += static_cast<int>(forte::core::util::transformNonEscapedToEscapedXMLText(acDataValue));
}
break;
default:
@@ -418,12 +419,12 @@
case CIEC_ANY::e_WSTRING:
case CIEC_ANY::e_STRING:
for(size_t i = 0; i < paDataValue.size(); i++) {
- retVal += forte::core::util::getExtraSizeForEscapedChars(static_cast<const CIEC_WSTRING*>(paDataValue[i])->getValue()) + 10; //for opening and closing quotes or apos
+ retVal += forte::core::util::getExtraSizeForEscapedChars(static_cast<const CIEC_WSTRING*>(paDataValue[static_cast<TForteUInt16>(i)])->getValue()) + 10; //for opening and closing quotes or apos
}
break;
case CIEC_ANY::e_STRUCT:
for(size_t i = 0; i < paDataValue.size(); i++) {
- retVal += getExtraSizeForEscapedCharsStruct(*static_cast<const CIEC_STRUCT*>(paDataValue[i]));
+ retVal += getExtraSizeForEscapedCharsStruct(*static_cast<const CIEC_STRUCT*>(paDataValue[static_cast<TForteUInt16>(i)]));
}
break;
default:
diff --git a/src/core/monitoring.h b/src/core/monitoring.h
index 0a21262..d35acbc 100644
--- a/src/core/monitoring.h
+++ b/src/core/monitoring.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2015, 2018 fortiss GmbH, Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/resource.cpp b/src/core/resource.cpp
index 0b5d3e3..77bdc1f 100644
--- a/src/core/resource.cpp
+++ b/src/core/resource.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2005 - 2018 ACIN, Profactor GmbH, fortiss GmbH,
* Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Thomas Strasser,
@@ -28,36 +29,28 @@
#include "lua/luaadaptertypeentry.h"
#endif
-CResource::CResource(CResource* pa_poDevice, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData,
- TForteByte *pa_acFBVarsData) :
- CFunctionBlock(pa_poDevice, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData),
- forte::core::CFBContainer(CStringDictionary::scm_nInvalidStringId, 0), // the fbcontainer of resources does not have a seperate name as it is stored in the resource
- mResourceEventExecution(CEventChainExecutionThread::createEcet()),
- mResIf2InConnections(0)
+CResource::CResource(CResource* pa_poDevice, const SFBInterfaceSpec *pa_pstInterfaceSpec, const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
+ CFunctionBlock(pa_poDevice, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData), forte::core::CFBContainer(CStringDictionary::scm_nInvalidStringId, 0), // the fbcontainer of resources does not have a seperate name as it is stored in the resource
+ mResourceEventExecution(CEventChainExecutionThread::createEcet()), mResIf2InConnections(0)
#ifdef FORTE_SUPPORT_MONITORING
- , mMonitoringHandler(*this)
+, mMonitoringHandler(*this)
#endif
{
#ifdef FORTE_DYNAMIC_TYPE_LOAD
- luaEngine = new CLuaEngine();
+ luaEngine = new CLuaEngine();
#endif
initializeResIf2InConnections();
}
-CResource::CResource(const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData,
- TForteByte *pa_acFBVarsData) :
- CFunctionBlock(0, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData),
- forte::core::CFBContainer(CStringDictionary::scm_nInvalidStringId, 0), // the fbcontainer of resources does not have a seperate name as it is stored in the resource
- mResourceEventExecution(0),
- mResIf2InConnections(0)
+CResource::CResource(const SFBInterfaceSpec *pa_pstInterfaceSpec, const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
+ CFunctionBlock(0, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData), forte::core::CFBContainer(CStringDictionary::scm_nInvalidStringId, 0), // the fbcontainer of resources does not have a seperate name as it is stored in the resource
+ mResourceEventExecution(0), mResIf2InConnections(0)
#ifdef FORTE_SUPPORT_MONITORING
- , mMonitoringHandler(*this)
+, mMonitoringHandler(*this)
#endif
{
#ifdef FORTE_DYNAMIC_TYPE_LOAD
- luaEngine = new CLuaEngine();
+ luaEngine = new CLuaEngine();
#endif
initializeResIf2InConnections();
}
@@ -112,22 +105,28 @@
retVal = writeValue(paCommand.mFirstParam, paCommand.mAdditionalParams);
break;
case cg_nMGM_CMD_Start:
- case cg_nMGM_CMD_Stop:
- case cg_nMGM_CMD_Kill:
- case cg_nMGM_CMD_Reset:
+ case cg_nMGM_CMD_Stop:
+ case cg_nMGM_CMD_Kill:
+ case cg_nMGM_CMD_Reset:
retVal = handleExecutionStateCmd(paCommand.mCMD, paCommand.mFirstParam);
break;
#ifdef FORTE_SUPPORT_QUERY_CMD
- case cg_nMGM_CMD_QUERY_FBTypes:
+ case cg_nMGM_CMD_QUERY_FBTypes:
retVal = queryAllFBTypes(paCommand.mAdditionalParams);
break;
- case cg_nMGM_CMD_QUERY_AdapterTypes:
+ case cg_nMGM_CMD_QUERY_AdapterTypes:
retVal = queryAllAdapterTypes(paCommand.mAdditionalParams);
break;
- case cg_nMGM_CMD_QUERY_FB:
+ case cg_nMGM_CMD_QUERY_FB:
retVal = queryFBs(paCommand.mAdditionalParams);
break;
- case cg_nMGM_CMD_QUERY_Connection:
+ case cg_nMGM_CMD_QUERY_FBType:
+ retVal = createFBTypeResponseMessage(paCommand.mFirstParam.front(), paCommand.mAdditionalParams);
+ break;
+ case cg_nMGM_CMD_QUERY_AdapterType:
+ retVal = createAdapterTypeResponseMessage(paCommand.mFirstParam.front(), paCommand.mAdditionalParams);
+ break;
+ case cg_nMGM_CMD_QUERY_Connection:
retVal = queryConnections(paCommand.mAdditionalParams);
break;
#endif //FORTE_SUPPORT_QUERY_CMD
@@ -148,9 +147,9 @@
if(e_RDY == retVal){
retVal = changeContainedFBsExecutionState(pa_unCommand);
if(e_RDY == retVal){
- if(cg_nMGM_CMD_Start == pa_unCommand && 0 != m_pstInterfaceSpec) { //on start, sample inputs
- for(int i = 0; i < m_pstInterfaceSpec->m_nNumDIs; ++i) {
- if(0 != m_apoDIConns[i]) {
+ if(cg_nMGM_CMD_Start == pa_unCommand && 0 != m_pstInterfaceSpec){ //on start, sample inputs
+ for(int i = 0; i < m_pstInterfaceSpec->m_nNumDIs; ++i){
+ if(0 != m_apoDIConns[i]){
m_apoDIConns[i]->readData(getDI(i));
}
}
@@ -164,8 +163,7 @@
return retVal;
}
-EMGMResponse CResource::handleExecutionStateCmd(EMGMCommandType paCMD,
- forte::core::TNameIdentifier &paTarget){
+EMGMResponse CResource::handleExecutionStateCmd(EMGMCommandType paCMD, forte::core::TNameIdentifier &paTarget){
EMGMResponse retVal = e_NO_SUCH_OBJECT;
CFunctionBlock *fb = this;
@@ -184,9 +182,7 @@
return createConnection(paCommand.mFirstParam, paCommand.mSecondParam);
}
-
-EMGMResponse CResource::createConnection(forte::core::TNameIdentifier &paSrcNameList,
- forte::core::TNameIdentifier &paDstNameList){
+EMGMResponse CResource::createConnection(forte::core::TNameIdentifier &paSrcNameList, forte::core::TNameIdentifier &paDstNameList){
EMGMResponse retVal = e_NO_SUCH_OBJECT;
CConnection *con = getConnection(paSrcNameList);
@@ -203,8 +199,7 @@
return retVal;
}
-EMGMResponse CResource::deleteConnection(forte::core::TNameIdentifier &paSrcNameList,
- forte::core::TNameIdentifier &paDstNameList){
+EMGMResponse CResource::deleteConnection(forte::core::TNameIdentifier &paSrcNameList, forte::core::TNameIdentifier &paDstNameList){
EMGMResponse retVal = e_NO_SUCH_OBJECT;
CConnection *con = getConnection(paSrcNameList);
@@ -221,8 +216,7 @@
return retVal;
}
-EMGMResponse CResource::writeValue(forte::core::TNameIdentifier &paNameList,
- const CIEC_STRING & paValue, bool paForce){
+EMGMResponse CResource::writeValue(forte::core::TNameIdentifier &paNameList, const CIEC_STRING & paValue, bool paForce){
EMGMResponse retVal = e_NO_SUCH_OBJECT;
CStringDictionary::TStringId portName = paNameList.back();
@@ -231,8 +225,8 @@
CFunctionBlock *fb = this;
if(paNameList.size() >= 1){
- //this is not an identifier for the resource interface
- fb = getContainedFB(runner); // the last entry is the input name therefore reduce list here by one
+ //this is not an identifier for the resource interface
+ fb = getContainedFB(runner); // the last entry is the input name therefore reduce list here by one
}
if((0 != fb) && (runner.isLastEntry())){
@@ -251,7 +245,8 @@
}
}
retVal = e_RDY;
- } else {
+ }
+ else{
retVal = e_BAD_PARAMS;
}
}
@@ -261,10 +256,23 @@
EMGMResponse CResource::readValue(forte::core::TNameIdentifier &paNameList, CIEC_STRING & paValue){
EMGMResponse retVal = e_NO_SUCH_OBJECT;
-
CIEC_ANY *var = getVariable(paNameList);
if(0 != var){
- int nUsedChars = var->toString(paValue.getValue(), paValue.getCapacity());
+ int nUsedChars = -1;
+ switch (var->getDataTypeID()){
+ case CIEC_ANY::e_WSTRING:
+ case CIEC_ANY::e_STRING:{
+ size_t bufferSize = var->getToStringBufferSize() + forte::core::util::getExtraSizeForEscapedChars(static_cast<CIEC_WSTRING&>(*var).getValue());
+ nUsedChars = static_cast<CIEC_WSTRING&>(*var).toUTF8(paValue.getValue(), bufferSize, false);
+ if(bufferSize != var->getToStringBufferSize() && 0 < nUsedChars) { //avoid re-running on strings which were already proven not to have any special character
+ nUsedChars += static_cast<int>(forte::core::util::transformNonEscapedToEscapedXMLText(paValue.getValue()));
+ }
+ break;
+ }
+ default:
+ nUsedChars = var->toString(paValue.getValue(), paValue.getCapacity());
+ break;
+ }
if(-1 != nUsedChars){
paValue.assign(paValue.getValue(), static_cast<TForteUInt16>(nUsedChars));
@@ -277,6 +285,8 @@
return retVal;
}
+#ifdef FORTE_SUPPORT_QUERY_CMD
+
EMGMResponse CResource::queryAllFBTypes(CIEC_STRING & paValue){
EMGMResponse retVal = e_UNSUPPORTED_TYPE;
@@ -293,132 +303,6 @@
return retVal;
}
-EMGMResponse CResource::queryFBs(CIEC_STRING & paValue){
- for (TFunctionBlockList::Iterator itRunner(getFBList().begin()); itRunner != getFBList().end(); ++itRunner) {
- if(itRunner != getFBList().begin()){
- paValue.append("\n");
- }
- paValue.append("<FB name=\"");
- paValue.append((static_cast<CFunctionBlock *>(*itRunner))->getInstanceName());
- paValue.append("\" type=\"");
- paValue.append(CStringDictionary::getInstance().get((static_cast<CFunctionBlock *>(*itRunner))->getFBTypeId()));
- paValue.append("\"/>");
- }
- return e_RDY;
-}
-
-void CResource::createEOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
- const SFBInterfaceSpec *const spec = paFb.getFBInterfaceSpec();
- if(spec->m_nNumEOs > 0){
- for(size_t i = 0; spec->m_aunEONames[i] != spec->m_aunEONames[spec->m_nNumEOs]; i++){
- const CEventConnection* eConn = paFb.getEOConnection(spec->m_aunEONames[i]);
- for(CSinglyLinkedList<SConnectionPoint>::Iterator itRunnerDst(eConn->getDestinationList().begin()); itRunnerDst != eConn->getDestinationList().end(); ++itRunnerDst){
- if(itRunnerDst != eConn->getDestinationList().begin()){
- paReqResult.append("\n");
- }
- createConnectionResponseMessage(spec->m_aunEONames[i],
- itRunnerDst->mFB->getFBInterfaceSpec()->m_aunEINames[itRunnerDst->mPortId],
- *itRunnerDst->mFB, paFb, paReqResult);
- }
- }
- }
-}
-
-void CResource::createDOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
- const SFBInterfaceSpec *const spec = paFb.getFBInterfaceSpec();
- if(spec->m_nNumDOs > 0){
- for(size_t i = 0; spec->m_aunDONames[i] != spec->m_aunDONames[spec->m_nNumDOs]; i++){
- const CDataConnection *const dConn = paFb.getDOConnection(spec->m_aunDONames[i]);
- for(CSinglyLinkedList<SConnectionPoint>::Iterator itRunnerDst(dConn->getDestinationList().begin()); itRunnerDst != dConn->getDestinationList().end(); ++itRunnerDst){
- if(itRunnerDst != dConn->getDestinationList().begin()){
- paReqResult.append("\n");
- }
- createConnectionResponseMessage(spec->m_aunDONames[i],
- itRunnerDst->mFB->getFBInterfaceSpec()->m_aunDINames[itRunnerDst->mPortId],
- *itRunnerDst->mFB, paFb, paReqResult);
- }
- }
- }
-}
-
-void CResource::createAOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
- const SFBInterfaceSpec *const spec = paFb.getFBInterfaceSpec();
- if(spec->m_nNumAdapters > 0){
- for(size_t i = 0; i < spec->m_nNumAdapters; i++){
- const CAdapter *const adapter = paFb.getAdapter(spec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID);
- const CAdapterConnection* aConn = adapter->getAdapterConnection();
- if(spec->m_pstAdapterInstanceDefinition[i].m_bIsPlug && 0 != aConn){
- if(i != 0){
- paReqResult.append("\n");
- }
- CSinglyLinkedList<SConnectionPoint>::Iterator itRunnerDst(aConn->getDestinationList().begin());
- createConnectionResponseMessage(spec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID,
- itRunnerDst->mFB->getFBInterfaceSpec()->m_pstAdapterInstanceDefinition[itRunnerDst->mPortId].m_nAdapterNameID,
- *itRunnerDst->mFB, paFb, paReqResult);
- }
- }
- }
-}
-
-void CResource::createConnectionResponseMessage(const CStringDictionary::TStringId srcId, const CStringDictionary::TStringId dstId,
- const CFunctionBlock& paDstFb, const CFunctionBlock& paSrcFb, CIEC_STRING& paReqResult){
- paReqResult.append("<Connection source=\"");
- paReqResult.append(paSrcFb.getInstanceName());
- paReqResult.append(".");
- paReqResult.append(CStringDictionary::getInstance().get(srcId));
- paReqResult.append("\" destination=\"");
- paReqResult.append(paDstFb.getInstanceName());
- paReqResult.append(".");
- paReqResult.append(CStringDictionary::getInstance().get(dstId));
- paReqResult.append("\"/>");
-}
-
-EMGMResponse CResource::queryConnections(CIEC_STRING & paReqResult){
- EMGMResponse retVal = e_UNSUPPORTED_TYPE;
- //TODO check container list to support subapps issue[538333]
- for (TFunctionBlockList::Iterator itRunner(getFBList().begin()); itRunner != getFBList().end(); ++itRunner) {
- createEOConnectionResponse(**itRunner, paReqResult);
- createDOConnectionResponse(**itRunner, paReqResult);
- createAOConnectionResponse(**itRunner, paReqResult);
- }
- retVal = e_RDY;
- return retVal;
-}
-
-#ifdef FORTE_DYNAMIC_TYPE_LOAD
-EMGMResponse CResource::createFBTypeFromLua(CStringDictionary::TStringId typeNameId,
- CIEC_STRING& paLuaScriptAsString){
- EMGMResponse retVal = e_UNSUPPORTED_TYPE;
- if(NULL != strstr(paLuaScriptAsString.getValue(), "internalFBs")){// CFBType
- if(CLuaCFBTypeEntry::createLuaFBTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
- retVal = e_RDY;
- }else{
- retVal = e_INVALID_OPERATION;
- }
- }else{// BFBType
- if(CLuaBFBTypeEntry::createLuaFBTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
- retVal = e_RDY;
- }else{
- retVal = e_INVALID_OPERATION;
- }
- }
- paLuaScriptAsString.clear();
- return retVal;
-}
-
-EMGMResponse CResource::createAdapterTypeFromLua(CStringDictionary::TStringId typeNameId,
- CIEC_STRING& paLuaScriptAsString){
- EMGMResponse retVal = e_UNSUPPORTED_TYPE;
- if(CLuaAdapterTypeEntry::createLuaAdapterTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
- retVal = e_RDY;
- }else{
- retVal = e_INVALID_OPERATION;
- }
- paLuaScriptAsString.clear();
- return retVal;
-}
-#endif //FORTE_DYNAMIC_TYPE_LOAD
-
EMGMResponse CResource::queryAllAdapterTypes(CIEC_STRING & paValue){
EMGMResponse retVal = e_UNSUPPORTED_TYPE;
@@ -435,6 +319,258 @@
return retVal;
}
+EMGMResponse CResource::queryFBs(CIEC_STRING & paValue){
+ for(TFunctionBlockList::Iterator itRunner(getFBList().begin()); itRunner != getFBList().end(); ++itRunner){
+ if(itRunner != getFBList().begin()){
+ paValue.append("\n");
+ }
+ paValue.append("<FB name=\"");
+ paValue.append((static_cast<CFunctionBlock *>(*itRunner))->getInstanceName());
+ paValue.append("\" type=\"");
+ paValue.append(CStringDictionary::getInstance().get((static_cast<CFunctionBlock *>(*itRunner))->getFBTypeId()));
+ paValue.append("\"/>");
+ }
+ return e_RDY;
+}
+
+EMGMResponse CResource::queryConnections(CIEC_STRING & paReqResult){
+ EMGMResponse retVal = e_UNSUPPORTED_TYPE;
+ //TODO check container list to support subapps issue[538333]
+ for(TFunctionBlockList::Iterator itRunner(getFBList().begin()); itRunner != getFBList().end(); ++itRunner){
+ createEOConnectionResponse(**itRunner, paReqResult);
+ createDOConnectionResponse(**itRunner, paReqResult);
+ createAOConnectionResponse(**itRunner, paReqResult);
+ }
+ retVal = e_RDY;
+ return retVal;
+}
+
+void CResource::createEOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
+ const SFBInterfaceSpec * const spec = paFb.getFBInterfaceSpec();
+ if(spec->m_nNumEOs > 0){
+ for(size_t i = 0; spec->m_aunEONames[i] != spec->m_aunEONames[spec->m_nNumEOs]; i++){
+ const CEventConnection* eConn = paFb.getEOConnection(spec->m_aunEONames[i]);
+ for(CSinglyLinkedList<CConnectionPoint>::Iterator itRunnerDst(eConn->getDestinationList().begin()); itRunnerDst != eConn->getDestinationList().end();
+ ++itRunnerDst){
+ if(itRunnerDst != eConn->getDestinationList().begin()){
+ paReqResult.append("\n");
+ }
+ createConnectionResponseMessage(spec->m_aunEONames[i], itRunnerDst->mFB->getFBInterfaceSpec()->m_aunEINames[itRunnerDst->mPortId], *itRunnerDst->mFB,
+ paFb, paReqResult);
+ }
+ }
+ }
+}
+
+void CResource::createDOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
+ const SFBInterfaceSpec * const spec = paFb.getFBInterfaceSpec();
+ if(spec->m_nNumDOs > 0){
+ for(size_t i = 0; spec->m_aunDONames[i] != spec->m_aunDONames[spec->m_nNumDOs]; i++){
+ const CDataConnection * const dConn = paFb.getDOConnection(spec->m_aunDONames[i]);
+ for(CSinglyLinkedList<CConnectionPoint>::Iterator itRunnerDst(dConn->getDestinationList().begin()); itRunnerDst != dConn->getDestinationList().end();
+ ++itRunnerDst){
+ if(itRunnerDst != dConn->getDestinationList().begin()){
+ paReqResult.append("\n");
+ }
+ createConnectionResponseMessage(spec->m_aunDONames[i], itRunnerDst->mFB->getFBInterfaceSpec()->m_aunDINames[itRunnerDst->mPortId], *itRunnerDst->mFB,
+ paFb, paReqResult);
+ }
+ }
+ }
+}
+
+void CResource::createAOConnectionResponse(const CFunctionBlock& paFb, CIEC_STRING& paReqResult){
+ const SFBInterfaceSpec * const spec = paFb.getFBInterfaceSpec();
+ if(spec->m_nNumAdapters > 0){
+ for(size_t i = 0; i < spec->m_nNumAdapters; i++){
+ const CAdapter * const adapter = paFb.getAdapter(spec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID);
+ const CAdapterConnection* aConn = adapter->getAdapterConnection();
+ if(spec->m_pstAdapterInstanceDefinition[i].m_bIsPlug && 0 != aConn){
+ if(i != 0){
+ paReqResult.append("\n");
+ }
+ if(!aConn->getDestinationList().isEmpty()){
+ CSinglyLinkedList<CConnectionPoint>::Iterator itRunnerDst(aConn->getDestinationList().begin());
+ createConnectionResponseMessage(spec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID,
+ itRunnerDst->mFB->getFBInterfaceSpec()->m_pstAdapterInstanceDefinition[itRunnerDst->mPortId].m_nAdapterNameID, *itRunnerDst->mFB, paFb,
+ paReqResult);
+ }
+ }
+ }
+ }
+}
+
+void CResource::createConnectionResponseMessage(const CStringDictionary::TStringId srcId, const CStringDictionary::TStringId dstId,
+ const CFunctionBlock& paDstFb, const CFunctionBlock& paSrcFb, CIEC_STRING& paReqResult){
+ paReqResult.append("<Connection Source=\"");
+ paReqResult.append(paSrcFb.getInstanceName());
+ paReqResult.append(".");
+ paReqResult.append(CStringDictionary::getInstance().get(srcId));
+ paReqResult.append("\" Destination=\"");
+ paReqResult.append(paDstFb.getInstanceName());
+ paReqResult.append(".");
+ paReqResult.append(CStringDictionary::getInstance().get(dstId));
+ paReqResult.append("\"/>");
+}
+
+EMGMResponse CResource::createFBTypeResponseMessage(const CStringDictionary::TStringId paValue, CIEC_STRING & paReqResult){
+ EMGMResponse retVal = e_UNSUPPORTED_TYPE;
+ CTypeLib::CFBTypeEntry* fbType = static_cast<CTypeLib::CFBTypeEntry *>(CTypeLib::findType(paValue, CTypeLib::getFBLibStart()));
+ if(0 != fbType){
+ retVal = createXTypeResponseMessage(fbType, paValue, retVal, paReqResult);
+ }
+ return retVal;
+}
+
+EMGMResponse CResource::createAdapterTypeResponseMessage(const CStringDictionary::TStringId paValue, CIEC_STRING & paReqResult){
+ EMGMResponse retVal = e_UNSUPPORTED_TYPE;
+ CTypeLib::CAdapterTypeEntry* adapterType = static_cast<CTypeLib::CAdapterTypeEntry *>(CTypeLib::findType(paValue, CTypeLib::getAdapterLibStart()));
+ if(0 != adapterType){
+ retVal = createXTypeResponseMessage(adapterType, paValue, retVal, paReqResult);
+ }
+ return retVal;
+}
+
+EMGMResponse CResource::createXTypeResponseMessage(const CTypeLib::CSpecTypeEntry* paTypeEntry, const CStringDictionary::TStringId paValue, EMGMResponse retVal, CIEC_STRING& paReqResult){
+ const SFBInterfaceSpec* paInterfaceSpec = paTypeEntry->getInterfaceSpec();
+ if(0 != paInterfaceSpec){
+ paReqResult.append("Name=\"");
+ paReqResult.append(CStringDictionary::getInstance().get(paValue));
+ paReqResult.append("\">\n <InterfaceList>\n ");
+ createEventInterfaceResponseMessage(paInterfaceSpec, paReqResult);
+ createDataInterfaceResponseMessage(paInterfaceSpec, paReqResult);
+ createAdapterInterfaceResponseMessage(paInterfaceSpec, paReqResult);
+ paReqResult.append("</InterfaceList>\n");
+ retVal = e_RDY;
+ }
+ return retVal;
+}
+
+void CResource::createEventInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult){
+ if(paInterfaceSpec->m_nNumEIs > 0){
+ paReqResult.append("<EventInputs>\n ");
+ createInterfaceResponseMessages(paReqResult, "Event", paInterfaceSpec->m_aunEINames, NULL, paInterfaceSpec->m_nNumEIs, paInterfaceSpec->m_anEIWith, paInterfaceSpec->m_anEIWithIndexes, paInterfaceSpec->m_aunDINames);
+ paReqResult.append("</EventInputs>\n ");
+ }
+ if(paInterfaceSpec->m_nNumEOs > 0){
+ paReqResult.append("<EventOutputs>\n ");
+ createInterfaceResponseMessages(paReqResult, "Event", paInterfaceSpec->m_aunEONames, NULL, paInterfaceSpec->m_nNumEOs, paInterfaceSpec->m_anEOWith, paInterfaceSpec->m_anEOWithIndexes, paInterfaceSpec->m_aunDONames);
+ paReqResult.append("</EventOutputs>\n ");
+ }
+}
+
+void CResource::createDataInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult){
+ if(paInterfaceSpec->m_nNumDIs > 0){
+ paReqResult.append("<InputVars>\n ");
+ createInterfaceResponseMessages(paReqResult, "VarDeclaration", paInterfaceSpec->m_aunDINames, paInterfaceSpec->m_aunDIDataTypeNames, paInterfaceSpec->m_nNumDIs);
+ paReqResult.append("</InputVars>\n ");
+ }
+ if(paInterfaceSpec->m_nNumDOs > 0){
+ paReqResult.append("<OutputVars>\n ");
+ createInterfaceResponseMessages(paReqResult, "VarDeclaration", paInterfaceSpec->m_aunDONames, paInterfaceSpec->m_aunDODataTypeNames, paInterfaceSpec->m_nNumDOs);
+ paReqResult.append("</OutputVars>\n ");
+ }
+}
+
+void CResource::createAdapterInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult){
+ if(paInterfaceSpec->m_nNumAdapters > 0){
+ CIEC_STRING sockets = "";
+ CIEC_STRING plugs = "";
+ for(int i = 0; i < paInterfaceSpec->m_nNumAdapters; i++){
+ if(paInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_bIsPlug){
+ createInterfaceResponseMessage(plugs, "AdapterDeclaration", CStringDictionary::getInstance().get(paInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID), CStringDictionary::getInstance().get(paInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterTypeNameID));
+ }
+ else{
+ createInterfaceResponseMessage(sockets, "AdapterDeclaration", CStringDictionary::getInstance().get(paInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterNameID), CStringDictionary::getInstance().get(paInterfaceSpec->m_pstAdapterInstanceDefinition[i].m_nAdapterTypeNameID));
+ }
+ }
+ if(plugs != ""){
+ paReqResult.append("<Plugs>\n ");
+ paReqResult.append(plugs.getValue());
+ paReqResult.append("</Plugs>\n ");
+ }
+ if(sockets != ""){
+ paReqResult.append("<Sockets>\n ");
+ paReqResult.append(sockets.getValue());
+ paReqResult.append("</Sockets>\n ");
+ }
+ }
+}
+
+void CResource::createInterfaceResponseMessages(CIEC_STRING &paReqResult, const char *pa_pcType,
+ const CStringDictionary::TStringId* paNameList, const CStringDictionary::TStringId* paTypeList,
+ const int pa_nNumberOfElements, const TDataIOID* paEWith, const TForteInt16* paEWithIndexes, const CStringDictionary::TStringId* paDNameList){
+ for(int nIndex = 0; nIndex < pa_nNumberOfElements; nIndex++){
+ if(NULL != paTypeList){
+ createInterfaceResponseMessage(paReqResult, pa_pcType, CStringDictionary::getInstance().get(paNameList[nIndex]), CStringDictionary::getInstance().get(paTypeList[nIndex]));
+ }
+ else{
+ createInterfaceResponseMessage(paReqResult, pa_pcType, CStringDictionary::getInstance().get(paNameList[nIndex]), "Event", paEWith, paEWithIndexes, nIndex, paDNameList);
+ }
+ }
+}
+
+void CResource::createInterfaceResponseMessage(CIEC_STRING & paReqResult, const char* pa_pcType,
+ const CIEC_STRING &paName, const CIEC_STRING &paType, const TDataIOID* paEWith, const TForteInt16* paEWithIndexes, const int pa_nIndex, const CStringDictionary::TStringId* paENameList){
+ paReqResult.append("<");
+ paReqResult.append(pa_pcType);
+ paReqResult.append(" Name=\"");
+ paReqResult.append(paName.getValue());
+ paReqResult.append("\" Type=\"");
+ paReqResult.append(paType.getValue());
+ if(0 != paEWithIndexes && -1 != paEWithIndexes[pa_nIndex]){
+ paReqResult.append("\">\n ");
+ for(int nRunIndex = paEWithIndexes[pa_nIndex]; scmWithListDelimiter != paEWith[nRunIndex]; nRunIndex++){
+ paReqResult.append("<With Var=\"");
+ paReqResult.append(CStringDictionary::getInstance().get(paENameList[paEWith[nRunIndex]]));
+ paReqResult.append("\"/>\n ");
+ }
+ paReqResult.append("</Event>\n ");
+ }
+ else{
+ paReqResult.append("\"/>\n");
+ }
+}
+#endif //FORTE_SUPPORT_QUERY_CMD
+
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+EMGMResponse CResource::createFBTypeFromLua(CStringDictionary::TStringId typeNameId,
+ CIEC_STRING& paLuaScriptAsString){
+ EMGMResponse retVal = e_UNSUPPORTED_TYPE;
+ if(NULL != strstr(paLuaScriptAsString.getValue(), "internalFBs")){ // CFBType
+ if(CLuaCFBTypeEntry::createLuaFBTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
+ retVal = e_RDY;
+ }
+ else{
+ retVal = e_INVALID_OPERATION;
+ }
+ }
+ else{ // BFBType
+ if(CLuaBFBTypeEntry::createLuaFBTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
+ retVal = e_RDY;
+ }
+ else{
+ retVal = e_INVALID_OPERATION;
+ }
+ }
+ paLuaScriptAsString.clear();
+ return retVal;
+}
+
+EMGMResponse CResource::createAdapterTypeFromLua(CStringDictionary::TStringId typeNameId,
+ CIEC_STRING& paLuaScriptAsString){
+ EMGMResponse retVal = e_UNSUPPORTED_TYPE;
+ if(CLuaAdapterTypeEntry::createLuaAdapterTypeEntry(typeNameId, paLuaScriptAsString) != NULL){
+ retVal = e_RDY;
+ }else{
+ retVal = e_INVALID_OPERATION;
+ }
+ paLuaScriptAsString.clear();
+ return retVal;
+}
+
+#endif //FORTE_DYNAMIC_TYPE_LOAD
+
CIEC_ANY *CResource::getVariable(forte::core::TNameIdentifier &paNameList){
CStringDictionary::TStringId portName = paNameList.back();
paNameList.popBack();
diff --git a/src/core/resource.h b/src/core/resource.h
index 7bda144..f84e321 100644
--- a/src/core/resource.h
+++ b/src/core/resource.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2018 ACIN, Profactor GmbH, fortiss GmbH, Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Thomas Strasser, Gerhard Ebenhofer, Ingo Hegny,
@@ -151,6 +152,7 @@
*/
EMGMResponse readValue(forte::core::TNameIdentifier &paNameList, CIEC_STRING & paValue);
+#ifdef FORTE_SUPPORT_QUERY_CMD
/*!\brief Read the existing fb types.
*
* @return response of the command execution as defined in IEC 61499
@@ -163,7 +165,6 @@
*/
EMGMResponse queryAllAdapterTypes(CIEC_STRING & paValue);
-
/*!\brief Retrieve the list of FB instances
*
* @param paValue the result of the query
@@ -178,6 +179,20 @@
void createConnectionResponseMessage(const CStringDictionary::TStringId srcId, const CStringDictionary::TStringId dstId, const CFunctionBlock& paDstFb,
const CFunctionBlock& paFb, CIEC_STRING& paValue);
+ EMGMResponse createFBTypeResponseMessage(const CStringDictionary::TStringId paValue, CIEC_STRING & paReqResult);
+ EMGMResponse createAdapterTypeResponseMessage(const CStringDictionary::TStringId paValue, CIEC_STRING & paReqResult);
+ EMGMResponse createXTypeResponseMessage(const CTypeLib::CSpecTypeEntry* paInterfaceSpec, const CStringDictionary::TStringId paValue, EMGMResponse retVal, CIEC_STRING& paReqResult);
+ void createEventInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult);
+ void createDataInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult);
+ void createAdapterInterfaceResponseMessage(const SFBInterfaceSpec* paInterfaceSpec, CIEC_STRING& paReqResult);
+ void createInterfaceResponseMessages(CIEC_STRING& paReqResult, const char *paType, const CStringDictionary::TStringId* paNameList,
+ const CStringDictionary::TStringId* paTypeList, const int pa_nNumberOfElements = 0, const TDataIOID* paEWith = 0, const TForteInt16* paEWithIndexes = 0,
+ const CStringDictionary::TStringId* paDNameList = 0);
+ void createInterfaceResponseMessage(CIEC_STRING& paReqResult, const char* pa_pcType, const CIEC_STRING &paName, const CIEC_STRING &paType,
+ const TDataIOID* paEWith = 0, const TForteInt16* paEWithIndexes = 0, const int pa_nIndex = 0, const CStringDictionary::TStringId* paENameList = 0);
+
+#endif //FORTE_SUPPORT_QUERY_CMD
+
#ifdef FORTE_DYNAMIC_TYPE_LOAD
/*!\brief create
*
diff --git a/src/core/simplefb.cpp b/src/core/simplefb.cpp
index 8632061..c6bf04a 100644
--- a/src/core/simplefb.cpp
+++ b/src/core/simplefb.cpp
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#include "simplefb.h"
diff --git a/src/core/simplefb.h b/src/core/simplefb.h
index c32a600..517ab01 100644
--- a/src/core/simplefb.h
+++ b/src/core/simplefb.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Martin Melik Merkumians
- * - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef SRC_CORE_SIMPLEFB_H_
#define SRC_CORE_SIMPLEFB_H_
diff --git a/src/core/stringdict.cpp b/src/core/stringdict.cpp
index 4882172..c471c19 100644
--- a/src/core/stringdict.cpp
+++ b/src/core/stringdict.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Stanislav Meduna, Alois Zoitl, Martin Melik Merkumians
@@ -17,10 +18,10 @@
#include <stringlist.h>
#include <string.h>
#include <stdlib.h>
+#include "devlog.h"
DEFINE_SINGLETON(CStringDictionary)
-// ctor
CStringDictionary::CStringDictionary(){
#ifdef FORTE_STRING_DICT_FIXED_MEMORY
m_paStringBufAddr = scm_acConstStringBuf;
@@ -88,12 +89,14 @@
// get a string (0 if not found)
const char *CStringDictionary::get(TStringId pa_nId){
- if(pa_nId >= m_nNextString)
+ if(pa_nId >= m_nNextString) {
return 0;
+ }
const char *adr = getStringAddress(pa_nId);
- if(pa_nId > 0 && adr[-1] != '\0')
+ if(pa_nId > 0 && adr[-1] != '\0') {
return 0;
+ }
return adr;
}
@@ -135,7 +138,7 @@
}
}
else{
- //printf("string war länge null\n");
+ DEVLOG_WARNING("[CStringDictionary::insert] String to insert was empty\n");
}
}
return nRetVal;
@@ -144,8 +147,9 @@
// Find an exact match or place to be the new index
CStringDictionary::TStringId CStringDictionary::findEntry(const char *pa_sStr, unsigned int &pa_rnIdx) const{
pa_rnIdx = 0;
- if(m_nNrOfStrings == 0)
+ if(m_nNrOfStrings == 0) {
return scm_nInvalidStringId;
+ }
int r = 0;
@@ -160,14 +164,16 @@
return m_pnStringIdBufAddr[pa_rnIdx];
}
- if(r > 0)
+ if(r > 0) {
low = pa_rnIdx + 1;
- else
+ } else {
high = pa_rnIdx;
+ }
}
- if(r > 0)
+ if(r > 0) {
pa_rnIdx++;
+ }
return scm_nInvalidStringId;
}
@@ -219,8 +225,9 @@
p[pa_nLen] = '\0';
m_nNextString += pa_nLen + 1;
- if(pa_nIdx < m_nNrOfStrings)
+ if(pa_nIdx < m_nNrOfStrings) {
memmove(m_pnStringIdBufAddr + pa_nIdx + 1, m_pnStringIdBufAddr + pa_nIdx, (m_nNrOfStrings - pa_nIdx) * sizeof(TStringId));
+ }
m_pnStringIdBufAddr[pa_nIdx] = id;
m_nNrOfStrings++;
diff --git a/src/core/stringdict.h b/src/core/stringdict.h
index b376194..135d7d1 100644
--- a/src/core/stringdict.h
+++ b/src/core/stringdict.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2008 - 2015 nxtControl GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Stanislav Meduna, Alois Zoitl
diff --git a/src/core/typelib.cpp b/src/core/typelib.cpp
index a37c909..6dde258 100644
--- a/src/core/typelib.cpp
+++ b/src/core/typelib.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Smodic Rene, Gerhard Ebenhofer,
@@ -19,20 +20,28 @@
#include "if2indco.h"
#include <stddef.h>
-#ifndef FORTE_CLASS_0
CTypeLib::CTypeEntry::CTypeEntry(CStringDictionary::TStringId pa_nTypeNameId) :
- m_nTypeNameId(pa_nTypeNameId),
- m_poNext(0){
- }
+ m_nTypeNameId(pa_nTypeNameId),
+ m_poNext(0){
+}
CTypeLib::CTypeEntry::~CTypeEntry(void){
}
-CTypeLib::CFBTypeEntry::CFBTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TFunctionBlockCreateFunc pa_pfuncCreateFB):
- CTypeEntry(pa_nTypeNameId),
- m_pfuncFBCreationFunc(pa_pfuncCreateFB){
- CTypeLib::addFBType(this);
+CTypeLib::CSpecTypeEntry::CSpecTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, const SFBInterfaceSpec* paSocketInterfaceSpec) :
+ CTypeEntry(pa_nTypeNameId),
+ mSocketInterfaceSpec(paSocketInterfaceSpec){
+}
+
+CTypeLib::CSpecTypeEntry::~CSpecTypeEntry(void){
+
+}
+
+CTypeLib::CFBTypeEntry::CFBTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TFunctionBlockCreateFunc pa_pfuncCreateFB, const SFBInterfaceSpec* paSocketInterfaceSpec):
+ CSpecTypeEntry(pa_nTypeNameId, paSocketInterfaceSpec),
+ m_pfuncFBCreationFunc(pa_pfuncCreateFB){
+CTypeLib::addFBType(this);
}
@@ -41,8 +50,8 @@
}
-CTypeLib::CAdapterTypeEntry::CAdapterTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TAdapterCreateFunc pa_pfuncCreateAdapter):
- CTypeEntry(pa_nTypeNameId),
+CTypeLib::CAdapterTypeEntry::CAdapterTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TAdapterCreateFunc pa_pfuncCreateAdapter, const SFBInterfaceSpec* paSocketInterfaceSpec):
+ CSpecTypeEntry(pa_nTypeNameId, paSocketInterfaceSpec),
m_pfuncAdapterCreationFunc(pa_pfuncCreateAdapter){
CTypeLib::addAdapterType(this);
@@ -52,9 +61,8 @@
}
-CTypeLib::CDataTypeEntry::CDataTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TDataTypeCreateFunc pa_pfuncDTCreateFunc) :
- CTypeEntry(pa_nTypeNameId){
- m_pfuncDTCreateFunc = pa_pfuncDTCreateFunc;
+CTypeLib::CDataTypeEntry::CDataTypeEntry(CStringDictionary::TStringId paTypeNameId, TDataTypeCreateFunc pafuncDTCreateFunc) :
+ CTypeEntry(paTypeNameId), m_pfuncDTCreateFunc(pafuncDTCreateFunc) {
CTypeLib::addDataType(this);
}
@@ -74,11 +82,6 @@
CTypeLib::CDataTypeEntry *CTypeLib::m_poDTLibStart = 0;
CTypeLib::CDataTypeEntry *CTypeLib::m_poDTLibEnd = 0;
-//CTypeLib::~CTypeLib() {
-// //TODO free memory of fblibrary (maybe not necessary as typelib is deleted at the end of the program)
-// //TODO free memory of RESlibrary (maybe not necessary as typelib is deleted at the end of the program)
-//}
-
CTypeLib::CTypeEntry *CTypeLib::findType(CStringDictionary::TStringId pa_nTypeId, CTypeLib::CTypeEntry *pa_poListStart) {
CTypeEntry *retval = 0;
for (CTypeEntry *poRunner = pa_poListStart; poRunner != 0; poRunner
@@ -97,8 +100,9 @@
if (0 != poToCreate) {
poNewAdapter =
(static_cast<CAdapterTypeEntry *>(poToCreate))->createAdapterInstance(pa_nInstanceNameId,pa_poRes, pa_bIsPlug);
- if (0 == poNewAdapter)
+ if(0 == poNewAdapter) {
m_eLastErrorMSG = e_OVERFLOW;
+ }
} //no generic adapters supported
return poNewAdapter;
@@ -112,8 +116,9 @@
if (0 != poToCreate) {
poNewFB
= (static_cast<CFBTypeEntry *>(poToCreate))->createFBInstance(pa_nInstanceNameId, pa_poRes);
- if (0 == poNewFB) // we could not create the requested object
+ if(0 == poNewFB) { // we could not create the requested object
m_eLastErrorMSG = e_OVERFLOW;
+ }
} else { //check for parameterizable FBs (e.g. SERVER)
TIdentifier acGenFBName = { "GEN_" };
const char *acTypeBuf = CStringDictionary::getInstance().get(pa_nFBTypeId);
@@ -121,8 +126,9 @@
if (0 != pcUnderScore) { // We found no underscore in the type name therefore it can not be a generic type
ptrdiff_t nCopyLen = pcUnderScore - acTypeBuf;
- if (nCopyLen > static_cast<ptrdiff_t>(cg_nIdentifierLength - 4))
+ if(nCopyLen > static_cast<ptrdiff_t>(cg_nIdentifierLength - 4)) {
nCopyLen = cg_nIdentifierLength - 4;
+ }
memcpy(&(acGenFBName[4]), acTypeBuf, nCopyLen);
acGenFBName[cg_nIdentifierLength] = '\0';
poToCreate = findType(CStringDictionary::getInstance().getId(acGenFBName), m_poFBLibStart);
@@ -164,30 +170,34 @@
CTypeEntry *poToCreate = findType(pa_nDTNameId, m_poDTLibStart);
if (0 != poToCreate) {
poNewDT = (static_cast<CDataTypeEntry *>(poToCreate))->createDataTypeInstance(pa_acDataBuf);
- if (0 == poNewDT) // we could not create the requested object
+ if(0 == poNewDT) { // we could not create the requested object
m_eLastErrorMSG = e_OVERFLOW;
- } else
+ }
+ } else {
m_eLastErrorMSG = e_UNSUPPORTED_TYPE;
+ }
return poNewDT;
}
void CTypeLib::addFBType(CFBTypeEntry *pa_poFBTypeEntry) {
if (0 == findType(pa_poFBTypeEntry->getTypeNameId(), m_poFBLibStart)) {
- if (m_poFBLibStart == 0)
+ if(m_poFBLibStart == 0) {
m_poFBLibStart = pa_poFBTypeEntry;
- else
+ } else {
m_poFBLibEnd->m_poNext = pa_poFBTypeEntry;
+ }
m_poFBLibEnd = pa_poFBTypeEntry;
}
}
void CTypeLib::addAdapterType(CAdapterTypeEntry *pa_poAdapterTypeEntry) {
if (0 == findType(pa_poAdapterTypeEntry->getTypeNameId(), m_poAdapterLibStart)) {
- if (m_poAdapterLibStart == 0)
+ if(m_poAdapterLibStart == 0) {
m_poAdapterLibStart = pa_poAdapterTypeEntry;
- else
+ } else {
m_poAdapterLibEnd->m_poNext = pa_poAdapterTypeEntry;
+ }
m_poAdapterLibEnd = pa_poAdapterTypeEntry;
}
}
@@ -195,16 +205,17 @@
void CTypeLib::addDataType(CDataTypeEntry *pa_poDTEntry) {
if (0 == findType(pa_poDTEntry->getTypeNameId(), m_poDTLibStart)) {
- if (m_poDTLibStart == 0)
+ if(m_poDTLibStart == 0) {
m_poDTLibStart = pa_poDTEntry;
- else
+ } else {
m_poDTLibEnd->m_poNext = pa_poDTEntry;
+ }
m_poDTLibEnd = pa_poDTEntry;
}
}
-const char *CTypeLib::getFirstNonTypeNameUnderscorePos(const char *pa_acTypeName){
+const char *CTypeLib::getFirstNonTypeNameUnderscorePos(const char *pa_acTypeName){
const char* acRetVal = pa_acTypeName;
do{
@@ -218,11 +229,6 @@
}
} while(0 != acRetVal);
- return acRetVal;
-}
-
-
-
-#endif
-
+ return acRetVal;
+}
diff --git a/src/core/typelib.h b/src/core/typelib.h
index 8dc9ee7..fc2490b 100644
--- a/src/core/typelib.h
+++ b/src/core/typelib.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gunnar Grabmair, Rene Smodic, Gerhard Ebenhofer,
@@ -34,10 +35,10 @@
//!\ingroup CORE Type for a function pointer which allows to create a data type instance
typedef CIEC_ANY *(*TDataTypeCreateFunc)(TForteByte *pa_acDataBuf);
- #define FORTE_DUMMY_INIT_DEF(fbclass) int fbclass::dummyInit() {return 0; }
- #define FORTE_DUMMY_INIT_DEC static int dummyInit();
+#define FORTE_DUMMY_INIT_DEF(fbclass) int fbclass::dummyInit() {return 0; }
+#define FORTE_DUMMY_INIT_DEC static int dummyInit();
-
+
//!\ingroup CORE This define is used to create the definition necessary for generic FirmwareFunction blocks in order to get them automatically added to the FirmwareType list.
#define DECLARE_GENERIC_FIRMWARE_FB(fbclass) \
private: \
@@ -60,14 +61,16 @@
#define DEFINE_GENERIC_FIRMWARE_FB(fbclass, fbTypeNameId)\
extern const CStringDictionary::TStringId g_nStringId##fbclass; \
- const CTypeLib::CFBTypeEntry fbclass::csm_oFirmwareFBEntry_##fbclass((fbTypeNameId), fbclass::createFB); \
+ const CTypeLib::CFBTypeEntry fbclass::csm_oFirmwareFBEntry_##fbclass((fbTypeNameId), fbclass::createFB, 0); \
FORTE_DUMMY_INIT_DEF(fbclass)
/*!\ingroup CORE This define is used to create the implementation for the above definition. The second parameter is needed for the
* prebuild script that generates the constant string list.
*/
#define DEFINE_FIRMWARE_FB(fbclass, fbTypeNameId) \
- DEFINE_GENERIC_FIRMWARE_FB(fbclass, fbTypeNameId) \
+ extern const CStringDictionary::TStringId g_nStringId##fbclass; \
+ const CTypeLib::CFBTypeEntry fbclass::csm_oFirmwareFBEntry_##fbclass((fbTypeNameId), fbclass::createFB, &(fbclass::scm_stFBInterfaceSpec)); \
+ FORTE_DUMMY_INIT_DEF(fbclass) \
CStringDictionary::TStringId fbclass::getFBTypeId(void) const {return (fbTypeNameId); }
//!\ingroup CORE This define is used to create the definition necessary for Adapter types.
@@ -75,7 +78,7 @@
private: \
const static CTypeLib::CAdapterTypeEntry csm_oAdapterTypeEntry_##adapterclass; \
public: \
- static CAdapter *createAdapter(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes, bool pa_bIsPlug){\
+ static CAdapter *createAdapter(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes, bool pa_bIsPlug){\
return new adapterclass(pa_nInstanceNameId, pa_poSrcRes, pa_bIsPlug);\
}; \
virtual CStringDictionary::TStringId getFBTypeId(void) const {return (csm_oAdapterTypeEntry_##adapterclass.getTypeNameId()); };\
@@ -84,7 +87,11 @@
//!\ingroup CORE This define is used to create the implementation for the above definition.
#define DEFINE_ADAPTER_TYPE(adapterclass, adapterTypeNameId)\
- const CTypeLib::CAdapterTypeEntry adapterclass::csm_oAdapterTypeEntry_##adapterclass((adapterTypeNameId), adapterclass::createAdapter); \
+ const CTypeLib::CAdapterTypeEntry adapterclass::csm_oAdapterTypeEntry_##adapterclass((adapterTypeNameId), adapterclass::createAdapter, &(adapterclass::scm_stFBInterfaceSpecSocket)); \
+ FORTE_DUMMY_INIT_DEF(adapterclass)
+
+#define DEFINE_GENERIC_ADAPTER_TYPE(adapterclass, adapterTypeNameId)\
+ const CTypeLib::CAdapterTypeEntry adapterclass::csm_oAdapterTypeEntry_##adapterclass((adapterTypeNameId), adapterclass::createAdapter, 0); \
FORTE_DUMMY_INIT_DEF(adapterclass)
//!\ingroup CORE This define is used to create the definition necessary for Firmware datatype in order to get them automatically added to the FirmwareType list.
@@ -106,6 +113,7 @@
const CTypeLib::CDataTypeEntry CIEC_##datatypename::csm_oFirmwareDataTypeEntry_##datatypename((datatypenameid), CIEC_##datatypename::createDataType);\
FORTE_DUMMY_INIT_DEF(CIEC_##datatypename)
+struct SFBInterfaceSpec;
/*!\ingroup CORE \brief Class for storing the functionblock libraries.
*/
@@ -116,6 +124,7 @@
class CTypeEntry{
private:
CStringDictionary::TStringId m_nTypeNameId;
+
public:
CTypeEntry *m_poNext; //!< a pointer to the next element in the list. Will be used to build single linked list of type entries.
@@ -123,13 +132,21 @@
virtual ~CTypeEntry(void);
CStringDictionary::TStringId getTypeNameId(void) const { return m_nTypeNameId; };
+ };
+ class CSpecTypeEntry : public CTypeEntry {
+ private:
+ const SFBInterfaceSpec* mSocketInterfaceSpec;
+ public:
+ CSpecTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, const SFBInterfaceSpec* paSocketInterfaceSpec);
+ virtual ~CSpecTypeEntry(void);
+ const SFBInterfaceSpec* getInterfaceSpec() const{ return mSocketInterfaceSpec; }
};
//! The base class for all function block types entries in the type lib.
- class CFBTypeEntry : public CTypeEntry{
+ class CFBTypeEntry : public CSpecTypeEntry{
public:
- CFBTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TFunctionBlockCreateFunc pa_pfuncCreateFB);
+ CFBTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TFunctionBlockCreateFunc pa_pfuncCreateFB, const SFBInterfaceSpec* paSocketInterfaceSpec);
virtual ~CFBTypeEntry(void);
virtual CFunctionBlock *createFBInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes){
return m_pfuncFBCreationFunc( pa_nInstanceNameId, pa_poSrcRes);
@@ -140,9 +157,9 @@
/*!\brief Class for adapter type entries in the type lib.
*/
- class CAdapterTypeEntry : public CTypeEntry{
+ class CAdapterTypeEntry : public CSpecTypeEntry{
public:
- CAdapterTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TAdapterCreateFunc pa_pfuncCreateAdapter);
+ CAdapterTypeEntry(CStringDictionary::TStringId pa_nTypeNameId, TAdapterCreateFunc pa_pfuncCreateAdapter, const SFBInterfaceSpec* paSocketInterfaceSpec);
virtual ~CAdapterTypeEntry(void);
virtual CAdapter *createAdapterInstance(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes, bool pa_bIsPlug){
return m_pfuncAdapterCreationFunc( pa_nInstanceNameId, pa_poSrcRes, pa_bIsPlug);
@@ -177,7 +194,6 @@
*/
static CFunctionBlock *createFB(CStringDictionary::TStringId pa_nInstanceNameId, CStringDictionary::TStringId pa_nFBTypeId, CResource *pa_poRes);
-
/*\brief Delete the given FB
*/
static bool deleteFB(CFunctionBlock *pa_poFBToDelete);
@@ -223,6 +239,8 @@
*/
static CTypeEntry *getDTLibStart() { return m_poDTLibStart; }
+ static CTypeEntry *findType(CStringDictionary::TStringId pa_nTypeId, CTypeEntry *pa_poListStart);
+
protected:
private:
@@ -239,11 +257,8 @@
static CDataTypeEntry *m_poDTLibStart, //!< pointer to the begin of the data type library
*m_poDTLibEnd; //!< pointer to the end of the data type library
- static CTypeEntry *findType(CStringDictionary::TStringId pa_nTypeId, CTypeEntry *pa_poListStart);
-
//! find the position of the first underscore that marks the end of the type name and the beginning of the generic part
static const char* getFirstNonTypeNameUnderscorePos(const char* pa_acTypeName);
-
};
#endif /*TYPELIB_H_*/
diff --git a/src/core/utils/CMakeLists.txt b/src/core/utils/CMakeLists.txt
index 02b8639..591fc0d 100644
--- a/src/core/utils/CMakeLists.txt
+++ b/src/core/utils/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl
+# Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/core/utils/anyhelper.h b/src/core/utils/anyhelper.h
index 92b4830..3b46b47 100644
--- a/src/core/utils/anyhelper.h
+++ b/src/core/utils/anyhelper.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger, Matthias Plasch
@@ -42,11 +43,11 @@
case CIEC_ANY::e_WORD:
pa_roFB.template calculateValue<CIEC_WORD>();
break;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
case CIEC_ANY::e_LWORD:
pa_roFB.template calculateValue<CIEC_LWORD>();
break;
- #endif
+#endif //FORTE_USE_64BIT_DATATYPES
default:
pa_roFB.template calculateValue<CIEC_DWORD>();
break;
@@ -62,11 +63,11 @@
case CIEC_ANY::e_WORD:
pa_roFB.template calculateValue<CIEC_WORD>();
break;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
case CIEC_ANY::e_LWORD:
pa_roFB.template calculateValue<CIEC_LWORD>();
break;
- #endif
+#endif //FORTE_USE_64BIT_DATATYPES
case CIEC_ANY::e_DWORD:
pa_roFB.template calculateValue<CIEC_DWORD>();
break;
@@ -81,28 +82,28 @@
void anyMagnitudeFBHelper(CIEC_ANY::EDataTypeID pa_eDataTypeId, T &pa_roFB){
switch (pa_eDataTypeId){
case CIEC_ANY::e_REAL:
- #ifdef FORTE_USE_REAL_DATATYPE
+#ifdef FORTE_USE_REAL_DATATYPE
pa_roFB.template calculateValue<CIEC_REAL>();
- #else
+#else //FORTE_USE_REAL_DATATYPE
DEVLOG_ERROR("REAL is not compiled in this version of forte and you are still trying to use it. Exiting");
assert(0);
- #endif
+#endif //FORTE_USE_REAL_DATATYPE
break;
case CIEC_ANY::e_LREAL:
- #ifdef FORTE_USE_LREAL_DATATYPE
+#ifdef FORTE_USE_LREAL_DATATYPE
pa_roFB.template calculateValue<CIEC_LREAL>();
- #else
+#else //FORTE_USE_LREAL_DATATYPE
DEVLOG_ERROR("LREAL is not compiled in this version of forte and you are still trying to use it. Exiting");
assert(0);
- #endif
+#endif //FORTE_USE_LREAL_DATATYPE
break;
default:
if(pa_eDataTypeId <= CIEC_ANY::e_TIME){
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
pa_roFB.template calculateValue<CIEC_LINT>();
- #else
+#else //FORTE_USE_64BIT_DATATYPES
pa_roFB.template calculateValue<CIEC_DINT>();
- #endif
+#endif //FORTE_USE_64BIT_DATATYPES
}
break;
}
@@ -117,14 +118,14 @@
case CIEC_ANY::e_DINT:
pa_roFB.template calculateValue<CIEC_DINT>();
break;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
case CIEC_ANY::e_LINT:
pa_roFB.template calculateValue<CIEC_LINT>();
break;
case CIEC_ANY::e_ULINT:
pa_roFB.template calculateValue<CIEC_ULINT>();
break;
- #endif
+#endif //FORTE_USE_64BIT_DATATYPES
case CIEC_ANY::e_UINT:
pa_roFB.template calculateValue<CIEC_UINT>();
break;
@@ -144,14 +145,14 @@
void anyRealFBHelper(CIEC_ANY::EDataTypeID pa_eDataTypeId, T &pa_roFB){
switch (pa_eDataTypeId){
case CIEC_ANY::e_REAL:
- #ifdef FORTE_USE_REAL_DATATYPE
+#ifdef FORTE_USE_REAL_DATATYPE
pa_roFB.template calculateValue<CIEC_REAL>();
- #endif
+#endif //FORTE_USE_REAL_DATATYPE
break;
case CIEC_ANY::e_LREAL:
- #ifdef FORTE_USE_LREAL_DATATYPE
+#ifdef FORTE_USE_LREAL_DATATYPE
pa_roFB.template calculateValue<CIEC_LREAL>();
- #endif
+#endif //FORTE_USE_LREAL_DATATYPE
break;
default:
break;
diff --git a/src/core/utils/criticalregion.h b/src/core/utils/criticalregion.h
index d113f9c..d29ae09 100644
--- a/src/core/utils/criticalregion.h
+++ b/src/core/utils/criticalregion.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/utils/extevhandlerhelper.h b/src/core/utils/extevhandlerhelper.h
index bb867c9..e17f2d5 100644
--- a/src/core/utils/extevhandlerhelper.h
+++ b/src/core/utils/extevhandlerhelper.h
@@ -1,13 +1,15 @@
/*******************************************************************************
- * Copyright (c) 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial implementation and rework communication infrastructure
- *******************************************************************************/
+ * Copyright (c) 2018 Johannes Kepler University
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial implementation and rework communication infrastructure
+ *******************************************************************************/
#ifndef _EXTEVHANDLERHELPER_H_
#define _EXTEVHANDLERHELPER_H_
diff --git a/src/core/utils/fixedcapvector.h b/src/core/utils/fixedcapvector.h
index e35dd05..141e08d 100644
--- a/src/core/utils/fixedcapvector.h
+++ b/src/core/utils/fixedcapvector.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/utils/forte_constants.h b/src/core/utils/forte_constants.h
new file mode 100644
index 0000000..98cef11
--- /dev/null
+++ b/src/core/utils/forte_constants.h
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - common file for constants used in FORTE
+ *******************************************************************************/
+
+#ifndef SRC_CORE_UTILS_FORTE_CONSTANTS_H_
+#define SRC_CORE_UTILS_FORTE_CONSTANTS_H_
+
+#include "forte_time.h"
+
+namespace forte {
+ namespace core {
+ namespace constants {
+ const CIEC_TIME::TValueType cMillisecondsPerSecond = 1E3;
+ const CIEC_TIME::TValueType cMicrosecondsPerSecond = 1E6;
+ const CIEC_TIME::TValueType cNanosecondsPerSecond = 1E9;
+ } /* namespace constants */
+ } /* namespace core */
+} /* namespace forte */
+
+#endif /* SRC_CORE_UTILS_FORTE_CONSTANTS_H_ */
diff --git a/src/core/utils/fortearray.h b/src/core/utils/fortearray.h
index 4b059ff..38ee0a3 100644
--- a/src/core/utils/fortearray.h
+++ b/src/core/utils/fortearray.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/utils/parameterParser.cpp b/src/core/utils/parameterParser.cpp
index 7c5eddf..e41a33e 100644
--- a/src/core/utils/parameterParser.cpp
+++ b/src/core/utils/parameterParser.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017 ACIN - fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -14,46 +15,35 @@
#include <string.h>
#include <cctype>
-CParameterParser::CParameterParser(const char* paParameters, unsigned int paAmountOfParameters, const char paSeparator) :
- mParameters(paParameters), mAmountOfParameters(paAmountOfParameters), mSeparator(paSeparator){
- mParameterLocations = new char*[paAmountOfParameters];
- memset(mParameterLocations, 0, sizeof(char*)*paAmountOfParameters);
+CParameterParser::CParameterParser(const char* paParameters, const char paSeparator, size_t paExpectedNumParams) :
+ mParameters(paParameters), mSeparator(paSeparator) {
+ mParameterLocations.reserve(paExpectedNumParams);
}
-CParameterParser::~CParameterParser(){
- if(0 != mParameterLocations){
- delete[] mParameterLocations;
- }
-}
-
-unsigned int CParameterParser::parseParameters() {
+size_t CParameterParser::parseParameters() {
char* parsePosition = mParameters.getValue();
- unsigned int i = 0;
- if(0 < mAmountOfParameters){
- if('\0' == *parsePosition){ //empty string
- saveStartPositionForParameterSubstring(i++, parsePosition);
- }else{ //non empty string
- for(i = 0; i < mAmountOfParameters; i++){
- if(' ' != mSeparator){
- moveToPositionOfFirstNonWhiteSpaceCharacter (&parsePosition);
- }
- saveStartPositionForParameterSubstring(i, parsePosition);
- moveToPositionOfNextParameterSeparatorOrEndOfString (&parsePosition);
- bool endOfString = ('\0' == *parsePosition);
- if(mParameterLocations[i] < parsePosition){ //avoid going bakcwards when not needed
- trimTrailingWhiteSpacesOfParameterSubstring(parsePosition, ' ' == mSeparator);
- }else if(mParameterLocations[i] == parsePosition){
- *parsePosition = '\0';
- }
- if(endOfString){
- i++;
- break;
- }
+ bool endOfString = ('\0' == *parsePosition);
+ if(endOfString) { //empty string
+ saveStartPositionForParameterSubstring(parsePosition);
+ } else { //non empty string
+ while(!endOfString) {
+ if(' ' != mSeparator) {
+ moveToPositionOfFirstNonWhiteSpaceCharacter(&parsePosition);
+ }
+ saveStartPositionForParameterSubstring(parsePosition);
+ moveToPositionOfNextParameterSeparatorOrEndOfString(&parsePosition);
+ endOfString = ('\0' == *parsePosition);
+ if(mParameterLocations.back() < parsePosition) { //avoid going backwards when not needed
+ trimTrailingWhiteSpacesOfParameterSubstring(parsePosition, ' ' == mSeparator);
+ } else { //mParameterLocations[i] == parsePosition. parsePosition cannot be behind
+ *parsePosition = '\0';
+ }
+ if(!endOfString) {
parsePosition++;
}
}
}
- return i;
+ return mParameterLocations.size();
}
void CParameterParser::moveToPositionOfFirstNonWhiteSpaceCharacter(char** paParsePosition) {
@@ -62,8 +52,8 @@
}
}
-void CParameterParser::saveStartPositionForParameterSubstring(int paParameterNumber, char* paParsePosition) {
- mParameterLocations[paParameterNumber] = paParsePosition;
+void CParameterParser::saveStartPositionForParameterSubstring(char* paParsePosition) {
+ mParameterLocations.push_back(paParsePosition);
}
void CParameterParser::moveToPositionOfNextParameterSeparatorOrEndOfString(char** paParsePosition) {
@@ -83,7 +73,7 @@
*backTraceCharacter = '\0';
}
-const char* CParameterParser::operator [](const int& paIndex) {
- const char* result = (paIndex < static_cast<int>(mAmountOfParameters)) ? mParameterLocations[paIndex] : 0;
+const char* CParameterParser::operator [](const size_t paIndex) {
+ const char* result = (paIndex < mParameterLocations.size()) ? mParameterLocations[paIndex] : 0;
return result;
}
diff --git a/src/core/utils/parameterParser.h b/src/core/utils/parameterParser.h
index c6f1136..7ebbd5e 100644
--- a/src/core/utils/parameterParser.h
+++ b/src/core/utils/parameterParser.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016, 2017 ACIN - fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -14,6 +15,7 @@
#define SRC_CORE_UTILS_PARAMETERPARSER_H_
#include "../datatypes/forte_string.h"
+#include <vector>
class CParameterParser{
public:
@@ -21,40 +23,35 @@
/**
* Creates the parser object
* @param paParameters Pointer to the string to be parsed. It remains untouched during the life of the object, since the string is copied. A null pointer is treated as an empty string
- * @param paAmountOfParameters Amount of parameter to look for
* @param paSeparator Separator of the parameters
+ * @param paExpectedNumParams Expected number of parameters if known. Not providing it, will still work, but performance is improved when provided
*/
- CParameterParser(const char* paParameters, unsigned int paAmountOfParameters, const char paSeparator = ',');
- virtual ~CParameterParser();
+ CParameterParser(const char* paParameters, const char paSeparator, size_t paExpectedNumParams = 0);
/**
* Parse the string using the separator passed in the constructor
* Leading and trailing blank spaces in each parameter are ignored, unless the separator is actually a blank space
- * If the string has less parameters than the amount specified in the constructor, the parsed amount of parameters is stored
- * If the string has more parameters than the amount specified in the constructor, the the specified amount is stored
* If the string starts with a separator, the first parameter will be considered an empty one
* If the string ends with a separator, the last parameter will be considered an empty one
* An empty string is seen as a one empty parameter
* @return Number of stored parameters
*/
- unsigned int parseParameters();
+ size_t parseParameters();
/**
* Get the parameter at certain index
* @param paIndex Index of the desired parameter
* @return If the index is less than the amount of stored parameters, a pointer to the string, 0 otherwise
*/
- const char* operator[](int const& paIndex);
+ const char* operator[](const size_t paIndex);
private:
CIEC_STRING mParameters;
- char **mParameterLocations;
- unsigned int const mAmountOfParameters;
+ std::vector<const char *> mParameterLocations;
const char mSeparator;
-
void moveToPositionOfFirstNonWhiteSpaceCharacter(char** paParsePosition);
- void saveStartPositionForParameterSubstring(int paParameterNumber, char* paParsePosition);
+ void saveStartPositionForParameterSubstring(char* paParsePosition);
void moveToPositionOfNextParameterSeparatorOrEndOfString(char** paParsePosition);
void trimTrailingWhiteSpacesOfParameterSubstring(char* paParsePosition, bool isSpace);
diff --git a/src/core/utils/singlet.h b/src/core/utils/singlet.h
index 5f24a80..c555dbe 100644
--- a/src/core/utils/singlet.h
+++ b/src/core/utils/singlet.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2010 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/utils/staticassert.h b/src/core/utils/staticassert.h
index 15e0b45..28eb516 100644
--- a/src/core/utils/staticassert.h
+++ b/src/core/utils/staticassert.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -14,10 +15,10 @@
#ifdef __GNUC__
//The latest GCC is rather picky about unused typedefs. We need this for our static assert and its ok there that it is unused there.
- #define FORTE_ATTRIBUTE_UNUSED __attribute__((unused))
-#else
- #define FORTE_ATTRIBUTE_UNUSED
-#endif
+# define FORTE_ATTRIBUTE_UNUSED __attribute__((unused))
+#else //__GNUC__
+# define FORTE_ATTRIBUTE_UNUSED
+#endif //__GNUC__
/*! A simple compile time assert which is based on the books:
* - Modern C++ Design, Andrei Alexandrescu
diff --git a/src/core/utils/string_utils.cpp b/src/core/utils/string_utils.cpp
index c14115c..6c13c23 100644
--- a/src/core/utils/string_utils.cpp
+++ b/src/core/utils/string_utils.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/core/utils/string_utils.h b/src/core/utils/string_utils.h
index 03348f2..f303e17 100644
--- a/src/core/utils/string_utils.h
+++ b/src/core/utils/string_utils.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/forteinit.cpp.in b/src/forteinit.cpp.in
index ce67228..6c72559 100644
--- a/src/forteinit.cpp.in
+++ b/src/forteinit.cpp.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011, 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer, Matthias Plasch
@@ -29,7 +30,6 @@
${FB_FUNCTION_STRING}
- return;
}
diff --git a/src/forteinit.h.in b/src/forteinit.h.in
index e4ae236..4aa300e 100644
--- a/src/forteinit.h.in
+++ b/src/forteinit.h.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer
diff --git a/src/gen_include.cpp.in b/src/gen_include.cpp.in
index e52be0c..973dce9 100644
--- a/src/gen_include.cpp.in
+++ b/src/gen_include.cpp.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Michael Hofmann
diff --git a/src/modules/HTTP/CMakeLists.txt b/src/modules/HTTP/CMakeLists.txt
index 633d25f..10b6ba8 100644
--- a/src/modules/HTTP/CMakeLists.txt
+++ b/src/modules/HTTP/CMakeLists.txt
@@ -1,13 +1,14 @@
#*******************************************************************************
# *******************************************************************************
-# * Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Marc Jakobi
+# Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Marc Jakobi
# *******************************************************************************/
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/HTTP/http_handler.cpp b/src/modules/HTTP/http_handler.cpp
index 03345e4..fdc46d5 100644
--- a/src/modules/HTTP/http_handler.cpp
+++ b/src/modules/HTTP/http_handler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
@@ -25,61 +26,61 @@
CIPComSocketHandler::TSocketDescriptor CHTTP_Handler::smServerListeningSocket = CIPComSocketHandler::scmInvalidSocketDescriptor;
char CHTTP_Handler::sRecvBuffer[];
-unsigned int CHTTP_Handler::sBufFillSize = 0;
+unsigned int CHTTP_Handler::sBufFillSize = 0;
const unsigned int CHTTP_Handler::scmSendTimeout = 20;
const unsigned int CHTTP_Handler::scmAcceptedTimeout = 5;
DEFINE_HANDLER(CHTTP_Handler);
-CHTTP_Handler::CHTTP_Handler(CDeviceExecution& pa_poDeviceExecution) : CExternalEventHandler(pa_poDeviceExecution){
+CHTTP_Handler::CHTTP_Handler(CDeviceExecution& pa_poDeviceExecution) :
+ CExternalEventHandler(pa_poDeviceExecution) {
memset(sRecvBuffer, 0, cg_unIPLayerRecvBufferSize);
}
-CHTTP_Handler::~CHTTP_Handler(){
- disableHandler();
+CHTTP_Handler::~CHTTP_Handler() {
+ stopTimeoutThread();
+ closeHTTPServer();
+ clearServerLayers();
+ clearClientLayers();
+ clearAcceptedSockets();
}
-void CHTTP_Handler::enableHandler(void){
+void CHTTP_Handler::enableHandler(void) {
startTimeoutThread();
}
void CHTTP_Handler::disableHandler(void) {
+ stopTimeoutThread();
+}
- setAlive(false);
- resumeSelfsuspend();
- end();
-
- closeHTTPServer();
- {
- CCriticalRegion criticalRegion(mServerMutex);
- for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter){
- for(CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator iter1 = (*iter)->mSockets.begin(); iter1 != (*iter)->mSockets.end(); ++iter1){
- removeAndCloseSocket(*iter1);
- }
- (*iter)->mSockets.clearAll();
- delete (*iter);
+void CHTTP_Handler::clearServerLayers() {
+ CCriticalRegion criticalRegion(mServerMutex);
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ for(CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator iter1 = (*iter)->mSockets.begin(); iter1 != (*iter)->mSockets.end(); ++iter1) {
+ removeAndCloseSocket(*iter1);
}
- mServerLayers.clearAll();
+ (*iter)->mSockets.clearAll();
+ delete (*iter);
}
+ mServerLayers.clearAll();
+}
- {
- CCriticalRegion criticalRegion(mClientMutex);
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter){
- removeAndCloseSocket((*iter)->mSocket);
- delete (*iter);
- }
- mClientLayers.clearAll();
+void CHTTP_Handler::clearClientLayers() {
+ CCriticalRegion criticalRegion(mClientMutex);
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter) {
+ removeAndCloseSocket((*iter)->mSocket);
+ delete (*iter);
}
+ mClientLayers.clearAll();
+}
- {
- CCriticalRegion criticalRegion(mAcceptedMutex);
- for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter){
- removeAndCloseSocket((*iter)->mSocket);
- delete (*iter);
- }
- mAcceptedSockets.clearAll();
+void CHTTP_Handler::clearAcceptedSockets() {
+ CCriticalRegion criticalRegion(mAcceptedMutex);
+ for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter) {
+ removeAndCloseSocket((*iter)->mSocket);
+ delete (*iter);
}
-
+ mAcceptedSockets.clearAll();
}
void CHTTP_Handler::setPriority(int) {
@@ -91,34 +92,32 @@
return 0;
}
-forte::com_infra::EComResponse CHTTP_Handler::recvData(const void* paData, unsigned int){ //TODO: do something with the size parameter of the received data?
+forte::com_infra::EComResponse CHTTP_Handler::recvData(const void* paData, unsigned int) { //TODO: do something with the size parameter of the received data?
CIPComSocketHandler::TSocketDescriptor socket = *(static_cast<const CIPComSocketHandler::TSocketDescriptor*>(paData));
- if(socket == smServerListeningSocket){
+ if(socket == smServerListeningSocket) {
CIPComSocketHandler::TSocketDescriptor newConnection = CIPComSocketHandler::acceptTCPConnection(socket);
- if(CIPComSocketHandler::scmInvalidSocketDescriptor != newConnection){
+ if(CIPComSocketHandler::scmInvalidSocketDescriptor != newConnection) {
CCriticalRegion criticalRegion(mAcceptedMutex);
HTTPAcceptedSockets* accepted = new HTTPAcceptedSockets();
accepted->mSocket = newConnection;
- accepted->mStartTime.setCurrentTime();
+ accepted->mStartTime = NOW();
mAcceptedSockets.pushBack(accepted);
getExtEvHandler<CIPComSocketHandler>().addComCallback(newConnection, this);
resumeSelfsuspend();
- }else{
+ } else {
DEVLOG_ERROR("[HTTP Handler] Couldn't accept new HTTP connection\n");
}
- }else{
+ } else {
int recvLen = CIPComSocketHandler::receiveDataFromTCP(socket, &sRecvBuffer[sBufFillSize], cg_unIPLayerRecvBufferSize - sBufFillSize);
- if(0 == recvLen){
+ if(0 == recvLen) {
removeAndCloseSocket(socket);
- }else if(-1 == recvLen){
+ } else if(-1 == recvLen) {
removeAndCloseSocket(socket);
DEVLOG_ERROR("[HTTP handler] Error receiving packet\n");
- }else{
- if(!recvClients(socket, recvLen)){
- if(!recvServers(socket)){
- DEVLOG_WARNING("[HTTP Handler]: A packet arrived to the wrong place\n");
- }
+ } else {
+ if(!recvClients(socket, recvLen) && !recvServers(socket)) {
+ DEVLOG_WARNING("[HTTP Handler]: A packet arrived to the wrong place\n");
}
}
}
@@ -128,9 +127,9 @@
bool CHTTP_Handler::recvClients(const CIPComSocketHandler::TSocketDescriptor paSocket, const int paRecvLength) { //check clients
CCriticalRegion criticalRegion(mClientMutex);
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter){
- if((*iter)->mSocket == paSocket){
- if(e_ProcessDataOk == (*iter)->mLayer->recvData(sRecvBuffer, paRecvLength)){
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter) {
+ if((*iter)->mSocket == paSocket) {
+ if(e_ProcessDataOk == (*iter)->mLayer->recvData(sRecvBuffer, paRecvLength)) {
startNewEventChain((*iter)->mLayer->getCommFB());
}
removeAndCloseSocket(paSocket);
@@ -146,128 +145,138 @@
bool CHTTP_Handler::recvServers(const CIPComSocketHandler::TSocketDescriptor paSocket) {
CCriticalRegion criticalRegion(mServerMutex);
- { //remove socket from accepted
- CCriticalRegion criticalRegion(mAcceptedMutex);
- for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter){
- if((*iter)->mSocket == paSocket){
- HTTPAcceptedSockets *toDelete = *iter;
- mAcceptedSockets.erase(toDelete);
- delete toDelete;
- break;
- }
- }
- }
+ removeSocketFromAccepted(paSocket);
bool found = false;
- if(!mServerLayers.isEmpty()){
+ if(!mServerLayers.isEmpty()) {
CIEC_STRING path;
CSinglyLinkedList<CIEC_STRING> parameterNames;
CSinglyLinkedList<CIEC_STRING> parameterValues;
- if(CHttpParser::parseGetRequest(path, parameterNames, parameterValues, sRecvBuffer)){
- for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter){
- if((*iter)->mPath == path){
+ if(CHttpParser::parseGetRequest(path, parameterNames, parameterValues, sRecvBuffer)) {
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ if((*iter)->mPath == path) {
(*iter)->mSockets.pushBack(paSocket);
- if(e_ProcessDataOk == (*iter)->mLayer->recvServerData(parameterNames, parameterValues)){
+ if(e_ProcessDataOk == (*iter)->mLayer->recvServerData(parameterNames, parameterValues)) {
startNewEventChain((*iter)->mLayer->getCommFB());
}
found = true;
break;
}
}
- }
- else{
+ } else {
DEVLOG_ERROR("[HTTP Handler] Wrong HTTP Get request\n");
}
- if(!found){
- DEVLOG_ERROR("[HTTP Handler] Path %s has no FB registered\n", path.getValue());
-
- CIEC_STRING toSend;
- CIEC_STRING result = "404 Not Found";
- CIEC_STRING mContentType = "text/html";
- CIEC_STRING mReqData = "";
- if(!CHttpParser::createResponse(toSend, result, mContentType, mReqData)){
- DEVLOG_DEBUG("[HTTP Handler] Error sending response back for 404 error\n");
- }
- else{
- if(toSend.length() != CIPComSocketHandler::sendDataOnTCP(paSocket, toSend.getValue(), toSend.length())){
- DEVLOG_ERROR("[HTTP Handler]: Error sending back the answer %s \n", toSend.getValue());
- }
- }
- removeAndCloseSocket(paSocket);
+ if(!found) {
+ handlerReceivedWrongPath(paSocket, path);
}
}
return found;
}
-bool CHTTP_Handler::sendClientData(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paToSend){
+void CHTTP_Handler::removeSocketFromAccepted(const CIPComSocketHandler::TSocketDescriptor paSocket) {
+ CCriticalRegion criticalRegion(mAcceptedMutex);
+ for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter) {
+ if((*iter)->mSocket == paSocket) {
+ HTTPAcceptedSockets *toDelete = *iter;
+ mAcceptedSockets.erase(toDelete);
+ delete toDelete;
+ break;
+ }
+ }
+}
+
+void CHTTP_Handler::handlerReceivedWrongPath(const CIPComSocketHandler::TSocketDescriptor paSocket, CIEC_STRING& paPath) {
+ DEVLOG_ERROR("[HTTP Handler] Path %s has no FB registered\n", paPath.getValue());
+
+ CIEC_STRING toSend;
+ CIEC_STRING result = "HTTP/1.1 404 Not Found";
+ CIEC_STRING mContentType = "text/html";
+ CIEC_STRING mReqData = "";
+ CHttpParser::createResponse(toSend, result, mContentType, mReqData);
+ if(toSend.length() != CIPComSocketHandler::sendDataOnTCP(paSocket, toSend.getValue(), toSend.length())) {
+ DEVLOG_ERROR("[HTTP Handler]: Error sending back the answer %s \n", toSend.getValue());
+ }
+ removeAndCloseSocket(paSocket);
+}
+
+bool CHTTP_Handler::sendClientData(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paToSend) {
CIPComSocketHandler::TSocketDescriptor newSocket = CIPComSocketHandler::openTCPClientConnection(paLayer->getHost().getValue(), paLayer->getPort());
- if(CIPComSocketHandler::scmInvalidSocketDescriptor != newSocket){
- if(paToSend.length() == CIPComSocketHandler::sendDataOnTCP(newSocket, paToSend.getValue(), paToSend.length())){
+ if(CIPComSocketHandler::scmInvalidSocketDescriptor != newSocket) {
+ if(paToSend.length() == CIPComSocketHandler::sendDataOnTCP(newSocket, paToSend.getValue(), paToSend.length())) {
CCriticalRegion criticalRegion(mClientMutex);
HTTPClientWaiting* toAdd = new HTTPClientWaiting();
toAdd->mLayer = paLayer;
toAdd->mSocket = newSocket;
- toAdd->mStartTime.setCurrentTime();
+ toAdd->mStartTime = NOW();
startTimeoutThread();
mClientLayers.pushBack(toAdd);
getExtEvHandler<CIPComSocketHandler>().addComCallback(newSocket, this);
resumeSelfsuspend();
return true;
- }else{
+ } else {
DEVLOG_ERROR("[HTTP Handler]: Couldn't send data to client %s:%u\n", paLayer->getHost().getValue(), paLayer->getPort());
removeAndCloseSocket(newSocket);
}
- }else{
+ } else {
DEVLOG_ERROR("[HTTP Handler]: Couldn't open client connection for %s:%u\n", paLayer->getHost().getValue(), paLayer->getPort());
}
return false;
}
-void CHTTP_Handler::addServerPath(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paPath){
- openHTTPServer();
+bool CHTTP_Handler::addServerPath(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paPath) {
CCriticalRegion criticalRegion(mServerMutex);
+
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ if((*iter)->mPath == paPath) {
+ DEVLOG_ERROR("[HTTP Handler]: The listening path \"%s\" was already added to the http server. Cannot add it again\n", paPath.getValue());
+ return false;
+ }
+ }
+
+ openHTTPServer();
HTTPServerWaiting* toAdd = new HTTPServerWaiting();
toAdd->mLayer = paLayer;
toAdd->mPath = paPath;
mServerLayers.pushBack(toAdd);
DEVLOG_INFO("[HTTP Handler]: The listening path \"%s\" was added to the http server\n", paPath.getValue());
+ return true;
}
-void CHTTP_Handler::removeServerPath(CIEC_STRING& paPath){
+void CHTTP_Handler::removeServerPath(CIEC_STRING& paPath) {
CCriticalRegion criticalRegion(mServerMutex);
- for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter){
- if((*iter)->mPath == paPath){
- for(CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator iter_ = (*iter)->mSockets.begin(); iter_ != (*iter)->mSockets.end(); ++iter_){
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ if((*iter)->mPath == paPath) {
+ for(CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator iter_ = (*iter)->mSockets.begin(); iter_ != (*iter)->mSockets.end(); ++iter_) {
removeAndCloseSocket(*iter_);
}
HTTPServerWaiting * toDelete = *iter;
mServerLayers.erase(toDelete);
- delete toDelete;
+ delete toDelete;
break;
}
}
- if(mServerLayers.isEmpty()){
+ if(mServerLayers.isEmpty()) {
closeHTTPServer();
}
}
-void CHTTP_Handler::sendServerAnswer(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer){
+void CHTTP_Handler::sendServerAnswer(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer) {
sendServerAnswerHelper(paLayer, paAnswer, false);
}
-void CHTTP_Handler::sendServerAnswerFromRecv(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer){
+void CHTTP_Handler::sendServerAnswerFromRecv(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer) {
sendServerAnswerHelper(paLayer, paAnswer, true);
}
-void CHTTP_Handler::forceClose(forte::com_infra::CHttpComLayer* paLayer){
+void CHTTP_Handler::forceClose(forte::com_infra::CHttpComLayer* paLayer) {
forceCloseHelper(paLayer, false);
}
-void CHTTP_Handler::forceCloseFromRecv(forte::com_infra::CHttpComLayer* paLayer){
+void CHTTP_Handler::forceCloseFromRecv(forte::com_infra::CHttpComLayer* paLayer) {
forceCloseHelper(paLayer, true);
}
@@ -275,127 +284,132 @@
DEVLOG_INFO("[HTTP Handler]: Starting HTTP timeout thread\n");
mThreadStarted.inc();
- while(isAlive()){
- if(mClientLayers.isEmpty() && mAcceptedSockets.isEmpty()){
+ while(isAlive()) {
+ if(mClientLayers.isEmpty() && mAcceptedSockets.isEmpty()) {
selfSuspend();
}
- if(!isAlive()){
+ if(!isAlive()) {
break;
}
- {
- CCriticalRegion criticalRegion(mClientMutex);
- if(!mClientLayers.isEmpty()){
- CSinglyLinkedList<HTTPClientWaiting *> clientsToDelete;
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter){
- // wait until result is ready
- CIEC_DATE_AND_TIME currentTime;
- currentTime.setCurrentTime();
- if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmSendTimeout * 1000){
- DEVLOG_ERROR("[HTTP Handler]: Timeout at client %s:%u \n", (*iter)->mLayer->getHost().getValue(), (*iter)->mLayer->getPort());
- removeAndCloseSocket((*iter)->mSocket);
- clientsToDelete.pushBack(*iter);
- (*iter)->mLayer->recvData(0, 0); //indicates timeout
- }
- }
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = clientsToDelete.begin(); iter != clientsToDelete.end(); ++iter){
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter_ = mClientLayers.begin(); iter_ != mClientLayers.end(); ++iter_){
- if(*iter_ == *iter){
- mClientLayers.erase(*iter_);
- delete (*iter);
- break;
- }
- }
- }
- }
- }
-
- {
- CCriticalRegion criticalRegion(mAcceptedMutex);
- if(!mAcceptedSockets.isEmpty()){
- CSinglyLinkedList<HTTPAcceptedSockets *> acceptedToDelete;
- for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter){
- // wait until result is ready
- CIEC_DATE_AND_TIME currentTime;
- currentTime.setCurrentTime();
- if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmAcceptedTimeout * 1000){
- DEVLOG_ERROR("[HTTP Handler]: Timeout at accepted socket\n");
- removeAndCloseSocket((*iter)->mSocket);
- acceptedToDelete.pushBack(*iter);
- }
- }
-
- for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = acceptedToDelete.begin(); iter != acceptedToDelete.end(); ++iter){
- for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter_ = mAcceptedSockets.begin(); iter_ != mAcceptedSockets.end(); ++iter_){
- if(*iter_ == *iter){
- mAcceptedSockets.erase(*iter_);
- delete (*iter);
- break;
- }
- }
- }
- }
- }
-
+ checkClientLayers();
+ checkAcceptedSockets();
sleepThread(100);
}
}
-void CHTTP_Handler::startTimeoutThread(){
- if(!isAlive()){
+void CHTTP_Handler::checkClientLayers() {
+ CCriticalRegion criticalRegion(mClientMutex);
+ if(!mClientLayers.isEmpty()) {
+ CSinglyLinkedList<HTTPClientWaiting *> clientsToDelete;
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter) {
+ // wait until result is ready
+ CIEC_DATE_AND_TIME currentTime(NOW());
+ if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmSendTimeout * 1000) {
+ DEVLOG_ERROR("[HTTP Handler]: Timeout at client %s:%u \n", (*iter)->mLayer->getHost().getValue(), (*iter)->mLayer->getPort());
+ removeAndCloseSocket((*iter)->mSocket);
+ clientsToDelete.pushBack(*iter);
+ (*iter)->mLayer->recvData(0, 0); //indicates timeout
+ }
+ }
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = clientsToDelete.begin(); iter != clientsToDelete.end(); ++iter) {
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter_ = mClientLayers.begin(); iter_ != mClientLayers.end(); ++iter_) {
+ if(*iter_ == *iter) {
+ mClientLayers.erase(*iter_);
+ delete (*iter);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void CHTTP_Handler::checkAcceptedSockets() {
+ CCriticalRegion criticalRegion(mAcceptedMutex);
+ if(!mAcceptedSockets.isEmpty()) {
+ CSinglyLinkedList<HTTPAcceptedSockets *> acceptedToDelete;
+ for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = mAcceptedSockets.begin(); iter != mAcceptedSockets.end(); ++iter) {
+ // wait until result is ready
+ CIEC_DATE_AND_TIME currentTime(NOW());
+ if(currentTime.getMilliSeconds() - (*iter)->mStartTime.getMilliSeconds() > scmAcceptedTimeout * 1000) {
+ DEVLOG_ERROR("[HTTP Handler]: Timeout at accepted socket\n");
+ removeAndCloseSocket((*iter)->mSocket);
+ acceptedToDelete.pushBack(*iter);
+ }
+ }
+
+ for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter = acceptedToDelete.begin(); iter != acceptedToDelete.end(); ++iter) {
+ for(CSinglyLinkedList<HTTPAcceptedSockets *>::Iterator iter_ = mAcceptedSockets.begin(); iter_ != mAcceptedSockets.end(); ++iter_) {
+ if(*iter_ == *iter) {
+ mAcceptedSockets.erase(*iter_);
+ delete (*iter);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void CHTTP_Handler::startTimeoutThread() {
+ if(!isAlive()) {
start();
mThreadStarted.waitIndefinitely();
mThreadStarted.inc();
}
}
-void CHTTP_Handler::openHTTPServer(){
- if(CIPComSocketHandler::scmInvalidSocketDescriptor == smServerListeningSocket){
+void CHTTP_Handler::stopTimeoutThread() {
+ setAlive(false);
+ resumeSelfsuspend();
+ end();
+}
+
+void CHTTP_Handler::openHTTPServer() {
+ if(CIPComSocketHandler::scmInvalidSocketDescriptor == smServerListeningSocket) {
char address[] = "127.0.0.1";
smServerListeningSocket = CIPComSocketHandler::openTCPServerConnection(address, FORTE_COM_HTTP_LISTENING_PORT);
- if(CIPComSocketHandler::scmInvalidSocketDescriptor != smServerListeningSocket){
+ if(CIPComSocketHandler::scmInvalidSocketDescriptor != smServerListeningSocket) {
getExtEvHandler<CIPComSocketHandler>().addComCallback(smServerListeningSocket, this);
DEVLOG_INFO("[HTTP Handler] HTTP server listening on port %d\n", FORTE_COM_HTTP_LISTENING_PORT);
- }
- else{
+ } else {
DEVLOG_ERROR("[HTTP Handler] Couldn't start HTTP server on port %d\n", FORTE_COM_HTTP_LISTENING_PORT);
}
}
}
-void CHTTP_Handler::closeHTTPServer(){
- if(CIPComSocketHandler::scmInvalidSocketDescriptor != smServerListeningSocket){
+void CHTTP_Handler::closeHTTPServer() {
+ if(CIPComSocketHandler::scmInvalidSocketDescriptor != smServerListeningSocket) {
removeAndCloseSocket(smServerListeningSocket);
smServerListeningSocket = CIPComSocketHandler::scmInvalidSocketDescriptor;
}
}
-void CHTTP_Handler::removeAndCloseSocket(const CIPComSocketHandler::TSocketDescriptor paSocket){
+void CHTTP_Handler::removeAndCloseSocket(const CIPComSocketHandler::TSocketDescriptor paSocket) {
//normally, when the device is being killed the CIPComSocketHandler is already dead, so calls to it must be avoided.
- if(mDeviceExecution.isExtEvHandlerValid(CIPComSocketHandler::mHandlerIdentifier)){
+ if(mDeviceExecution.isExtEvHandlerValid(CIPComSocketHandler::mHandlerIdentifier)) {
getExtEvHandler<CIPComSocketHandler>().removeComCallback(paSocket);
getExtEvHandler<CIPComSocketHandler>().closeSocket(paSocket);
}
}
-void CHTTP_Handler::resumeSelfsuspend(){
+void CHTTP_Handler::resumeSelfsuspend() {
mSuspendSemaphore.inc();
}
-void CHTTP_Handler::selfSuspend(){
+void CHTTP_Handler::selfSuspend() {
mSuspendSemaphore.waitIndefinitely();
}
-void CHTTP_Handler::sendServerAnswerHelper(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer, bool paFromRecv){
- if(!paFromRecv){
+void CHTTP_Handler::sendServerAnswerHelper(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paAnswer, bool paFromRecv) {
+ if(!paFromRecv) {
mServerMutex.lock();
}
- for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter){
- if((*iter)->mLayer == paLayer){
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ if((*iter)->mLayer == paLayer) {
CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator iterSocket = (*iter)->mSockets.begin();
- if(paAnswer.length() != CIPComSocketHandler::sendDataOnTCP(*iterSocket, paAnswer.getValue(), paAnswer.length())){
+ if(paAnswer.length() != CIPComSocketHandler::sendDataOnTCP(*iterSocket, paAnswer.getValue(), paAnswer.length())) {
DEVLOG_ERROR("[HTTP Handler]: Error sending back the answer %s \n", paAnswer.getValue());
}
removeAndCloseSocket(*iterSocket);
@@ -404,21 +418,21 @@
}
}
- if(!paFromRecv){
+ if(!paFromRecv) {
mServerMutex.unlock();
}
}
-void CHTTP_Handler::forceCloseHelper(forte::com_infra::CHttpComLayer* paLayer, bool paFromRecv){
- if(!paFromRecv){
+void CHTTP_Handler::forceCloseHelper(forte::com_infra::CHttpComLayer* paLayer, bool paFromRecv) {
+ if(!paFromRecv) {
mServerMutex.lock();
}
bool found = false;
- for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter){
- if((*iter)->mLayer == paLayer){
- if(!(*iter)->mSockets.isEmpty()){
+ for(CSinglyLinkedList<HTTPServerWaiting *>::Iterator iter = mServerLayers.begin(); iter != mServerLayers.end(); ++iter) {
+ if((*iter)->mLayer == paLayer) {
+ if(!(*iter)->mSockets.isEmpty()) {
CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor>::Iterator itSocket = (*iter)->mSockets.begin();
removeAndCloseSocket(*itSocket);
(*iter)->mSockets.popFront();
@@ -428,20 +442,20 @@
}
}
- if(!paFromRecv){
+ if(!paFromRecv) {
mServerMutex.unlock();
mClientMutex.lock();
}
- if(!found && !mClientLayers.isEmpty()){
- for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter){
- if((*iter)->mLayer == paLayer){
+ if(!found && !mClientLayers.isEmpty()) {
+ for(CSinglyLinkedList<HTTPClientWaiting *>::Iterator iter = mClientLayers.begin(); iter != mClientLayers.end(); ++iter) {
+ if((*iter)->mLayer == paLayer) {
removeAndCloseSocket((*iter)->mSocket);
}
}
}
- if(!paFromRecv){
+ if(!paFromRecv) {
mClientMutex.unlock();
- }
+ }
}
diff --git a/src/modules/HTTP/http_handler.h b/src/modules/HTTP/http_handler.h
index 6997128..b1f8d9a 100644
--- a/src/modules/HTTP/http_handler.h
+++ b/src/modules/HTTP/http_handler.h
@@ -1,15 +1,15 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
*******************************************************************************/
-
#ifndef SRC_MODULES_HTTP_OPCUAHANDLER_H_
#define SRC_MODULES_HTTP_OPCUAHANDLER_H_
@@ -24,7 +24,7 @@
#include "forte_date_and_time.h"
// cppcheck-suppress noConstructor
-class CHTTP_Handler : public CExternalEventHandler, public CThread, public forte::com_infra::CComCallback{
+class CHTTP_Handler : public CExternalEventHandler, public CThread, public forte::com_infra::CComCallback {
DECLARE_HANDLER(CHTTP_Handler)
public:
@@ -41,7 +41,7 @@
bool sendClientData(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paToSend);
- void addServerPath(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paPath);
+ bool addServerPath(forte::com_infra::CHttpComLayer* paLayer, CIEC_STRING& paPath);
void removeServerPath(CIEC_STRING& paPath);
@@ -53,8 +53,6 @@
void forceCloseFromRecv(forte::com_infra::CHttpComLayer* paLayer);
- protected:
-
private:
/**
@@ -62,8 +60,14 @@
*/
virtual void run();
+ void checkClientLayers();
+
+ void checkAcceptedSockets();
+
void startTimeoutThread();
+ void stopTimeoutThread();
+
void openHTTPServer();
void closeHTTPServer();
@@ -82,20 +86,29 @@
bool recvServers(const CIPComSocketHandler::TSocketDescriptor paSocket);
+ void removeSocketFromAccepted(const CIPComSocketHandler::TSocketDescriptor paSocket);
- struct HTTPServerWaiting{
+ void handlerReceivedWrongPath(const CIPComSocketHandler::TSocketDescriptor paSocket, CIEC_STRING& paPath);
+
+ void clearServerLayers();
+
+ void clearClientLayers();
+
+ void clearAcceptedSockets();
+
+ struct HTTPServerWaiting {
forte::com_infra::CHttpComLayer* mLayer;
CIEC_STRING mPath;
CSinglyLinkedList<CIPComSocketHandler::TSocketDescriptor> mSockets; //to handle many connections to the same path
};
- struct HTTPClientWaiting{
+ struct HTTPClientWaiting {
forte::com_infra::CHttpComLayer* mLayer;
CIPComSocketHandler::TSocketDescriptor mSocket;
CIEC_DATE_AND_TIME mStartTime;
};
- struct HTTPAcceptedSockets{
+ struct HTTPAcceptedSockets {
CIPComSocketHandler::TSocketDescriptor mSocket;
CIEC_DATE_AND_TIME mStartTime;
};
diff --git a/src/modules/HTTP/httplayer.cpp b/src/modules/HTTP/httplayer.cpp
index c4d20b8..bddbad8 100644
--- a/src/modules/HTTP/httplayer.cpp
+++ b/src/modules/HTTP/httplayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marc Jakobi - initial implementation for HTTP clients
@@ -21,247 +22,270 @@
using namespace forte::com_infra;
CHttpComLayer::CHttpComLayer(CComLayer* paUpperLayer, CBaseCommFB* paComFB) :
- CComLayer(paUpperLayer, paComFB), mInterruptResp(e_Nothing), mRequestType(e_NOTSET), mPort(80), mBufFillSize(0), hasOutputResponse(false), mCorrectlyInitialized(false), mHasParameter(false){
+ CComLayer(paUpperLayer, paComFB), mInterruptResp(e_Nothing), mRequestType(e_NOTSET), mPort(80), mBufFillSize(0), mCorrectlyInitialized(false),
+ mHasParameterInSD(false) {
memset(mRecvBuffer, 0, sizeof(mRecvBuffer));
}
-CHttpComLayer::~CHttpComLayer(){
+CHttpComLayer::~CHttpComLayer() {
closeConnection();
}
-EComResponse CHttpComLayer::openConnection(char *paLayerParameter){
+EComResponse CHttpComLayer::openConnection(char *paLayerParameter) {
EComResponse eRetVal = e_InitInvalidId;
- //Check that all connected data types of RDs and SDs are strings. See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=538391
- switch (m_poFb->getComServiceType()){
- case e_Server:
- if(1 == m_poFb->getNumSD()){
- mPath = paLayerParameter;
- getExtEvHandler<CHTTP_Handler>().addServerPath(this, mPath);
- eRetVal = e_InitOk;
- }
- else{
- DEVLOG_ERROR("[HTTP Layer] The FB with PARAM %s coudln't be initialized since only one SD is possible in HTTP Server which is for the response\n", paLayerParameter);
- }
- break;
- case e_Client:
- eRetVal = openClientConnection(paLayerParameter);
- break;
- case e_Publisher:
- case e_Subscriber:
- // HTTP does not use UDP
- eRetVal = e_ProcessDataInvalidObject;
- break;
+ if(checkSDsAndRDsType()) {
+ switch(m_poFb->getComServiceType()){
+ case e_Server:
+ if(1 == m_poFb->getNumSD()) {
+ mPath = paLayerParameter;
+ if(getExtEvHandler<CHTTP_Handler>().addServerPath(this, mPath)) {
+ eRetVal = e_InitOk;
+ }
+ } else {
+ DEVLOG_ERROR("[HTTP Layer] The FB with PARAM %s coudln't be initialized since only one SD is possible in HTTP Server which is for the response\n",
+ paLayerParameter);
+ }
+ break;
+ case e_Client:
+ eRetVal = openClientConnection(paLayerParameter);
+ break;
+ default:
+ // e_Publisher and e_Subscriber
+ eRetVal = e_ProcessDataInvalidObject;
+ break;
+ }
}
+
mCorrectlyInitialized = (eRetVal == e_InitOk);
return eRetVal;
}
-EComResponse CHttpComLayer::openClientConnection(char* paLayerParameter){
+EComResponse CHttpComLayer::openClientConnection(char* paLayerParameter) {
EComResponse eRetVal = e_InitInvalidId;
unsigned int numberOfSD = m_poFb->getNumSD();
- unsigned int numberOfRD = m_poFb->getNumRD();
- bool error = false;
- bool defaultResponse = true;
- bool defaultContent = true;
- char* helperChar = strchr(paLayerParameter, ';'); //look for type of request
- if(0 != helperChar){
- *helperChar = '\0';
- helperChar++;
- char* startOfContentType = strchr(helperChar, ';'); //look for content type
- if(0 != startOfContentType){
- *startOfContentType++ = '\0';
- char* startOfResponse = strchr(startOfContentType, ';');
- if(0 != startOfResponse){
- *startOfResponse++ = '\0';
- mExpectedRspCode = startOfResponse;
- defaultResponse = false;
- }
- mContentType = startOfContentType;
- defaultContent = false;
- }
- if(0 == strcmp(helperChar, "POST")){
- mRequestType = e_POST;
- }else if(0 == strcmp(helperChar, "PUT")){
- mRequestType = e_PUT;
- }else if(0 == strcmp(helperChar, "GET")){
- mRequestType = e_GET;
- }else{
- error = true;
- DEVLOG_ERROR("[HTTP Layer] GET, PUT or POST must be defined, but %s was defined instead\n", helperChar);
- }
- }else{
- error = true;
- DEVLOG_ERROR("[HTTP Layer] GET, PUT or POST must be defined, but none of them was defined\n");
- }
- if(!error){
- if(defaultResponse){
- mExpectedRspCode = "HTTP/1.1 200 OK";
- }
- if(defaultContent){
- mContentType = "text/html";
- }
+ if(2 == m_poFb->getNumRD()) {
+ CParameterParser parser(paLayerParameter, ';', 3); //IP:PORT;POST|PUT|GET;[content-type]
- helperChar = strchr(paLayerParameter, '?'); //look for parameters in path
- if(0 != helperChar && (e_PUT == mRequestType || e_POST == mRequestType)){
- *helperChar++ = '\0';
- mReqData = helperChar;
- mHasParameter = true;
- mContentType = "application/x-www-form-urlencoded";
- }
+ if(handleContentAndRequestType(parser, parser.parseParameters()) && handleAddress(parser[0], numberOfSD)) {
- helperChar = strchr(paLayerParameter, '/'); //look for path
- if(0 != helperChar){
- *helperChar++ = '\0';
- mPath = helperChar;
- helperChar = strchr(paLayerParameter, ':'); //look for port, if not found, it was already set to 80 in the constructor
- if(0 != helperChar){
- *helperChar++ = '\0';
- mPort = static_cast<TForteUInt16>(forte::core::util::strtoul(helperChar, 0, 10));
- }else{
- DEVLOG_INFO("[HTTP Layer] No port was found on the parameter, using default 80\n");
- }
- mHost = paLayerParameter;
-
- switch (mRequestType){
+ switch(mRequestType){
case e_PUT:
- case e_POST: {
- if("" != mReqData && 0 != numberOfSD){
- DEVLOG_WARNING("[HTTP Layer] Parameters in PARAMS are used for PUT/POST request data instead of the SDs\n");
- }else if("" == mReqData && 1 != numberOfSD){
- DEVLOG_ERROR("[HTTP Layer] You are using a POST/PUT FB but no data is defined as SD nor as parameters in PARAMS\n");
- break;
- }
-
- if(1 < numberOfRD){
- DEVLOG_ERROR("[HTTP Layer] A PUT/POST request with more than one output\n");
- break;
- }else{
- if(1 == numberOfRD){ //can have 0 RD, so response is ignored
- hasOutputResponse = true;
- }
+ case e_POST:
+ if(checkSDInPOSTAndPUT(numberOfSD)) {
CHttpParser::createPutPostRequest(mRequest, mHost, mPath, mReqData, mContentType, mRequestType);
eRetVal = e_InitOk;
DEVLOG_INFO("[HTTP Layer] FB with PUT/POST request initialized. Host: %s, Path: %s\n", mHost.getValue(), mPath.getValue());
}
break;
- }
- case e_GET: {
- if(1 == numberOfRD){
- CHttpParser::createGetRequest(mRequest, mHost, mPath);
- eRetVal = e_InitOk;
- hasOutputResponse = true;
- DEVLOG_INFO("[HTTP Layer] FB with GET request initialized. Host: %s, Path: %s\n", mHost.getValue(), mPath.getValue());
- }else if(0 == numberOfRD){
- DEVLOG_ERROR("[HTTP Layer] A GET request without and output doesn't make sense\n");
+ case e_GET:
+ if(0 != numberOfSD) {
+ DEVLOG_WARNING("[HTTP Layer] FB with GET request has SD which are ignore. If you want to have parameters, put them in the path in the PARAMS\n");
}
- else{
- DEVLOG_ERROR("[HTTP Layer] A GET request with more than one output\n");
- }
+ CHttpParser::createGetRequest(mRequest, mHost, mPath);
+ eRetVal = e_InitOk;
+ DEVLOG_INFO("[HTTP Layer] FB with GET request initialized. Host: %s, Path: %s\n", mHost.getValue(), mPath.getValue());
break;
- }
default:
break;
}
}
- else{
- DEVLOG_ERROR("[HTTP Layer] No path was found on the parameter\n");
- }
- }else{
- DEVLOG_ERROR("[HTTP Layer] Wrong PARAM value\n");
+ } else {
+ DEVLOG_ERROR(
+ "[HTTP Layer] A client should ALWAYS have exactly 2 RD, the first one for the response code, and the second for the response body, even for PUT and POST\n");
}
m_eConnectionState = e_Disconnected;
return eRetVal;
}
-EComResponse CHttpComLayer::sendData(void *paData, unsigned int){
+bool CHttpComLayer::checkSDInPOSTAndPUT(size_t paNoOfSD) {
+ bool evetythingOK = true;
+
+ if(0 == paNoOfSD) {
+ if("" == mReqData) {
+ DEVLOG_ERROR("[HTTP Layer] You are using a POST/PUT FB but no data is defined as SD nor as parameters in PARAMS\n");
+ evetythingOK = false;
+ }
+ } else if(1 == paNoOfSD) {
+ if("" != mReqData) {
+ DEVLOG_WARNING("[HTTP Layer] Parameters in PARAMS are ignored for PUT/POST request data and SDs are sent instead\n");
+ }
+ mHasParameterInSD = true;
+ } else {
+ DEVLOG_ERROR("[HTTP Layer] You can use maximum 1 SD\n");
+ evetythingOK = false;
+ }
+
+ return evetythingOK;
+}
+
+bool CHttpComLayer::checkSDsAndRDsType() {
+
+ for(size_t i = 2; i < m_poFb->getNumSD(); i++) {
+ CIEC_ANY::EDataTypeID typeToCheck = m_poFb->getDI(static_cast<unsigned int>(i))->getDataTypeID();
+ if(CIEC_ANY::e_ANY != typeToCheck && CIEC_ANY::e_STRING != typeToCheck && CIEC_ANY::e_WSTRING != typeToCheck) {
+ DEVLOG_ERROR("[HTTP Layer] Client called %s has an invalid SD_%d\n", CStringDictionary::getInstance().get(m_poFb->getInstanceNameId()), i);
+ return false;
+ }
+ }
+
+ for(size_t i = 2; i < m_poFb->getNumRD(); i++) {
+ CIEC_ANY::EDataTypeID typeToCheck = m_poFb->getDO(static_cast<unsigned int>(i))->getDataTypeID();
+ if(CIEC_ANY::e_ANY != typeToCheck && CIEC_ANY::e_STRING != typeToCheck && CIEC_ANY::e_WSTRING != typeToCheck) {
+ DEVLOG_ERROR("[HTTP Layer] Client called %s has an invalid RD_%d\n", CStringDictionary::getInstance().get(m_poFb->getInstanceNameId()), i);
+ return false;
+ }
+ }
+ return true;
+}
+
+bool CHttpComLayer::storeRequestType(const char* paType) {
+ bool everythingOK = true;
+ if(0 == strcmp(paType, "POST")) {
+ mRequestType = e_POST;
+ } else if(0 == strcmp(paType, "PUT")) {
+ mRequestType = e_PUT;
+ } else if(0 == strcmp(paType, "GET")) {
+ mRequestType = e_GET;
+ } else {
+ DEVLOG_ERROR("[HTTP Layer] GET, PUT or POST must be defined, but %s was defined instead\n", paType);
+ everythingOK = false;
+ }
+ return everythingOK;
+}
+
+bool CHttpComLayer::handleContentAndRequestType(CParameterParser &paParser, size_t paNoOfParameters) {
+ bool everythingOK = true;
+ if(1 < paNoOfParameters) {
+ if(3 == paNoOfParameters) {
+ mContentType = paParser[2];
+ } else {
+ mContentType = "text/html";
+ }
+ everythingOK = storeRequestType(paParser[1]);
+ } else {
+ everythingOK = false;
+ DEVLOG_ERROR("[HTTP Layer] Wrong parameters. It should be as IP:PORT;POST|PUT|GET;[content-type]\n");
+ }
+ return everythingOK;
+}
+
+bool CHttpComLayer::handleAddress(const char* paAddress, size_t paNoOfSDs) {
+ bool everythingOK = true;
+
+ //look for parameters
+ CParameterParser parser(paAddress, '?', 2); //IP:PORT/PATH?PARAMETERS
+ CIEC_STRING addressToParse = paAddress;
+ if(2 == parser.parseParameters() && (e_PUT == mRequestType || e_POST == mRequestType)) {
+ if(0 == paNoOfSDs) { //if SDs are present, the parameters in PARAMS are ignored
+ mReqData = parser[1];
+ mContentType = "application/x-www-form-urlencoded";
+ }
+ addressToParse = parser[0];
+ }
+
+ char* firstSlash = strchr(addressToParse.getValue(), '/');
+
+ if(firstSlash) {
+ mPath = firstSlash;
+ *firstSlash = '\0';
+ CParameterParser portParser(addressToParse.getValue(), ':', 2);
+ if(2 == portParser.parseParameters()) {
+ mHost = portParser[0];
+ mPort = static_cast<TForteUInt16>(forte::core::util::strtoul(portParser[1], 0, 10));
+ } else {
+ mHost = addressToParse.getValue();
+ DEVLOG_INFO("[HTTP Layer] No port was found on the parameter, using default 80\n");
+ }
+ } else {
+ everythingOK = false;
+ DEVLOG_ERROR("[HTTP Layer] No path was found on the parameter\n");
+ }
+ return everythingOK;
+}
+
+EComResponse CHttpComLayer::sendData(void *paData, unsigned int) {
mInterruptResp = e_Nothing;
- if(mCorrectlyInitialized){
- switch (m_poFb->getComServiceType()){
+ if(mCorrectlyInitialized) {
+ switch(m_poFb->getComServiceType()){
case e_Server:
sendDataAsServer(paData);
break;
case e_Client:
sendDataAsClient(paData);
break;
- case e_Publisher:
- case e_Subscriber:
- // HTTP does not use UDP
+ default:
+ // e_Publisher and e_Subscriber
break;
}
- }else{
+ } else {
DEVLOG_ERROR("[HTTP Layer]The FB is not initialized\n");
}
return mInterruptResp;
}
-void CHttpComLayer::sendDataAsServer(const void *paData){
+void CHttpComLayer::sendDataAsServer(const void *paData) {
bool error = false;
TConstIEC_ANYPtr apoSDs = static_cast<TConstIEC_ANYPtr>(paData);
- if(!serializeData(apoSDs[0])){
+ if(!serializeData(apoSDs[0])) {
error = true;
+ } else {
+ CHttpParser::createResponse(mRequest, "HTTP/1.1 200 OK", mContentType, mReqData);
}
- else{
- if(!CHttpParser::createResponse(mRequest, "200 OK", mContentType, mReqData)){
- DEVLOG_DEBUG("[HTTP Layer] Wrong Response request when changing the data\n");
- error = true;
- }
- }
- if(error){
+ if(error) {
getExtEvHandler<CHTTP_Handler>().forceClose(this);
mInterruptResp = e_ProcessDataDataTypeError;
- }
- else{
+ } else {
getExtEvHandler<CHTTP_Handler>().sendServerAnswer(this, mRequest);
mInterruptResp = e_ProcessDataOk;
}
}
-void CHttpComLayer::sendDataAsClient(const void *paData){
+void CHttpComLayer::sendDataAsClient(const void *paData) {
bool error = false;
- if(!mHasParameter && (e_PUT == mRequestType || e_POST == mRequestType)){
+ if(mHasParameterInSD) {
TConstIEC_ANYPtr apoSDs = static_cast<TConstIEC_ANYPtr>(paData);
- if(!serializeData(apoSDs[0])){
+ if(!serializeData(apoSDs[0])) {
error = true;
DEVLOG_ERROR("[HTTP Layer] Error in data serialization\n");
- }else{
- if(!CHttpParser::changePutPostData(mRequest, mReqData)){
+ } else {
+ if(!CHttpParser::changePutPostData(mRequest, mReqData)) {
DEVLOG_ERROR("[HTTP Layer] Wrong PUT/POST request when changing the data\n");
error = true;
}
}
}
- if(!error){
- if(getExtEvHandler<CHTTP_Handler>().sendClientData(this, mRequest)){
+ if(!error) {
+ if(getExtEvHandler<CHTTP_Handler>().sendClientData(this, mRequest)) {
mInterruptResp = e_ProcessDataOk;
- }else{
+ } else {
mInterruptResp = e_ProcessDataSendFailed;
DEVLOG_ERROR("[HTTP Layer] Sending request on TCP failed\n");
}
- }else{
+ } else {
mInterruptResp = e_ProcessDataDataTypeError;
}
}
-EComResponse CHttpComLayer::recvData(const void *paData, unsigned int paSize){
+EComResponse CHttpComLayer::recvData(const void *paData, unsigned int paSize) {
mInterruptResp = e_Nothing;
- if(mCorrectlyInitialized){
+ if(mCorrectlyInitialized) {
memcpy(mRecvBuffer, paData, (paSize > cg_unIPLayerRecvBufferSize) ? cg_unIPLayerRecvBufferSize : paSize);
- switch (m_poFb->getComServiceType()){
+ switch(m_poFb->getComServiceType()){
case e_Server:
DEVLOG_ERROR("[HTTP Layer] Receiving raw data as a Server? That's wrong, use the recvServerData function\n");
break;
case e_Client:
- if(0 == paData){ //timeout occurred
+ if(0 == paData) { //timeout occurred
mInterruptResp = e_ProcessDataRecvFaild;
- }else{
- if(e_ProcessDataOk != (mInterruptResp = handleHTTPResponse(mRecvBuffer))){
+ } else {
+ if(e_ProcessDataOk != (mInterruptResp = handleHTTPResponse(mRecvBuffer))) {
DEVLOG_ERROR("[HTTP Layer] FB with host: %s:%u couldn't handle the HTTP response\n", mHost.getValue(), mPort);
- }else{
+ } else {
//TODO Trigger event?
}
}
@@ -269,106 +293,88 @@
default:
break;
}
- }else{
+ } else {
DEVLOG_ERROR("[HTTP Layer]The FB is not initialized\n");
}
- if(e_ProcessDataOk == mInterruptResp){
+ if(e_ProcessDataOk == mInterruptResp) {
m_poFb->interruptCommFB(this);
}
return mInterruptResp;
}
-EComResponse forte::com_infra::CHttpComLayer::recvServerData(CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues){
+EComResponse forte::com_infra::CHttpComLayer::recvServerData(CSinglyLinkedList<CIEC_STRING>& paParameterNames,
+ CSinglyLinkedList<CIEC_STRING>& paParameterValues) {
mInterruptResp = e_Nothing;
bool failed = false;
- if(0 < m_poFb->getNumSD()){
+ if(0 < m_poFb->getNumSD()) {
unsigned int noOfParameters = 0;
- for(CSinglyLinkedList<CIEC_STRING>::Iterator iter = paParameterNames.begin(); iter != paParameterNames.end(); ++iter){
+ for(CSinglyLinkedList<CIEC_STRING>::Iterator iter = paParameterNames.begin(); iter != paParameterNames.end(); ++iter) {
noOfParameters++;
}
- if(noOfParameters == m_poFb->getNumRD()){
+ if(noOfParameters == m_poFb->getNumRD()) {
noOfParameters = 0;
- for(CSinglyLinkedList<CIEC_STRING>::Iterator iter = paParameterValues.begin(); iter != paParameterValues.end(); ++iter){
+ for(CSinglyLinkedList<CIEC_STRING>::Iterator iter = paParameterValues.begin(); iter != paParameterValues.end(); ++iter) {
m_poFb->getRDs()[noOfParameters].setValue(*iter);
}
//TODO: How do we handle the names? For now the parameters are put in the same order they arrived
- }else{
- DEVLOG_ERROR("[HTTP Layer] FB with path %s received a number of parameters of %u, while it has %u SDs\n", mPath.getValue(), static_cast<TForteUInt16>(noOfParameters), m_poFb->getNumSD());
+ } else {
+ DEVLOG_ERROR("[HTTP Layer] FB with path %s received a number of parameters of %u, while it has %u SDs\n", mPath.getValue(),
+ static_cast<TForteUInt16>(noOfParameters), m_poFb->getNumSD());
failed = true;
}
}
- if(failed){
+ if(failed) {
CIEC_STRING toSend;
- CIEC_STRING result = "400 Bad Request";
+ CIEC_STRING result = "HTTP/1.1 400 Bad Request";
mReqData = "";
- if(!CHttpParser::createResponse(toSend, result, mContentType, mReqData)){
- DEVLOG_DEBUG("[HTTP Layer] Wrong Response request when changing the data\n");
- getExtEvHandler<CHTTP_Handler>().forceCloseFromRecv(this);
- }
- else{
- getExtEvHandler<CHTTP_Handler>().sendServerAnswerFromRecv(this, toSend);
- }
+ CHttpParser::createResponse(toSend, result, mContentType, mReqData);
+ getExtEvHandler<CHTTP_Handler>().sendServerAnswerFromRecv(this, toSend);
mInterruptResp = e_ProcessDataDataTypeError;
- }
- else{
+ } else {
mInterruptResp = e_ProcessDataOk;
}
- if(e_ProcessDataOk == mInterruptResp){
+ if(e_ProcessDataOk == mInterruptResp) {
m_poFb->interruptCommFB(this);
}
return mInterruptResp;
}
-EComResponse CHttpComLayer::handleHTTPResponse(char *paData){
+EComResponse CHttpComLayer::handleHTTPResponse(char *paData) {
DEVLOG_DEBUG("[HTTP Layer] Handling received HTTP response\n");
EComResponse eRetVal = e_ProcessDataRecvFaild;
- if(0 != strstr(paData, "\r\n\r\n")){ // Verify that at least a body has been received
- if(m_poFb != 0){
- CIEC_ANY* apoRDs = m_poFb->getRDs();
- // Interpret HTTP response and set output status according to success/failure.
- CIEC_STRING output;
- bool success = true;
- if(e_GET == mRequestType){
- success = CHttpParser::parseGetResponse(output, paData, mExpectedRspCode);
- }
- else{
- success = CHttpParser::parsePutPostResponse(output, paData, mExpectedRspCode);
- }
- success ? eRetVal = e_ProcessDataOk : eRetVal = e_ProcessDataRecvFaild;
- // Set data output if possible
- if(success && hasOutputResponse){
- apoRDs[0].fromString(output.getValue());
- }
- }
- else{
- DEVLOG_ERROR("[HTTP Layer] No FB defined\n");
- }
- }
- else{
- DEVLOG_ERROR("[HTTP Layer] Invalid or incomplete HTTP response\n");
+ if(m_poFb != 0) {
+ CIEC_ANY* apoRDs = m_poFb->getRDs();
+ // Interpret HTTP response and set output status according to success/failure.
+ CIEC_STRING responseCode;
+ CIEC_STRING output;
+ CHttpParser::parseResponse(output, responseCode, paData) ? eRetVal = e_ProcessDataOk : eRetVal = e_ProcessDataRecvFaild;
+ apoRDs[0].fromString(responseCode.getValue());
+ apoRDs[1].fromString(output.getValue());
+ } else {
+ DEVLOG_ERROR("[HTTP Layer] No FB defined\n");
}
return eRetVal;
}
-EComResponse CHttpComLayer::processInterrupt(){
+EComResponse CHttpComLayer::processInterrupt() {
mInterruptResp = e_ProcessDataOk;
return mInterruptResp;
}
-void CHttpComLayer::closeConnection(){
- if (e_Server == m_poFb->getComServiceType()){
- getExtEvHandler<CHTTP_Handler>().removeServerPath(mPath);
+void CHttpComLayer::closeConnection() {
+ if(e_Server == m_poFb->getComServiceType()) {
+ getExtEvHandler<CHTTP_Handler>().removeServerPath(mPath);
}
getExtEvHandler<CHTTP_Handler>().forceClose(this);
}
-bool CHttpComLayer::serializeData(const CIEC_ANY& paCIECData){
- int bufferSize = paCIECData.getToStringBufferSize();
+bool CHttpComLayer::serializeData(const CIEC_ANY& paCIECData) {
+ size_t bufferSize = paCIECData.getToStringBufferSize();
char acDataValue[bufferSize];
int nConsumedBytes;
- switch (paCIECData.getDataTypeID()){
+ switch(paCIECData.getDataTypeID()){
case CIEC_ANY::e_WSTRING:
nConsumedBytes = static_cast<const CIEC_WSTRING&>(paCIECData).toUTF8(acDataValue, bufferSize, false);
break;
@@ -379,18 +385,18 @@
nConsumedBytes = paCIECData.toString(acDataValue, bufferSize);
break;
}
- if(-1 != nConsumedBytes){
+ if(-1 != nConsumedBytes) {
acDataValue[nConsumedBytes] = '\0';
}
mReqData = acDataValue;
return true;
}
-CIEC_STRING& forte::com_infra::CHttpComLayer::getHost(){
+CIEC_STRING& forte::com_infra::CHttpComLayer::getHost() {
return mHost;
}
-TForteUInt16 forte::com_infra::CHttpComLayer::getPort(){
+TForteUInt16 forte::com_infra::CHttpComLayer::getPort() {
return mPort;
}
diff --git a/src/modules/HTTP/httplayer.h b/src/modules/HTTP/httplayer.h
index 742eac8..7bc9e62 100644
--- a/src/modules/HTTP/httplayer.h
+++ b/src/modules/HTTP/httplayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marc Jakobi - initial implementation for HTTP clients
@@ -18,15 +19,13 @@
#include "comlayer.h"
#include <forte_string.h>
#include "ipcomlayer.h"
-
-
-class CIEC_ANY;
+#include "../../core/utils/parameterParser.h"
namespace forte {
namespace com_infra {
- class CHttpComLayer : public CComLayer{
+ class CHttpComLayer : public CComLayer {
public:
CHttpComLayer(CComLayer* paUpperLayer, CBaseCommFB* paComFB);
virtual ~CHttpComLayer();
@@ -43,7 +42,7 @@
EComResponse processInterrupt();
/** enum representing the HTTP request type */
- enum ERequestType{
+ enum ERequestType {
/** HTTP GET */
e_GET,
/** HTTP PUT */
@@ -58,9 +57,6 @@
TForteUInt16 getPort();
-
- protected:
-
private:
/**
@@ -79,6 +75,16 @@
EComResponse openClientConnection(char* paLayerParameter);
+ bool checkSDInPOSTAndPUT(size_t paNoOfSD);
+
+ bool checkSDsAndRDsType();
+
+ bool handleAddress(const char* paAddress, size_t paNoOfSDs);
+
+ bool handleContentAndRequestType(CParameterParser &paParser, size_t paNoOfParameters);
+
+ bool storeRequestType(const char* paType);
+
EComResponse mInterruptResp;
/** Represents the HTTP request type (0 = GET, 1 = PUT). */
@@ -97,17 +103,11 @@
char mRecvBuffer[cg_unIPLayerRecvBufferSize];
unsigned int mBufFillSize;
- /** Expected response code (default: HTTP/1.1 200 OK) */
- CIEC_STRING mExpectedRspCode;
-
CIEC_STRING mContentType;
- /** Ouput response is to be written to a data output */
- bool hasOutputResponse;
-
bool mCorrectlyInitialized;
- bool mHasParameter;
+ bool mHasParameterInSD;
};
}
diff --git a/src/modules/HTTP/httpparser.cpp b/src/modules/HTTP/httpparser.cpp
index d01ff31..db9d3c8 100644
--- a/src/modules/HTTP/httpparser.cpp
+++ b/src/modules/HTTP/httpparser.cpp
@@ -1,14 +1,15 @@
/*******************************************************************************
-* Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Marc Jakobi - initial implementation
-* Jose Cabral - Use CIEC_STRING instead of const char* and cleanning of functions
-********************************************************************************/
+ * Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Marc Jakobi - initial implementation
+ * Jose Cabral - Use CIEC_STRING instead of const char* and cleanning of functions
+ ********************************************************************************/
#include "httpparser.h"
#include <stdio.h>
@@ -17,18 +18,13 @@
using namespace forte::com_infra;
-CHttpParser::CHttpParser() {
-}
-
-CHttpParser::~CHttpParser(){
-}
-
void CHttpParser::createGetRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath) {
CHttpParser::addCommonHeader(paDest, paHost, paPath, CHttpComLayer::e_GET);
CHttpParser::addHeaderEnding(paDest);
}
-void CHttpParser::createPutPostRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, const CIEC_STRING& paData, const CIEC_STRING& paContentType, CHttpComLayer::ERequestType paType){
+void CHttpParser::createPutPostRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, const CIEC_STRING& paData,
+ const CIEC_STRING& paContentType, CHttpComLayer::ERequestType paType) {
CHttpParser::addCommonHeader(paDest, paHost, paPath, paType);
paDest.append("\r\nContent-type: ");
paDest.append(paContentType.getValue());
@@ -36,35 +32,88 @@
changePutPostData(paDest, paData);
}
-bool CHttpParser::changePutPostData(CIEC_STRING& paDest, const CIEC_STRING& paData){
+bool CHttpParser::changePutPostData(CIEC_STRING& paDest, const CIEC_STRING& paData) {
char* helperChar = strstr(paDest.getValue(), "length: ");
- if(0 != helperChar){
+ if(0 != helperChar) {
helperChar += 8;
*helperChar = '\0';
paDest = paDest.getValue(); //will shrink the length of the string to the new ending
- char contentLength[6]; //TODO: should this be fixed or not?
+ char contentLength[scmMaxLengthOfContent];
snprintf(contentLength, sizeof(contentLength), "%zu", strlen(paData.getValue()));
paDest.append(contentLength);
CHttpParser::addHeaderEnding(paDest);
paDest.append(paData.getValue());
return true;
- }
- else{ // wrong request?
+ } else { // wrong request?
DEVLOG_ERROR("[HTTP Parser] PUT/POST request was wrongly created\n");
return false;
}
}
+bool CHttpParser::parseResponse(CIEC_STRING& paBody, CIEC_STRING& paResponseCode, char* paSrc) {
+ if(CHttpParser::getHttpResponseCode(paResponseCode, paSrc)) {
+ char* helperChar = strstr(paSrc, "\r\n\r\n"); // Extract data from HTTP response char
+ if(0 != helperChar) {
+ helperChar += 4;
+ paBody = helperChar;
+ } else { // Empty response received
+ DEVLOG_INFO("[HTTP Parser] Empty content response received\n");
+ paBody = "";
+ }
+ return true;
+ }
+ return false;
+}
+
+bool forte::com_infra::CHttpParser::parseGetRequest(CIEC_STRING& paPath, CSinglyLinkedList<CIEC_STRING>& paParameterNames,
+ CSinglyLinkedList<CIEC_STRING>& paParameterValues, char* paData) {
+ char* helperChar = strstr(paData, "GET ");
+ if(helperChar != 0) {
+ helperChar += 4;
+ char* endOfPath = strstr(helperChar, " ");
+ if(endOfPath != 0) {
+ *endOfPath = '\0';
+ char* startOfParameters = strstr(paData, "?");
+ if(startOfParameters != 0) {
+ *startOfParameters = '\0';
+ startOfParameters++;
+ parseGETParameters(startOfParameters, paParameterNames, paParameterValues);
+ }
+ paPath = helperChar;
+ } else {
+ DEVLOG_ERROR("[HTTP Parser] Invalid HTTP Get request. No space after path found\n");
+ return false;
+ }
+ return true;
+ } else {
+ DEVLOG_ERROR("[HTTP Parser] Invalid HTTP Get request. No GET string found\n");
+ return false;
+ }
+}
+
+void forte::com_infra::CHttpParser::createResponse(CIEC_STRING& paDest, const CIEC_STRING& paResult, const CIEC_STRING& paContentType,
+ const CIEC_STRING& paData) {
+ paDest = paResult;
+ if(paData.empty()) {
+ paDest.append("\r\n");
+ } else {
+ paDest.append("\r\nContent-type: ");
+ paDest.append(paContentType.getValue());
+ paDest.append("\r\nContent-length: ");
+ changePutPostData(paDest, paData);
+ }
+}
+
void CHttpParser::addCommonHeader(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, CHttpComLayer::ERequestType paType) {
switch(paType){
case CHttpComLayer::e_GET:
- paDest = "GET /";
+ paDest = "GET ";
break;
case CHttpComLayer::e_PUT:
- paDest = "PUT /";
+ paDest = "PUT ";
break;
case CHttpComLayer::e_POST:
- paDest = "POST /";
+ paDest = "POST ";
break;
default:
DEVLOG_ERROR("[HTTP Parser] Unexpected HTTP Type when adding header\n");
@@ -81,91 +130,28 @@
paDest.append("\r\n\r\n");
}
-bool CHttpParser::parseGetResponse(CIEC_STRING& paDest, char* paSrc, CIEC_STRING& paExpectedCode){
- CIEC_STRING receivedCode;
- if(CHttpParser::getHttpResponseCode(receivedCode, paSrc)){
- if(receivedCode == paExpectedCode || "*" == paExpectedCode){
- char* helperChar = strstr(paSrc, "\r\n\r\n"); // Extract data from HTTP GET response char
- if(0 != helperChar){
- helperChar += 4;
- paDest = helperChar;
- return true;
- }else{ // Empty response received?
- DEVLOG_INFO("[HTTP Parser] Empty GET content response received\n");
- paDest = "";
- return false;
- }
- }else{
- DEVLOG_INFO("[HTTP Parser] Unexpected GET response code. Expected was %s and received was: \n", paExpectedCode.getValue(), receivedCode.getValue());
- }
- }
- return false;
-}
-
-bool CHttpParser::parsePutPostResponse(CIEC_STRING& paDest, char* paSrc, CIEC_STRING& paExpectedCode) {
- if(CHttpParser::getHttpResponseCode(paDest, paSrc)){
- if(paDest == paExpectedCode || "*" == paExpectedCode){
- return true;
- }
- else{
- DEVLOG_ERROR("[HTTP Parser] Unexpected PUT response code\n");
- }
- }
- return false;
-}
-
bool CHttpParser::getHttpResponseCode(CIEC_STRING& paDest, char* paSrc) {
+ //HTTP-Version SP Status-Code SP Reason-Phrase CRLF (SP = space)
char* helperChar = strstr(paSrc, "\r\n");
- if (helperChar != 0) {
+ if(helperChar != 0) {
*helperChar = '\0';
- paDest = paSrc;
+ CParameterParser parser(paSrc, ' ');
+ if(3 <= parser.parseParameters()) { //Reason-Phrase can contain spaces in it
+ paDest = parser[1];
+ } else {
+ DEVLOG_ERROR("[HTTP Parser] Invalid HTTP response. The status line is not well defined\n");
+ return false;
+ }
*helperChar = '\r';
return true;
- }
- else {
- DEVLOG_ERROR("[HTTP Parser] Invalid HTTP response\n");
- paDest = "Invalid response";
+ } else {
+ DEVLOG_ERROR("[HTTP Parser] Invalid HTTP response. No line ending was found.\n");
return false;
}
}
-bool forte::com_infra::CHttpParser::parseGetRequest(CIEC_STRING& paPath, CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues, char* paData){
- char* helperChar = strstr(paData, "GET ");
- if (helperChar != 0) {
- helperChar += 4;
- char* endOfPath = strstr(helperChar, " ");
- if (endOfPath != 0) {
- *endOfPath = '\0';
- char* startOfParameters = strstr(paData, "?");
- if(startOfParameters != 0){
- *startOfParameters = '\0';
- startOfParameters++;
- parseParameters(startOfParameters, paParameterNames, paParameterValues);
- }
- paPath = helperChar;
- }else{
- DEVLOG_ERROR("[HTTP Parser] Invalid HTTP Get request. No space after path found\n");
- return false;
- }
- return true;
- }
- else {
- DEVLOG_ERROR("[HTTP Parser] Invalid HTTP Get request. No GET string found\n");
- return false;
- }
-}
-
-bool forte::com_infra::CHttpParser::createResponse(CIEC_STRING& paDest, const CIEC_STRING& paResult, const CIEC_STRING& paContentType, const CIEC_STRING& paData){
- paDest.append("HTTP/1.1 ");
- paDest.append(paResult.getValue());
- paDest.append("\r\nContent-type: ");
- paDest.append(paContentType.getValue());
- paDest.append("\r\nContent-length: ");
- changePutPostData(paDest, paData);
- return true;
-}
-
-unsigned int forte::com_infra::CHttpParser::parseParameters(char* paParameters, CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues){
+unsigned int forte::com_infra::CHttpParser::parseGETParameters(char* paParameters, CSinglyLinkedList<CIEC_STRING>& paParameterNames,
+ CSinglyLinkedList<CIEC_STRING>& paParameterValues) {
paParameterNames.clearAll();
paParameterValues.clearAll();
@@ -173,12 +159,12 @@
char* startOfName = paParameters;
bool endOfParameters = false;
- while('\0' != *startOfName && !endOfParameters){
+ while('\0' != *startOfName && !endOfParameters) {
char* startOfValue = strstr(startOfName, "=");
- if(0 != startOfValue){
+ if(0 != startOfValue) {
*startOfValue = '\0';
startOfValue++;
- }else{
+ } else {
paParameterNames.clearAll();
paParameterValues.clearAll();
retVal = 0;
@@ -186,46 +172,18 @@
}
char* nextName = strstr(startOfValue, "&");
endOfParameters = false;
- if(0 != nextName){
+ if(0 != nextName) {
*nextName = '\0';
- }else{
+ } else {
endOfParameters = true;
}
paParameterNames.pushBack(startOfName);
paParameterValues.pushBack(startOfValue);
retVal++;
- if(!endOfParameters){
+ if(!endOfParameters) {
startOfName = ++nextName;
}
}
return retVal;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/HTTP/httpparser.h b/src/modules/HTTP/httpparser.h
index 50a2f43..ca1ff7f 100644
--- a/src/modules/HTTP/httpparser.h
+++ b/src/modules/HTTP/httpparser.h
@@ -1,14 +1,15 @@
/*******************************************************************************
-* Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Marc Jakobi - initial implementation
-* Jose Cabral - Use CIEC_STRING instead of const char* and cleanning of functions
-********************************************************************************/
+ * Copyright (c) 2017-2018 Marc Jakobi, github.com/MrcJkb, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Marc Jakobi - initial implementation
+ * Jose Cabral - Use CIEC_STRING instead of const char* and cleanning of functions
+ ********************************************************************************/
#ifndef _HTTPIPPARSER_H_
#define _HTTPIPPARSER_H_
@@ -21,63 +22,103 @@
namespace com_infra {
- class CHttpParser{
+ class CHttpParser {
public:
+ /**
+ * Generates a HTTP GET request. The request is written to paDest
+ * @param paDest place to store the request
+ * @param paHost host of the server to connect
+ * @param paPath path to look for
+ */
+ static void createGetRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath);
+
+ /**
+ * Generates a HTTP PUT request. The request is written to paDest.
+ * @param paDest place to store the request
+ * @param paHost host of the server to connect
+ * @param paPath path to access in the server
+ * @param paData data in the body to send to the server
+ * @param paContentType content type of the request
+ * @param paType PUT or POST
+ */
+ static void createPutPostRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, const CIEC_STRING& paData,
+ const CIEC_STRING& paContentType, CHttpComLayer::ERequestType paType);
+
+ /**
+ * Takes a previous PUT request in paDest, and updates the content of it
+ * @param paDest old request
+ * @param paData new data
+ * @return true if no error happened, false otherwise
+ */
+ static bool changePutPostData(CIEC_STRING& paDest, const CIEC_STRING& paData);
+
+ /**
+ * Extracts data from a response to a HTTP request
+ * @param paDest place to store the body of the response
+ * @param paResponseCode place to store the response code of the response
+ * @param paSrc response received
+ * @return true if no error happened, false otherwise
+ */
+ static bool parseResponse(CIEC_STRING& paBody, CIEC_STRING& paResponseCode, char* paSrc);
+
+ /**
+ * Parse a GET request received as a server
+ * @param paPath place to store the received path
+ * @param paParameterNames place to store the names of the parameters
+ * @param paParameterValues place to store the value of the parameters
+ * @param paData the received GET request
+ * @return true if no error happened, false otherwise
+ */
+ static bool parseGetRequest(CIEC_STRING& paPath, CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues,
+ char* paData);
+
+ /**
+ * Create a HTTP response
+ * @param paDest
+ * @param paResult the status line of the response
+ * @param paContentType the content type of the response
+ * @param paData the body of the response
+ */
+ static void createResponse(CIEC_STRING& paDest, const CIEC_STRING& paResult, const CIEC_STRING& paContentType, const CIEC_STRING& paData);
+
+ private:
CHttpParser();
virtual ~CHttpParser();
/**
- * Generates a HTTP GET request. The request is written to paDest.
- * paHost: host to send the request, e.g., 192.168.1.144:80
- * paPath: path to retrieve, e.g., /example/path
+ * Creates the common parts of the headers of the supported types
+ * @param paDest place to store the header
+ * @param paHost server host to be written in the header
+ * @param paPath the path to be written in the header
+ * @param paType the type of request to be written in the header
*/
- static void createGetRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath);
- /**
- * Generates a HTTP PUT request. The request is written to paDest.
- * paHost: host to send the request, e.g., 192.168.1.144:80
- * paPath: path to send, e.g., /example/path
- * data: Data to be written to the server location.
- */
- static void createPutPostRequest(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, const CIEC_STRING& paData, const CIEC_STRING& paContentType, CHttpComLayer::ERequestType paType);
- /**
- * Extracts data from a response to a HTTP GET request stored in paSrc and writes it to dest.
- * If the response header is not as paExpectedCode, the header is copied instead.
- * Returns true if the response indicates a successful request.
- */
- static bool parseGetResponse(CIEC_STRING& paDest, char* paSrc, CIEC_STRING& paExpectedCode);
- /**
- * Extracts the header from an HTTP PUT response.
- * Returns true if the response indicates a successful request.
- */
- static bool parsePutPostResponse(CIEC_STRING& paDest, char* paSrc, CIEC_STRING& paExpectedCode);
-
- /**
- * Takes a previous PUT request in paDest, and updates the content of it
- * Returns true if the response indicates a successful request.
- */
- static bool changePutPostData(CIEC_STRING& paDest, const CIEC_STRING& paData);
-
- static bool parseGetRequest(CIEC_STRING& paPath, CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues, char* paData);
-
- static bool createResponse(CIEC_STRING& paDest, const CIEC_STRING& paResult, const CIEC_STRING& paContentType, const CIEC_STRING& paData);
-
- private:
-
- /** Creates the common parts of the headers of the supported types */
static void addCommonHeader(CIEC_STRING& paDest, const CIEC_STRING& paHost, const CIEC_STRING& paPath, CHttpComLayer::ERequestType paType);
- /** Appends the ending "\r\n\r\n" to the HTTP request */
+
+ /**
+ * Appends the ending "\r\n\r\n" to the HTTP request
+ * @param paDest place to store the header
+ */
static void addHeaderEnding(CIEC_STRING& paDest);
- /** Extracts the HTTP response code from paSrc and writes it to paDest */
+
+ /**
+ * Extracts the HTTP response
+ * @param paDest place to store the header
+ * @param paSrc source of the reponse
+ * @return true if no error happened, false otherwise
+ */
static bool getHttpResponseCode(CIEC_STRING& paDest, char* paSrc);
/**
- *
+ * Parse parameter of GET request as a server
* @param paParameters The string containing the parameters of the request
* @param paParameterNames The result where the names of the parameters are stored
* @param paParameterValues The result where the values of the parameters are stored
* @return The number of parameters found. If wrong parameters are found, the result is treated as no parameters, meaning it returns zero
*/
- static unsigned int parseParameters(char* paParameters, CSinglyLinkedList<CIEC_STRING>& paParameterNames, CSinglyLinkedList<CIEC_STRING>& paParameterValues);
+ static unsigned int parseGETParameters(char* paParameters, CSinglyLinkedList<CIEC_STRING>& paParameterNames,
+ CSinglyLinkedList<CIEC_STRING>& paParameterValues);
+
+ static const size_t scmMaxLengthOfContent = 6; //The limit of the amount to send in a PUT/POST request is set to 99999 bytes for now. Change this to try to send more
};
}
}
diff --git a/src/modules/IEC61131-3/Arithmetic/CMakeLists.txt b/src/modules/IEC61131-3/Arithmetic/CMakeLists.txt
index a193076..a21018a 100644
--- a/src/modules/IEC61131-3/Arithmetic/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Arithmetic/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2014 ACIN, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2011 - 2014 ACIN, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD.cpp b/src/modules/IEC61131-3/Arithmetic/F_ADD.cpp
index 3d93737..aa0f902 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD.h b/src/modules/IEC61131-3/Arithmetic/F_ADD.h
index e85a8fd..d227228 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.cpp
index 022c771..a9975ea 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.h b/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.h
index 4018c49..7dd7c3c 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD_DT_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.cpp
index 77c4f5f..64b8312 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.h b/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.h
index 09635da..9521512 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_ADD_TOD_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_DIV.cpp b/src/modules/IEC61131-3/Arithmetic/F_DIV.cpp
index 666bf63..c3d3978 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_DIV.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_DIV.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Arithmetic/F_DIV.h b/src/modules/IEC61131-3/Arithmetic/F_DIV.h
index 7282d25..afe416b 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_DIV.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_DIV.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.cpp
index caeb254..a2356ef 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.h b/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.h
index 6cf9d52..8abaf87 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_DIVTIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_EXPT.cpp b/src/modules/IEC61131-3/Arithmetic/F_EXPT.cpp
index d24d981..c9dd8a2 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_EXPT.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_EXPT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_EXPT.h b/src/modules/IEC61131-3/Arithmetic/F_EXPT.h
index 5f20d93..043542f 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_EXPT.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_EXPT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MOD.cpp b/src/modules/IEC61131-3/Arithmetic/F_MOD.cpp
index b3cbec1..0de0cc1 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MOD.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_MOD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MOD.h b/src/modules/IEC61131-3/Arithmetic/F_MOD.h
index 9af3aa1..0c061cb 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MOD.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_MOD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MOVE.cpp b/src/modules/IEC61131-3/Arithmetic/F_MOVE.cpp
index fcee713..6cd2728 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MOVE.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_MOVE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MOVE.h b/src/modules/IEC61131-3/Arithmetic/F_MOVE.h
index 5959d26..944b8cc 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MOVE.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_MOVE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MUL.cpp b/src/modules/IEC61131-3/Arithmetic/F_MUL.cpp
index 270d991..004b348 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MUL.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_MUL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MUL.h b/src/modules/IEC61131-3/Arithmetic/F_MUL.h
index 8468726..eee61ff 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MUL.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_MUL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MULTIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_MULTIME.cpp
index 6e62a6c..ca96464 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MULTIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_MULTIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_MULTIME.h b/src/modules/IEC61131-3/Arithmetic/F_MULTIME.h
index fccbf69..b11ac33 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_MULTIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_MULTIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB.cpp
index 9baf772..1cbeb60 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB.h b/src/modules/IEC61131-3/Arithmetic/F_SUB.h
index f719174..8e6f60e 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.cpp
index fdb7942..73cf9e2 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.h b/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.h
index 647650d..3a04aee 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DATE_DATE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.cpp
index 9c8fd01..a7a2e77 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.h b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.h
index f25509c..94d150f 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_DT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.cpp
index d761a9a..4f2c9ef 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.h b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.h
index a2c752d..c166afe 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_DT_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.cpp
index a4e5ec6..dca5169 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.h b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.h
index e4f7543..0ae995f 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.cpp b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.cpp
index b2da952..c53085c 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.h b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.h
index 78b8ca7..2aa0794 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_SUB_TOD_TOD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_TRUNC.cpp b/src/modules/IEC61131-3/Arithmetic/F_TRUNC.cpp
index 6b4cb88..ebf46d1 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_TRUNC.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/F_TRUNC.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/F_TRUNC.h b/src/modules/IEC61131-3/Arithmetic/F_TRUNC.h
index 3973c16..c52a9a3 100644
--- a/src/modules/IEC61131-3/Arithmetic/F_TRUNC.h
+++ b/src/modules/IEC61131-3/Arithmetic/F_TRUNC.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Arithmetic/GEN_ADD.cpp b/src/modules/IEC61131-3/Arithmetic/GEN_ADD.cpp
index b7d3c00..6cd308b 100644
--- a/src/modules/IEC61131-3/Arithmetic/GEN_ADD.cpp
+++ b/src/modules/IEC61131-3/Arithmetic/GEN_ADD.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Arithmetic/GEN_ADD.h b/src/modules/IEC61131-3/Arithmetic/GEN_ADD.h
index 1eacb96..b40a26c 100644
--- a/src/modules/IEC61131-3/Arithmetic/GEN_ADD.h
+++ b/src/modules/IEC61131-3/Arithmetic/GEN_ADD.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/IEC61131-3/BistableElements/CMakeLists.txt b/src/modules/IEC61131-3/BistableElements/CMakeLists.txt
index 0cd2ddf..505ce4c 100644
--- a/src/modules/IEC61131-3/BistableElements/CMakeLists.txt
+++ b/src/modules/IEC61131-3/BistableElements/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2012 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2012 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/BistableElements/FB_RS.cpp b/src/modules/IEC61131-3/BistableElements/FB_RS.cpp
index f9fb6f2..b5560fa 100644
--- a/src/modules/IEC61131-3/BistableElements/FB_RS.cpp
+++ b/src/modules/IEC61131-3/BistableElements/FB_RS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BistableElements/FB_RS.h b/src/modules/IEC61131-3/BistableElements/FB_RS.h
index b27631f..029b88d 100644
--- a/src/modules/IEC61131-3/BistableElements/FB_RS.h
+++ b/src/modules/IEC61131-3/BistableElements/FB_RS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BistableElements/FB_SR.cpp b/src/modules/IEC61131-3/BistableElements/FB_SR.cpp
index d8291aa..9d62872 100644
--- a/src/modules/IEC61131-3/BistableElements/FB_SR.cpp
+++ b/src/modules/IEC61131-3/BistableElements/FB_SR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BistableElements/FB_SR.h b/src/modules/IEC61131-3/BistableElements/FB_SR.h
index ddf0045..a784cc0 100644
--- a/src/modules/IEC61131-3/BistableElements/FB_SR.h
+++ b/src/modules/IEC61131-3/BistableElements/FB_SR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/CMakeLists.txt b/src/modules/IEC61131-3/BitwiseOperators/CMakeLists.txt
index 0aab60d..92ee24f 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/CMakeLists.txt
+++ b/src/modules/IEC61131-3/BitwiseOperators/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2014 ACIN, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2011 - 2014 ACIN, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_AND.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_AND.cpp
index f711cf1..f886cc4 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_AND.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_AND.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_AND.h b/src/modules/IEC61131-3/BitwiseOperators/F_AND.h
index 363ac5a..a8f04bd 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_AND.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_AND.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_NOT.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_NOT.cpp
index 4f75944..f6322bf 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_NOT.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_NOT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_NOT.h b/src/modules/IEC61131-3/BitwiseOperators/F_NOT.h
index f024a6b..206a74f 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_NOT.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_NOT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_OR.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_OR.cpp
index 2c3c024..e2c272c 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_OR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_OR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_OR.h b/src/modules/IEC61131-3/BitwiseOperators/F_OR.h
index a22b46f..a615f7b 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_OR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_OR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_ROL.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_ROL.cpp
index 25cc1ba..7fd8cfd 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_ROL.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_ROL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_ROL.h b/src/modules/IEC61131-3/BitwiseOperators/F_ROL.h
index d06b4cc..c950568 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_ROL.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_ROL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -57,12 +58,11 @@
template<typename T> void calculateValue(){
T oIn;
- #ifdef FORTE_USE_64BIT_DATATYPES
- CIEC_ULINT oN;
- #else
- CIEC_UDINT oN;
- #endif //#ifdef FORTE_USE_64BIT_DATATYPES
-
+#ifdef FORTE_USE_64BIT_DATATYPES
+ CIEC_ULINT oN;
+#else //FORTE_USE_64BIT_DATATYPES
+ CIEC_UDINT oN;
+#endif //FORTE_USE_64BIT_DATATYPES
oIn.saveAssign(IN());
oN.saveAssign(N());
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_ROR.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_ROR.cpp
index 8f7c407..e3e1f9a 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_ROR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_ROR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_ROR.h b/src/modules/IEC61131-3/BitwiseOperators/F_ROR.h
index 1e0bfc2..a1c53da 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_ROR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_ROR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -57,11 +58,11 @@
template<typename T> void calculateValue(){
T oIn;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
CIEC_ULINT oN;
- #else
+#else // FORTE_USE_64BIT_DATATYPES
CIEC_UDINT oN;
- #endif //#ifdef FORTE_USE_64BIT_DATATYPES
+#endif // FORTE_USE_64BIT_DATATYPES
oIn.saveAssign(IN());
oN.saveAssign(N());
OUT().saveAssign(ROR(oIn, oN));
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_SHL.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_SHL.cpp
index 76875e0..ea1e4cf 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_SHL.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_SHL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_SHL.h b/src/modules/IEC61131-3/BitwiseOperators/F_SHL.h
index b9cd7dc..67c2d83 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_SHL.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_SHL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 -2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -56,11 +57,11 @@
template<typename T> void calculateValue(){
T oIn;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
CIEC_ULINT oN;
- #else
+#else //FORTE_USE_64BIT_DATATYPES
CIEC_UDINT oN;
- #endif //#ifdef FORTE_USE_64BIT_DATATYPES
+#endif //FORTE_USE_64BIT_DATATYPES
oIn.saveAssign(IN());
oN.saveAssign(N());
OUT().saveAssign(SHL(oIn, oN));
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_SHR.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_SHR.cpp
index 131be3a..5d882c9 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_SHR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_SHR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_SHR.h b/src/modules/IEC61131-3/BitwiseOperators/F_SHR.h
index d8ba852..26c3e9b 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_SHR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_SHR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -57,11 +58,11 @@
template<typename T> void calculateValue(){
T oIn;
- #ifdef FORTE_USE_64BIT_DATATYPES
+#ifdef FORTE_USE_64BIT_DATATYPES
CIEC_ULINT oN;
- #else
+#else //FORTE_USE_64BIT_DATATYPES
CIEC_UDINT oN;
- #endif //#ifdef FORTE_USE_64BIT_DATATYPES
+#endif //FORTE_USE_64BIT_DATATYPES
oIn.saveAssign(IN());
oN.saveAssign(N());
OUT().saveAssign(SHR(oIn, oN));
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_XOR.cpp b/src/modules/IEC61131-3/BitwiseOperators/F_XOR.cpp
index 0a03c6e..6b7a448 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_XOR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_XOR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/F_XOR.h b/src/modules/IEC61131-3/BitwiseOperators/F_XOR.h
index d69db94..5661239 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/F_XOR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/F_XOR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl Ingo Hengy
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.cpp b/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.cpp
index fb24a92..c540647 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.h b/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.h
index befb380..37fed1f 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_AND.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.cpp b/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.cpp
index 185f6c7..9a2706a 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.h b/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.h
index fe5b693..5a16a7f 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_OR.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.cpp b/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.cpp
index f67b069..ce230f0 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.h b/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.h
index 22282b6..2844d79 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/GEN_XOR.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/IEC61131-3/BitwiseOperators/genbitbase.cpp b/src/modules/IEC61131-3/BitwiseOperators/genbitbase.cpp
index a39a8aa..b898642 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/genbitbase.cpp
+++ b/src/modules/IEC61131-3/BitwiseOperators/genbitbase.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c)2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/IEC61131-3/BitwiseOperators/genbitbase.h b/src/modules/IEC61131-3/BitwiseOperators/genbitbase.h
index 7358abb..7e84610 100644
--- a/src/modules/IEC61131-3/BitwiseOperators/genbitbase.h
+++ b/src/modules/IEC61131-3/BitwiseOperators/genbitbase.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c)2018 Johannes Kepler University
*
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/IEC61131-3/CMakeLists.txt b/src/modules/IEC61131-3/CMakeLists.txt
index c808577..09d4eb4 100644
--- a/src/modules/IEC61131-3/CMakeLists.txt
+++ b/src/modules/IEC61131-3/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Alois Zoitl
+# Copyright (c) 2011 - 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/CharacterString/CMakeLists.txt b/src/modules/IEC61131-3/CharacterString/CMakeLists.txt
index 8dffe57..92afd8c 100644
--- a/src/modules/IEC61131-3/CharacterString/CMakeLists.txt
+++ b/src/modules/IEC61131-3/CharacterString/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/CharacterString/F_CONCAT.cpp b/src/modules/IEC61131-3/CharacterString/F_CONCAT.cpp
index 4fc245a..bbd21fe 100644
--- a/src/modules/IEC61131-3/CharacterString/F_CONCAT.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_CONCAT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_CONCAT.h b/src/modules/IEC61131-3/CharacterString/F_CONCAT.h
index ef0550d..78ae710 100644
--- a/src/modules/IEC61131-3/CharacterString/F_CONCAT.h
+++ b/src/modules/IEC61131-3/CharacterString/F_CONCAT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.cpp b/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.cpp
index 0e8e49d..8475a7c 100644
--- a/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.h b/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.h
index 99c4c53..7d629cd 100644
--- a/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.h
+++ b/src/modules/IEC61131-3/CharacterString/F_CONCAT_DATE_TOD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_DELETE.cpp b/src/modules/IEC61131-3/CharacterString/F_DELETE.cpp
index bf53bfc..52ae1b9 100644
--- a/src/modules/IEC61131-3/CharacterString/F_DELETE.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_DELETE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_DELETE.h b/src/modules/IEC61131-3/CharacterString/F_DELETE.h
index a037214..09be27f 100644
--- a/src/modules/IEC61131-3/CharacterString/F_DELETE.h
+++ b/src/modules/IEC61131-3/CharacterString/F_DELETE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_FIND.cpp b/src/modules/IEC61131-3/CharacterString/F_FIND.cpp
index 7f4be0b..572c001 100644
--- a/src/modules/IEC61131-3/CharacterString/F_FIND.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_FIND.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2018 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/CharacterString/F_FIND.h b/src/modules/IEC61131-3/CharacterString/F_FIND.h
index 5e9fe1d..d759c7b 100644
--- a/src/modules/IEC61131-3/CharacterString/F_FIND.h
+++ b/src/modules/IEC61131-3/CharacterString/F_FIND.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2018 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/CharacterString/F_INSERT.cpp b/src/modules/IEC61131-3/CharacterString/F_INSERT.cpp
index b375f86..8ecfda2 100644
--- a/src/modules/IEC61131-3/CharacterString/F_INSERT.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_INSERT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_INSERT.h b/src/modules/IEC61131-3/CharacterString/F_INSERT.h
index c5e9f00..6b7e1d0 100644
--- a/src/modules/IEC61131-3/CharacterString/F_INSERT.h
+++ b/src/modules/IEC61131-3/CharacterString/F_INSERT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_LEFT.cpp b/src/modules/IEC61131-3/CharacterString/F_LEFT.cpp
index 3ce5ff4..e63458c 100644
--- a/src/modules/IEC61131-3/CharacterString/F_LEFT.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_LEFT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_LEFT.h b/src/modules/IEC61131-3/CharacterString/F_LEFT.h
index d9f2e14..492dbdd 100644
--- a/src/modules/IEC61131-3/CharacterString/F_LEFT.h
+++ b/src/modules/IEC61131-3/CharacterString/F_LEFT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_LEN.cpp b/src/modules/IEC61131-3/CharacterString/F_LEN.cpp
index 9f47bd0..7bcdaa4 100644
--- a/src/modules/IEC61131-3/CharacterString/F_LEN.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_LEN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_LEN.h b/src/modules/IEC61131-3/CharacterString/F_LEN.h
index 27295a0..8ffeb06 100644
--- a/src/modules/IEC61131-3/CharacterString/F_LEN.h
+++ b/src/modules/IEC61131-3/CharacterString/F_LEN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_MID.cpp b/src/modules/IEC61131-3/CharacterString/F_MID.cpp
index 5627bcb..16e5ee4 100644
--- a/src/modules/IEC61131-3/CharacterString/F_MID.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_MID.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_MID.h b/src/modules/IEC61131-3/CharacterString/F_MID.h
index 064d32b..0b7ce20 100644
--- a/src/modules/IEC61131-3/CharacterString/F_MID.h
+++ b/src/modules/IEC61131-3/CharacterString/F_MID.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_REPLACE.cpp b/src/modules/IEC61131-3/CharacterString/F_REPLACE.cpp
index e4e72ab..37eaf5e 100644
--- a/src/modules/IEC61131-3/CharacterString/F_REPLACE.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_REPLACE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_REPLACE.h b/src/modules/IEC61131-3/CharacterString/F_REPLACE.h
index 4ba2a2d..93e3cf9 100644
--- a/src/modules/IEC61131-3/CharacterString/F_REPLACE.h
+++ b/src/modules/IEC61131-3/CharacterString/F_REPLACE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_RIGHT.cpp b/src/modules/IEC61131-3/CharacterString/F_RIGHT.cpp
index 03e2bec..42e892d 100644
--- a/src/modules/IEC61131-3/CharacterString/F_RIGHT.cpp
+++ b/src/modules/IEC61131-3/CharacterString/F_RIGHT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/CharacterString/F_RIGHT.h b/src/modules/IEC61131-3/CharacterString/F_RIGHT.h
index 63c065d..d9021c2 100644
--- a/src/modules/IEC61131-3/CharacterString/F_RIGHT.h
+++ b/src/modules/IEC61131-3/CharacterString/F_RIGHT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/CMakeLists.txt b/src/modules/IEC61131-3/Comparison/CMakeLists.txt
index 76261d1..66dd2cd 100644
--- a/src/modules/IEC61131-3/Comparison/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Comparison/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Alois Zoitl
+# Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Comparison/F_EQ.cpp b/src/modules/IEC61131-3/Comparison/F_EQ.cpp
index a60837d..9153f9c 100644
--- a/src/modules/IEC61131-3/Comparison/F_EQ.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_EQ.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/F_EQ.h b/src/modules/IEC61131-3/Comparison/F_EQ.h
index 9ad5cff..845d5ca 100644
--- a/src/modules/IEC61131-3/Comparison/F_EQ.h
+++ b/src/modules/IEC61131-3/Comparison/F_EQ.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2019 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/F_GE.cpp b/src/modules/IEC61131-3/Comparison/F_GE.cpp
index 5f38d42..de7169b 100644
--- a/src/modules/IEC61131-3/Comparison/F_GE.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_GE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/F_GE.h b/src/modules/IEC61131-3/Comparison/F_GE.h
index bce810a..1b36ec5 100644
--- a/src/modules/IEC61131-3/Comparison/F_GE.h
+++ b/src/modules/IEC61131-3/Comparison/F_GE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/F_GT.cpp b/src/modules/IEC61131-3/Comparison/F_GT.cpp
index 3556197..1883e60 100644
--- a/src/modules/IEC61131-3/Comparison/F_GT.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_GT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Comparison/F_GT.h b/src/modules/IEC61131-3/Comparison/F_GT.h
index a3dab1e..39cc965 100644
--- a/src/modules/IEC61131-3/Comparison/F_GT.h
+++ b/src/modules/IEC61131-3/Comparison/F_GT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Matthias Plasch, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Comparison/F_LE.cpp b/src/modules/IEC61131-3/Comparison/F_LE.cpp
index e5b7ec6..d6fd8ae 100644
--- a/src/modules/IEC61131-3/Comparison/F_LE.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_LE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/F_LE.h b/src/modules/IEC61131-3/Comparison/F_LE.h
index 410b5d0..606a863 100644
--- a/src/modules/IEC61131-3/Comparison/F_LE.h
+++ b/src/modules/IEC61131-3/Comparison/F_LE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/F_LT.cpp b/src/modules/IEC61131-3/Comparison/F_LT.cpp
index a4d6a5d..582af16 100644
--- a/src/modules/IEC61131-3/Comparison/F_LT.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_LT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/F_LT.h b/src/modules/IEC61131-3/Comparison/F_LT.h
index e160eaa..5a28147 100644
--- a/src/modules/IEC61131-3/Comparison/F_LT.h
+++ b/src/modules/IEC61131-3/Comparison/F_LT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/F_NE.cpp b/src/modules/IEC61131-3/Comparison/F_NE.cpp
index 18a4532..7d67764 100644
--- a/src/modules/IEC61131-3/Comparison/F_NE.cpp
+++ b/src/modules/IEC61131-3/Comparison/F_NE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/F_NE.h b/src/modules/IEC61131-3/Comparison/F_NE.h
index 7b7c8ba..c7b87fb 100644
--- a/src/modules/IEC61131-3/Comparison/F_NE.h
+++ b/src/modules/IEC61131-3/Comparison/F_NE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2019 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Comparison/tests/CMakeLists.txt b/src/modules/IEC61131-3/Comparison/tests/CMakeLists.txt
index 37e9321..d861186 100644
--- a/src/modules/IEC61131-3/Comparison/tests/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Comparison/tests/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2013 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl
+# Copyright (c) 2013 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.cpp b/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.cpp
index 9973524..49210c7 100644
--- a/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.cpp
+++ b/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -39,25 +40,25 @@
triggerEvent(0);
//Test correct order of outgoing events
- if(pullFirstChainEventID() != 0)
+ if(pullFirstChainEventID() != 0) {
bResult = false;
-
+ }
//Test if event chain is empty
- if(!eventChainEmpty())
+ if(!eventChainEmpty()) {
bResult = false;
-
+ }
//verify data output as both are zero the value value should be true
- if(m_oOut_OUT != true)
+ if(m_oOut_OUT != true) {
bResult = false;
-
+ }
m_oIN1.fromString("T#500ms");
m_oIN2.fromString("T#500ms");
triggerEvent(0);
- if(m_oOut_OUT != true)
+ if(m_oOut_OUT != true) {
bResult = false;
-
+ }
return bResult;
}
@@ -69,9 +70,9 @@
triggerEvent(0);
- if(m_oOut_OUT != false)
+ if(m_oOut_OUT != false) {
bResult = false;
-
+ }
return bResult;
}
@@ -83,8 +84,8 @@
triggerEvent(0);
- if(m_oOut_OUT != false)
+ if(m_oOut_OUT != false) {
bResult = false;
-
+ }
return bResult;
}
diff --git a/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.h b/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.h
index 7fad3ea..cd18335 100644
--- a/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.h
+++ b/src/modules/IEC61131-3/Comparison/tests/F_EQ_TIME_tester.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.cpp b/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.cpp
index 168980a..6518567 100644
--- a/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.cpp
+++ b/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -39,25 +40,25 @@
triggerEvent(0);
//Test correct order of outgoing events
- if(pullFirstChainEventID() != 0)
+ if(pullFirstChainEventID() != 0) {
bResult = false;
-
+ }
//Test if event chain is empty
- if(!eventChainEmpty())
+ if(!eventChainEmpty()) {
bResult = false;
-
+ }
//verify data output as both are zero the value value should be true
- if(m_oOut_OUT != false)
+ if(m_oOut_OUT != false) {
bResult = false;
-
+ }
m_oIN1.fromString("T#500ms");
m_oIN2.fromString("T#500ms");
triggerEvent(0);
- if(m_oOut_OUT != false)
+ if(m_oOut_OUT != false) {
bResult = false;
-
+ }
return bResult;
}
@@ -69,9 +70,9 @@
triggerEvent(0);
- if(m_oOut_OUT != true)
+ if(m_oOut_OUT != true) {
bResult = false;
-
+ }
return bResult;
}
@@ -83,8 +84,8 @@
triggerEvent(0);
- if(m_oOut_OUT != false)
+ if(m_oOut_OUT != false) {
bResult = false;
-
+ }
return bResult;
}
diff --git a/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.h b/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.h
index 9328bdf..0ef4574 100644
--- a/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.h
+++ b/src/modules/IEC61131-3/Comparison/tests/F_GT_TIME_tester.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/BCD/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/BCD/CMakeLists.txt
index f76ab5d..cc3e384 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/BCD/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.cpp
index a6d587a..dc03e70 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.h b/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.h
index 9e9045d..f34df81 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_BYTE_BCD_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.cpp
index 5609472..40af215 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.h
index 1d62ae3..b72e3d1 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_DWORD_BCD_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.cpp
index 818de5b..68ce1a7 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.h
index 43def73..e72cb90 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_LWORD_BCD_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.cpp
index 564ab6e..71d7072 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.h b/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.h
index 7492b1e..f34a786 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_UDINT_TO_BCD_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.cpp
index ae2d6de..f21d377 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.h b/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.h
index 54ed75b..7ffe9b0 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_UINT_TO_BCD_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.cpp
index 92123d9..7e0afd4 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.h b/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.h
index 2db042f..8bb6d62 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_ULINT_TO_BCD_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.cpp
index f0a6c13..b19f31a 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.h b/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.h
index e94fe33..170c0c7 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_USINT_TO_BCD_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.cpp
index 0b62af7..eaa25e4 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.h b/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.h
index 93ae5af..76975c8 100644
--- a/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/BCD/F_WORD_BCD_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/BOOL/CMakeLists.txt
index 8daa0bd..0a34133 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/BOOL/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2012 - 2013 ACIN, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# * Martin Melik Merkumians - Removes invalid casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.cpp
index 6f23a41..f4c828d 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.h
index 741e20e..14b106c 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.cpp
index 8be2673..b5cb607 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.h
index cbdad97..f1a123f 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.cpp
index acb8820..3cea87e 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.h
index 01b9fb3..a7eb8f5 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.cpp
index f4ba17a..cabf0ef 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.h
index ad2bf85..eebfa6a 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.cpp
index f79bdce..a7e7bb2 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.h
index 1d815f0..f808acb 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.cpp
index d91dd08..1d4fa61 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.h
index 2f153a2..282e6e1 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.cpp
index 91cc698..461ccf2 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.h
index 91111bc..3b5aebd 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.cpp
index 7f18543..1b1d484 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.h
index 2a413c8..c08198f 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.cpp
index 27980d4..432c5bd 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.h
index 6d69308..e84fcec 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.cpp
index 81e1550..fdf6454 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.h
index 0a3f1cd..6538f03 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.cpp
index 8c31b66..792df03 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.h
index 51d38b7..445ac39 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.cpp
index 6fc26b8..ffb0d82 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.h
index ace7775..664de5f 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.cpp
index af5a598..4329720 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.h
index 61969f6..3c6012a 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.cpp
index 0e540a7..7ba480f 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.h
index 4ba265c..ecab09a 100644
--- a/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/BOOL/F_BOOL_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/BYTE/CMakeLists.txt
index a94ebe4..a7173a7 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/BYTE/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.cpp
index 5277fe2..0b68797 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.h
index 2ea3224..764508c 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.cpp
index 116497c..75ba179 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.h
index 4d58c8e..3574418 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.cpp
index f55d294..a2d5556 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.h
index bbecfd4..62b7fde 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.cpp
index dbd9663..784b2dd 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.h
index 1fb6f0b..c9407a0 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.cpp
index 0063b36..158fc1e 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.h
index d781498..312c6c9 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.cpp
index 4903e9d..beba762 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.h
index 599d96e..62177e0 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.cpp
index 956a111..742fe89 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.h
index 9574347..2c9826d 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.cpp
index 6486604..2f0e803 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.h
index 9bb8578..68fca9d 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.cpp
index af0cfac..9f0f26a 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.h
index 00f4f4b..75d67b1 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.cpp
index 7d8a21b..6ab95a7 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.h
index f7d20cd..c36c563 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.cpp
index 0e2bfee..d352b9a 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.h
index 915e609..be7033c 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.cpp
index f8f63b6..1cc3591 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.h
index f60a0f6..131057a 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.cpp
index 4a34382..f1ca7ce 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.h
index 71aa061..4abae0b 100644
--- a/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/BYTE/F_BYTE_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/CMakeLists.txt
index f682553..abfe8a8 100644
--- a/src/modules/IEC61131-3/Conversion/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2013 ACIN, Profacor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2011 - 2013 ACIN, Profacor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Conversion/DINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/DINT/CMakeLists.txt
index 4294497..c59a1f4 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/DINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.cpp
index 53e21f6..ce1db2d 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.h
index bcc0609..c6257eb 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.cpp
index f2b1f32..e3b2008 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.h
index 5ff1e72..a95cf3c 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.cpp
index d2afb97..80579a9 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.h
index 160e3e7..c1c4ec4 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.cpp
index 4b1a170..501017f 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.h
index 7c26787..150ce96 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.cpp
index cb3ce94..7000e73 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.h
index e547d31..65126d6 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.cpp
index 8a812c6..7cd3973 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.h
index 5ac6e3d..f6eb30d 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.cpp
index 27e1dc9..4cfe812 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.h
index 3a785f7..a4e6f23 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.cpp
index 378ad39..2e82a20 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.h
index c76abc8..45e4833 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.cpp
index 3689e3c..ae15d4e 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.h
index 68cbfc9..26878e8 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.cpp
index 61ce25d..0b03d05 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.h
index 3536697..35fec53 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.cpp
index 304f851..5f131e3 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.h
index 7930059..d5b70fe 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.cpp
index b014798..9225b36 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.h
index ed6f21a..bbed02b 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.cpp
index 706f26b..94adf67 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.h
index e3947a6..5f206cd 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.cpp
index afca646..834b38e 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.h
index c2f6a33..938f040 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.cpp
index 639bfd1..54446b9 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.h
index 6e29546..e1a2871 100644
--- a/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/DINT/F_DINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/DT/CMakeLists.txt
index 2323531..a63df29 100644
--- a/src/modules/IEC61131-3/Conversion/DT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/DT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.cpp b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.cpp
index 9154b07..9ccc9ce 100644
--- a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.cpp
+++ b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.h b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.h
index 9d520d1..6c57d35 100644
--- a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.h
+++ b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_DATE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.cpp b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.cpp
index fc2a5c1..351e88b 100644
--- a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.h b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.h
index 1491af5..483c9d7 100644
--- a/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.h
+++ b/src/modules/IEC61131-3/Conversion/DT/F_DT_TO_TOD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/DWORD/CMakeLists.txt
index ff02557..dfe8de9 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/DWORD/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.cpp
index c304cdf..f652347 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.h
index ecb7c3c..c172287 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.cpp
index 1c6b063..3643f90 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.h
index 99f0352..6e460d0 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.cpp
index d97f389..6c6d699 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.h
index 5a7cc24..080a407 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.cpp
index 564b4f7..1887dd3 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.h
index 009ed1e..867ab8b 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.cpp
index 229ee1c..89695f4 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.h
index f3c86dd..c0c250f 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.cpp
index 10c45f2..b222835 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.h
index 32e4875..5c2a776 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.cpp
index 810c3cc..a26a36c 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.h
index 2454e58..fea14d5 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.cpp
index fcc8da9..479a226 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.h
index 259ff56..8083e63 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.cpp
index ad054dc..0e5d515 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.h
index c1da293..9f5d2b5 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.cpp
index 9ea4b22..c930651 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.h
index cc53351..9cf12c4 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.cpp
index 7cc4471..703dac7 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.h
index d85b5e1..e8db4d8 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.cpp
index 4c8465c..8774595 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.h
index eecc30b..bd2c1e7 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.cpp
index e3f4419..f1e49e4 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.h
index 04b6fb3..37de6d8 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.cpp
index 8ea8d39..2bfd4f3 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.h
index fdbdabc..899e39a 100644
--- a/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/DWORD/F_DWORD_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/INT/CMakeLists.txt
index 8b79a18..26b1112 100644
--- a/src/modules/IEC61131-3/Conversion/INT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/INT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.cpp
index 03a5356..3bcbab5 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.h
index 6f09f97..020ba7e 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.cpp
index 7905c77..48f25ba 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.h
index 97b8ad8..03f0c5e 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.cpp
index c7085aa..c2c95c6 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.h
index eeb97e6..4b53ae3 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.cpp
index 9cd0c6c..7931d16 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.h
index 0e6d6bc..c354643 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.cpp
index c55bd18..4cebbe7 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.h
index aeec94a..eaec87d 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.cpp
index 3d26d23..28e0cc0 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.h
index bce9daf..810ac9d 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.cpp
index 3445a97..db2d71a 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.h
index b2c1d91..804fc47 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.cpp
index a5612f5..fefd219 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.h
index a15f7c5..ff229a9 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.cpp
index b869e5d..1489d09 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.h
index c32f876..995bf74 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.cpp
index 24bded6..50823e6 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.h
index 22efebf..33e7245 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.cpp
index 14a7173..c2ff9d8 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.h
index f12572f..ab50d63 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.cpp
index 41177fa..7473744 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.h
index 26f980c..0f51aa4 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.cpp
index cdeb0e6..d381be6 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.h
index bcaf1ea..af8011f 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.cpp
index fb7aa80..982add6 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.h
index 4ce0a93..923bae1 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.cpp
index 9eabbf4..c76e0e3 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.h
index 8807fd7..e679b34 100644
--- a/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/INT/F_INT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/LINT/CMakeLists.txt
index 186eb5a..1d27551 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/LINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.cpp
index 0b22745..7c33af2 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.h
index 01fbd94..d49853a 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.cpp
index d2f3b75..212ca71 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.h
index 314a550..6ab973b 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.cpp
index 1dd762f..ea7062d 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.h
index ed8d2b6..471fff2 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.cpp
index 7c09af8..dccec04 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.h
index 316447c..fd77ce1 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.cpp
index 83e5b30..4801614 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.h
index e4cb10c..745800e 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.cpp
index 720b1f3..b55db80 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.h
index fa133db..238b761 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.cpp
index eba3edc..ed9425d 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.h
index a27af36..2394919 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.cpp
index ea650f7..5b10b43 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.h
index e5d8e45..a05cc3b 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.cpp
index c8c98e1..84d7092 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.h
index 18bfd9c..ffa4320 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.cpp
index 50f41fe..953f801 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.h
index 4428e8b..a9082b8 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.cpp
index a4d7575..9bae4f2 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.h
index 8d504a3..6bba130 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.cpp
index 212a20e..8c61356 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.h
index 81026ca..9bccb66 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.cpp
index 62f25f8..bc8949f 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.h
index cd99bc8..5ad6c61 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.cpp
index 1f9fca9..a8d9029 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.h
index 5dc2261..387f90a 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.cpp
index 5de354c..f35735f 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.h
index e10fe80..671694d 100644
--- a/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/LINT/F_LINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/LREAL/CMakeLists.txt
index 3eb66fd..4abcfcc 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/LREAL/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.cpp
index 3bacab8..0b91290 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.h
index 50c2722..e7eb1e6 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.cpp
index 6cff687..16f3bae 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.h
index 65e649f..3829032 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.cpp
index 7b2e584..c902e4f 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.h
index 241fa40..2e84b78 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.cpp
index 740bf88..a000df9 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.h
index 5dd80a8..a2deede 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.cpp
index f4ca85b..cec93f8 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.h
index 47a7261..1d3701b 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.cpp
index ac157ac..900bd2e 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.h
index 3bd87f4..2090805 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.cpp
index d7621dd..1638b9c 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.h
index 6a1642f..afe6d48 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.cpp
index 89ad46b..eb9da22 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.h
index 557f9e7..584ed91 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.cpp
index 39d4143..9692580 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.h
index 6a5331a..a9b825a 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.cpp
index 6c3a931..85b770c 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.h
index c221fca..40814b8 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.cpp
index 6314cb7..c96ae4b 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.h
index 542490d..ca2f645 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.cpp
index f3b8852..f460ce2 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.h
index f10c4bb..5da056f 100644
--- a/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/LREAL/F_LREAL_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/LWORD/CMakeLists.txt
index 19e4f71..78c0aa6 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/LWORD/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.cpp
index e6e56b0..cb6a374 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.h
index 95c844b..a2b0c6c 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.cpp
index fa72474..5be3ecb 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.h
index 69c80b5..9c34ed4 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.cpp
index 7ed3edb..059d4b9 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.h
index 6eb2f53..a905d43 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.cpp
index 7f3a465..d9980a0 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.h
index 4b4979a..4e9f54b 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.cpp
index cad6eed..b990650 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.h
index 96628da..2aebf5c 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.cpp
index 5254db0..b72840a 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.h
index 2a7e799..43bbf8b 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.cpp
index d59d661..534a540 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.h
index 72a67e4..2982cf3 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.cpp
index f63fb91..e8779f7 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.h
index 71eb545..810e4c1 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.cpp
index 97f3b29..030739b 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.h
index 9d20242..43478b9 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.cpp
index 1405ef9..41e139f 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.h
index ef1ecdb..7ee8ea9 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_UINT.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.cpp
index b53f68e..552e4ea 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.h
index 1258a55..24d8ba5 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.cpp
index 8ca5aca..9080734 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.h
index 3526b64..1ec70a9 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.cpp
index e7c7791..2c30c3c 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.h
index cfe9733..201543f 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.cpp
index 95a6c36..15c8693 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.h
index 704b56d..1bfcf06 100644
--- a/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/LWORD/F_LWORD_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/REAL/CMakeLists.txt
index 2ef59fd..c676af5 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/REAL/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.cpp
index 23b277f..f17b26f 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.h
index 3907023..584726c 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.cpp
index 0db1d40..17bcbda 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.h
index e464035..92ba3bb 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.cpp
index 3f14426..8a83de5 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.h
index f83443c..8b50e0a 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.cpp
index b34dfe9..adcc2dd 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.h
index d119929..baffa63 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.cpp
index f22a6b6..0af414b 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.h
index d41321c..257981f 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.cpp
index b9cdc86..ad9ad27 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.h
index df8cf43..f269b58 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.cpp
index 607406d..3c53ab0 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.h
index bb8da24..7ce018a 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.cpp
index dc7e4de..3fcb84d 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.h
index 58e95fd..9806e44 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.cpp
index 40343f1..a66088d 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.h
index 3d48546..2001dfb 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.cpp
index 4e64d45..039f458 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.h
index 23807db..6ee296a 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.cpp
index fcb397a..31ad2fb 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.h
index 69cc6d3..829c047 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.cpp
index 14a0d4e..50bc20d 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.h
index e9caad9..31d6ca4 100644
--- a/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/REAL/F_REAL_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/SINT/CMakeLists.txt
index 918e161..99af2cb 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/SINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.cpp
index 15d7360..6b9a045 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.h
index d460e06..ba83bf7 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.cpp
index a4b588b..5fca3f2 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.h
index 8eaf709..9e8801d 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.cpp
index 842a0fc..bf6eeb8 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.h
index a63f050..0cedc53 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.cpp
index 2f09485..25c382b 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.h
index 44a7e00..31dcd21 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.cpp
index fe75195..dd89879 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.h
index 1f2b5ce..b24e1f7 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.cpp
index 8ba0d6b..7af365e 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.h
index 0b1cb10..12bc057 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.cpp
index bae4739..78cbab0 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.h
index 96f0a29..6be8a32 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.cpp
index 3778c2e..01a24d2 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.h
index 37067e9..7745aaa 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.cpp
index 65c3682..900abbc 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.h
index 49d1e07..abe70cb 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.cpp
index da1b23a..548599e 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.h
index a3f0a67..70949e3 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.cpp
index 89a5073..0ec1fea 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.h
index 2489f0e..11a95dc 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.cpp
index cf381bb..ae0d6e0 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.h
index 9f92a0f..a08b4cf 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.cpp
index 7dbc381..a99592e 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.h
index f27a921..983bbc4 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.cpp
index 295bb49..1467b5d 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.h
index 936edc6..9513314 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.cpp
index 116f920..0a5978c 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.h
index a654f76..a3ec99a 100644
--- a/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/SINT/F_SINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/STRING/CMakeLists.txt
index df96941..d564cf2 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/STRING/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2012 - 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.cpp
index 92609ee..35c4ac4 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.h
index 35c2ef3..bc094a1 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BOOL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.cpp
index b6e419c..9175cc5 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.h
index 03490c9..5204547 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.cpp
index ee46706..88883ba 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.h
index 35050fe..fedeb18 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.cpp
index 2cedca9..d87daf9 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.h
index 4ee5264..1d590f4 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.cpp
index efa8526..9f4b001 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 ACIN, fortis GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.h
index 0c641af..7b20513 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.cpp
index c6a94d3..68cd124 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.h
index f60c963..bccb0ea 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.cpp
index e826a4b..9e08ba4 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.h
index 95198d1..456a185 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.cpp
index 2c7b852..570e3f1 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.h
index 33e650c..3bb75c1 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.cpp
index 19f77ab..8321bdb 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.h
index e2418f0..9f36bb8 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.cpp
index f9b62e0..6a18eb3 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.h
index d14e83d..db5dc12 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.cpp
index 2764ded..e073166 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.h
index 8f85296..5c323d6 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.cpp
index ea2502a..aa195da 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.h
index e541f1c..5ab5117 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.cpp
index 621b5af..3933e51 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.h
index 9ed6810..28502c5 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.cpp
index a9f8293..518526d 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.h
index c05ed3c..fe17baa 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.cpp
index 650ed5e..d985256 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.h
index 7267ddf..e32c410 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.cpp
index 06b3588..e41bdd5 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.h
index d1d832f..3ee9061 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.cpp
index 70bdbf6..d1e9879 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.h
index 299b489..3ada0ee 100644
--- a/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/STRING/F_STRING_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/TIME/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/TIME/CMakeLists.txt
index 5d40712..4db9a05 100644
--- a/src/modules/IEC61131-3/Conversion/TIME/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/TIME/CMakeLists.txt
@@ -1,20 +1,37 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2012 - 2013 ACIN, 2018 TU Vienna/ACIN, 2019 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
+# * Martin Melik-Merkumians - adding TIME IN RESOLUTION TO FBs
# *******************************************************************************/
#############################################################################
# TIME_TO_xxx Conversion
#############################################################################
forte_add_sourcefile_hcpp(F_TIME_TO_STRING)
+if(FORTE_USE_64BIT_DATATYPES)
+ forte_add_sourcefile_hcpp(F_TIME_IN_S_TO_LINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_MS_TO_LINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_US_TO_LINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_NS_TO_LINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_S_TO_ULINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_MS_TO_ULINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_US_TO_ULINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_NS_TO_ULINT)
+ forte_add_sourcefile_hcpp(F_TIME_IN_S_TO_LREAL)
+ forte_add_sourcefile_hcpp(F_TIME_IN_MS_TO_LREAL)
+ forte_add_sourcefile_hcpp(F_TIME_IN_US_TO_LREAL)
+ forte_add_sourcefile_hcpp(F_TIME_IN_NS_TO_LREAL)
+endif()
+
if(FORTE_USE_WSTRING_DATATYPE)
forte_add_sourcefile_hcpp(F_TIME_TO_WSTRING)
endif(FORTE_USE_WSTRING_DATATYPE)
\ No newline at end of file
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.cpp
new file mode 100644
index 0000000..e1f6aaf
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_MS_TO_LINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_LINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_LINT, g_nStringIdF_TIME_IN_MS_TO_LINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anDataOutputTypeIds[] = {g_nStringIdLINT};
+
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_LINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_MS_TO_LINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_MS_TO_LINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_LINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_MS_TO_LINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_MS_TO_LINT::alg_REQ(void){
+OUT() = TIME_IN_MS_TO_LINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.h
new file mode 100644
index 0000000..428e3d3
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_MS_TO_LINT_H_
+#define _F_TIME_IN_MS_TO_LINT_H_
+
+#include <simplefb.h>
+#include <forte_lint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_MS_TO_LINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_LINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LINT &OUT() {
+ return *static_cast<CIEC_LINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_MS_TO_LINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_MS_TO_LINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.cpp
new file mode 100644
index 0000000..9c60271
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_MS_TO_LREAL.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_LREAL_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_LREAL, g_nStringIdF_TIME_IN_MS_TO_LREAL)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anDataOutputTypeIds[] = {g_nStringIdLREAL};
+
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_LREAL::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_MS_TO_LREAL::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_MS_TO_LREAL::alg_REQ(void){
+OUT() = TIME_IN_MS_TO_LREAL((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.h
new file mode 100644
index 0000000..dd20ce0
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_LREAL.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_MS_TO_LREAL_H_
+#define _F_TIME_IN_MS_TO_LREAL_H_
+
+#include <simplefb.h>
+#include <forte_time.h>
+#include <forte_lreal.h>
+
+class FORTE_F_TIME_IN_MS_TO_LREAL: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_LREAL)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LREAL &OUT() {
+ return *static_cast<CIEC_LREAL*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_MS_TO_LREAL(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_MS_TO_LREAL(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.cpp
new file mode 100644
index 0000000..0fb17cf
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_MS_TO_ULINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_ULINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_ULINT, g_nStringIdF_TIME_IN_MS_TO_ULINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anDataOutputTypeIds[] = {g_nStringIdULINT};
+
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_MS_TO_ULINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_MS_TO_ULINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_MS_TO_ULINT::alg_REQ(void){
+OUT() = TIME_IN_MS_TO_ULINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.h
new file mode 100644
index 0000000..a97cd4c
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_MS_TO_ULINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_MS_TO_ULINT_H_
+#define _F_TIME_IN_MS_TO_ULINT_H_
+
+#include <simplefb.h>
+#include <forte_ulint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_MS_TO_ULINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_MS_TO_ULINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ULINT &OUT() {
+ return *static_cast<CIEC_ULINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_MS_TO_ULINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_MS_TO_ULINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.cpp
new file mode 100644
index 0000000..1824958
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_NS_TO_LINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_LINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_LINT, g_nStringIdF_TIME_IN_NS_TO_LINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anDataOutputTypeIds[] = {g_nStringIdLINT};
+
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_LINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_NS_TO_LINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_NS_TO_LINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_LINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_NS_TO_LINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_NS_TO_LINT::alg_REQ(void){
+OUT() = TIME_IN_NS_TO_LINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.h
new file mode 100644
index 0000000..7156796
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_NS_TO_LINT_H_
+#define _F_TIME_IN_NS_TO_LINT_H_
+
+#include <simplefb.h>
+#include <forte_lint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_NS_TO_LINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_LINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LINT &OUT() {
+ return *static_cast<CIEC_LINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_NS_TO_LINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_NS_TO_LINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.cpp
new file mode 100644
index 0000000..742d85f
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_NS_TO_LREAL.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_LREAL_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_LREAL, g_nStringIdF_TIME_IN_NS_TO_LREAL)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anDataOutputTypeIds[] = {g_nStringIdLREAL};
+
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_LREAL::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_NS_TO_LREAL::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_NS_TO_LREAL::alg_REQ(void){
+OUT() = TIME_IN_NS_TO_LREAL((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.h
new file mode 100644
index 0000000..8ae0ad1
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_LREAL.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_NS_TO_LREAL_H_
+#define _F_TIME_IN_NS_TO_LREAL_H_
+
+#include <simplefb.h>
+#include <forte_time.h>
+#include <forte_lreal.h>
+
+class FORTE_F_TIME_IN_NS_TO_LREAL: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_LREAL)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LREAL &OUT() {
+ return *static_cast<CIEC_LREAL*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_NS_TO_LREAL(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_NS_TO_LREAL(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.cpp
new file mode 100644
index 0000000..f4c3ef8
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_NS_TO_ULINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_ULINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_ULINT, g_nStringIdF_TIME_IN_NS_TO_ULINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anDataOutputTypeIds[] = {g_nStringIdULINT};
+
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_NS_TO_ULINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_NS_TO_ULINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_NS_TO_ULINT::alg_REQ(void){
+OUT() = TIME_IN_NS_TO_ULINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.h
new file mode 100644
index 0000000..4108558
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_NS_TO_ULINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_NS_TO_ULINT_H_
+#define _F_TIME_IN_NS_TO_ULINT_H_
+
+#include <simplefb.h>
+#include <forte_ulint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_NS_TO_ULINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_NS_TO_ULINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ULINT &OUT() {
+ return *static_cast<CIEC_ULINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_NS_TO_ULINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_NS_TO_ULINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.cpp
new file mode 100644
index 0000000..1140e15
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_S_TO_LINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_LINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_LINT, g_nStringIdF_TIME_IN_S_TO_LINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anDataOutputTypeIds[] = {g_nStringIdLINT};
+
+const TForteInt16 FORTE_F_TIME_IN_S_TO_LINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_S_TO_LINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_S_TO_LINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_S_TO_LINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_S_TO_LINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_S_TO_LINT::alg_REQ(void){
+OUT() = TIME_IN_S_TO_LINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.h
new file mode 100644
index 0000000..d07d9f2
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_S_TO_LINT_H_
+#define _F_TIME_IN_S_TO_LINT_H_
+
+#include <simplefb.h>
+#include <forte_lint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_S_TO_LINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_LINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LINT &OUT() {
+ return *static_cast<CIEC_LINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_S_TO_LINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_S_TO_LINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.cpp
new file mode 100644
index 0000000..6de0b70
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_S_TO_LREAL.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_LREAL_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_LREAL, g_nStringIdF_TIME_IN_S_TO_LREAL)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anDataOutputTypeIds[] = {g_nStringIdLREAL};
+
+const TForteInt16 FORTE_F_TIME_IN_S_TO_LREAL::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_S_TO_LREAL::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_S_TO_LREAL::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_S_TO_LREAL::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_LREAL::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_S_TO_LREAL::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_S_TO_LREAL::alg_REQ(void){
+OUT() = TIME_IN_S_TO_LREAL((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.h
new file mode 100644
index 0000000..28d5bdb
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_LREAL.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_S_TO_LREAL_H_
+#define _F_TIME_IN_S_TO_LREAL_H_
+
+#include <simplefb.h>
+#include <forte_time.h>
+#include <forte_lreal.h>
+
+class FORTE_F_TIME_IN_S_TO_LREAL: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_LREAL)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LREAL &OUT() {
+ return *static_cast<CIEC_LREAL*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_S_TO_LREAL(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_S_TO_LREAL(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.cpp
new file mode 100644
index 0000000..832c260
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_S_TO_ULINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_ULINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_ULINT, g_nStringIdF_TIME_IN_S_TO_ULINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anDataOutputTypeIds[] = {g_nStringIdULINT};
+
+const TForteInt16 FORTE_F_TIME_IN_S_TO_ULINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_S_TO_ULINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_S_TO_ULINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_S_TO_ULINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_S_TO_ULINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_S_TO_ULINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_S_TO_ULINT::alg_REQ(void){
+OUT() = TIME_IN_S_TO_ULINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.h
new file mode 100644
index 0000000..ef7deab
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_S_TO_ULINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_S_TO_ULINT_H_
+#define _F_TIME_IN_S_TO_ULINT_H_
+
+#include <simplefb.h>
+#include <forte_ulint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_S_TO_ULINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_S_TO_ULINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ULINT &OUT() {
+ return *static_cast<CIEC_ULINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_S_TO_ULINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_S_TO_ULINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.cpp
new file mode 100644
index 0000000..35e38bb
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_US_TO_LINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_LINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_LINT, g_nStringIdF_TIME_IN_US_TO_LINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anDataOutputTypeIds[] = {g_nStringIdLINT};
+
+const TForteInt16 FORTE_F_TIME_IN_US_TO_LINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_US_TO_LINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_US_TO_LINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_US_TO_LINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_US_TO_LINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_US_TO_LINT::alg_REQ(void){
+OUT() = TIME_IN_US_TO_LINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.h
new file mode 100644
index 0000000..ff8b4f6
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_US_TO_LINT_H_
+#define _F_TIME_IN_US_TO_LINT_H_
+
+#include <simplefb.h>
+#include <forte_lint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_US_TO_LINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_LINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LINT &OUT() {
+ return *static_cast<CIEC_LINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_US_TO_LINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_US_TO_LINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.cpp
new file mode 100644
index 0000000..45d67a9
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_US_TO_LREAL.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_LREAL_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_LREAL, g_nStringIdF_TIME_IN_US_TO_LREAL)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anDataOutputTypeIds[] = {g_nStringIdLREAL};
+
+const TForteInt16 FORTE_F_TIME_IN_US_TO_LREAL::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_US_TO_LREAL::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_US_TO_LREAL::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_US_TO_LREAL::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_LREAL::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_US_TO_LREAL::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_US_TO_LREAL::alg_REQ(void){
+OUT() = TIME_IN_US_TO_LREAL((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.h
new file mode 100644
index 0000000..870b8a2
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_LREAL.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_US_TO_LREAL_H_
+#define _F_TIME_IN_US_TO_LREAL_H_
+
+#include <simplefb.h>
+#include <forte_time.h>
+#include <forte_lreal.h>
+
+class FORTE_F_TIME_IN_US_TO_LREAL: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_LREAL)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LREAL &OUT() {
+ return *static_cast<CIEC_LREAL*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_US_TO_LREAL(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_US_TO_LREAL(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.cpp
new file mode 100644
index 0000000..cf9990f
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "F_TIME_IN_US_TO_ULINT.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_ULINT_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_ULINT, g_nStringIdF_TIME_IN_US_TO_ULINT)
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anDataInputTypeIds[] = {g_nStringIdTIME};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anDataOutputTypeIds[] = {g_nStringIdULINT};
+
+const TForteInt16 FORTE_F_TIME_IN_US_TO_ULINT::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_F_TIME_IN_US_TO_ULINT::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_F_TIME_IN_US_TO_ULINT::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_F_TIME_IN_US_TO_ULINT::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_F_TIME_IN_US_TO_ULINT::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_F_TIME_IN_US_TO_ULINT::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_F_TIME_IN_US_TO_ULINT::alg_REQ(void){
+OUT() = TIME_IN_US_TO_ULINT((IN()));
+}
+
+
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.h
new file mode 100644
index 0000000..aa59b6d
--- /dev/null
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_IN_US_TO_ULINT.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#ifndef _F_TIME_IN_US_TO_ULINT_H_
+#define _F_TIME_IN_US_TO_ULINT_H_
+
+#include <simplefb.h>
+#include <forte_ulint.h>
+#include <forte_time.h>
+
+class FORTE_F_TIME_IN_US_TO_ULINT: public CSimpleFB{
+ DECLARE_FIRMWARE_FB(FORTE_F_TIME_IN_US_TO_ULINT)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_TIME &IN() {
+ return *static_cast<CIEC_TIME*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ULINT &OUT() {
+ return *static_cast<CIEC_ULINT*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+ void alg_REQ(void);
+
+public:
+ FORTE_F_TIME_IN_US_TO_ULINT(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_F_TIME_IN_US_TO_ULINT(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.cpp
index e928aae..c6e005e 100644
--- a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.h
index c2dc6ca..61a2ecd 100644
--- a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.cpp
index 8180f3e..6e9ffbc 100644
--- a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.h
index a232abe..90cec75 100644
--- a/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/TIME/F_TIME_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/UDINT/CMakeLists.txt
index 79e55a1..9c1694e 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/UDINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.cpp
index df4630d..7ab3994 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.h
index 2dbede1..d3b2c2d 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.cpp
index 429fbe5..a7ec824 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.h
index e2b278c..d98e5e3 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.cpp
index d3e1f48..4c4fa41 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.h
index 5ba52c7..5efe5bf 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.cpp
index 7a39251..3140c3b 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.h
index d9b33ac..c053ee2 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.cpp
index 7dfed17..2ec164a 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.h
index 30fe153..bb9dbfa 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.cpp
index 106a6df..bca40b6 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.h
index 7c7a200..6b44d86 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.cpp
index a2d7120..4e90642 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.h
index 780e4ab..1006dc7 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.cpp
index 26b8407..22deafe 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.h
index 2a6929d..47de6b8 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.cpp
index 976f964..9858aaa 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.h
index 350b195..5f3c722 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.cpp
index 3775acc..e507482 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.h
index 66ae695..1bcd832 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.cpp
index 5c89349..afe4dc7 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.h
index 0d9a5b9..a5548bc 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.cpp
index 46e6f19..f09577a 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.h
index 7eb3204..172de14 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.cpp
index 6be13ed..762a82e 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.h
index 401e97a..8979eed 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.cpp
index 93590dd..ef72fb2 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.h
index 8c25352..caed026 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.cpp
index 2fce4c1..bfb3ffb 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.h
index 9f2cba1..1844da4 100644
--- a/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/UDINT/F_UDINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/UINT/CMakeLists.txt
index aa9c1d6..149bebb 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/UINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.cpp
index adf2c68..0b72b24 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.h
index 485d037..0639542 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.cpp
index ae2e66b..87320f5 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.h
index e737c25..ca6def7 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.cpp
index 46deae0..4ca1698 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.h
index e7a4561..71a3b44 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.cpp
index da32067..665125f 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.h
index c84145d..7ed1a8f 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.cpp
index 01d01d5..0941b23 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.h
index 7c097d6..d09ef2f 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.cpp
index f7e6407..dac00d1 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.h
index 19a38fd..e157afb 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.cpp
index 515a4d5..fc068c8 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.h
index aea8227..92e85d9 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.cpp
index ac2df24..4ffde4f 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.h
index 7430f3a..2dc92c6 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.cpp
index c4cf888..f9bd199 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.h
index acc5cfc..76e7a07 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.cpp
index 0c4ea1c..1c977f7 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.h
index 467594e..a38c088 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.cpp
index e632964..c02b5bc 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.h
index 5a2680e..75f0d44 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.cpp
index 4f0b0ec..804b68d 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.h
index c5f2fa5..23c36d7 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.cpp
index bda189e..9e11468 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.h
index 63a8b71..fa87f44 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.cpp
index 3465862..85575c3 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.h
index 8a12aed..d93ceba 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.cpp
index d2e8d5e..a578894 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.h
index 93abf7d..d235961 100644
--- a/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/UINT/F_UINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/ULINT/CMakeLists.txt
index 08fbe00..dc2d426 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/ULINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.cpp
index d69ab4c..894d5da 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.h
index 1a1db41..f4d5f8b 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.cpp
index 72eef15..30e6065 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.h
index 60c4631..30ed059 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.cpp
index 4fb650f..31b8541 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.h
index a9d3603..8dec463 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.cpp
index 3a2e19f..0659203 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.h
index f865835..758297a 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.cpp
index f16a91f..bb6c0a0 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.h
index 2a1a7ec..db570bc 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.cpp
index 8f20126..ae5d2f4 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.h
index 9709351..d3f41b0 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.cpp
index 881213a..89f4290 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.h
index f8e005a..bf7f647 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.cpp
index 2517aaf..c5c8376 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.h
index 81f0dbf..1ba51b8 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.cpp
index ac6b7f2..484dcbb 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.h
index 251fb34..41b9c29 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.cpp
index 5212844..fe283cb 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.h
index 304f79a..191c4a1 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.cpp
index 50c29ad..aebad7b 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.h
index 8127415..55e451e 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.cpp
index 0b24689..4e56523 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.h
index b8d874b..bc952f9 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.cpp
index 7235a28..7a0aa99 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.h
index 9de6774..ee8010b 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.cpp
index cde47ab..3b2e509 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.h
index 09a031a..640030f 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.cpp
index 8c3499b..f8fdcad 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.h
index 906ce14..431d497 100644
--- a/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/ULINT/F_ULINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/USINT/CMakeLists.txt
index 2f69224..0b4e3e1 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/USINT/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.cpp
index b99aba9..63ddae9 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.h
index 67b2c5a..c3baf0b 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.cpp
index eb7e313..512d5d2 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.h
index 005c749..0759cda 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.cpp
index f258b4b..19d962d 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.h
index 5b80a4f..8e86e4b 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.cpp
index 13f3d9c..4ad7566 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.h
index 98f0bed..602bfbf 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.cpp
index 2e8c039..8081988 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.h
index dd3c693..d1e3e70 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.cpp
index 877c5eb..cb7374b 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.h
index a03e532..2e5858a 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.cpp
index 6c33a1d..d4ffe57 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.h
index 525c9b6..2fda0cf 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.cpp
index 6eeb3d8..afbb642 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.h
index 7789e7f..ec09dda 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.cpp
index c9fce86..2eae218 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.h
index b0ef277..eb50ceb 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.cpp
index dda2dee..0db995c 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.h
index fa9ddaf..3b410fd 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.cpp
index efe57e8..4fc63a9 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.h
index 33ee14d..b824a53 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.cpp
index 5af0f39..bef0b21 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.h
index 603f499..b41d72b 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.cpp
index bc234aa..088722a 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.h
index eb00b28..7f0eefd 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.cpp
index be4bc23..32e00c3 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.h
index e27bb29..b94a3cf 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.cpp
index 358fd34..a64f66b 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.h
index 474dd20..021126f 100644
--- a/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/USINT/F_USINT_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/WORD/CMakeLists.txt
index 124d213..71dd20b 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/WORD/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger, Matthias Plasch
+# Copyright (c) 2012 - 2013 ACIN, Profactor GmbH, 2018 TU Vienna/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger, Matthias Plasch
# * - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - removing illegal casts
# *******************************************************************************/
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.cpp
index d7c95c0..91dba7e 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.h
index 61860e6..4011fe9 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.cpp
index f39de4f..7dceb0b 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.h
index 9ec85c7..7facbae 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.cpp
index c3652cd..e8719c6 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.h
index bf56914..8e56927 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.cpp
index 1624095..93883ab 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.h
index 67b8938..de42a55 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.cpp
index 0cac201..0e5228f 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.h
index 02958fc..6c53bc1 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.cpp
index dc249ee..53188c9 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.h
index c920a70..4d42e7b 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.cpp
index 0166299..563d35e 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.h
index 32fe533..ed47528 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.cpp
index 5e16fb3..f78b414 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.h
index 084716f..9f24b20 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.cpp
index a1b4747..dba2d61 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.h
index 1d21d83..95628e6 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.cpp
index 099f0a4..44b6b65 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.h
index 8d8fc22..c5f47ad 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.cpp
index 4e522bd..229531a 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.h
index 3106369..a460ccf 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.cpp
index d2527f8..443ec78 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.h
index 5a4d830..d45b729 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.cpp b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.cpp
index f5043c7..c8ed66a 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.h b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.h
index 5e88421..db70525 100644
--- a/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.h
+++ b/src/modules/IEC61131-3/Conversion/WORD/F_WORD_TO_WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/CMakeLists.txt b/src/modules/IEC61131-3/Conversion/WSTRING/CMakeLists.txt
index a3c5548..1e8e23b 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2012 - 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.cpp
index d26b8e9..d93e2f5 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.h
index d01548b..5873eb1 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BOOL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.cpp
index 57b3019..5b3889e 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.h
index db46c54..62068aa 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.cpp
index 21af7a0..7fc900b 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.h
index 10c6a90..42ecc54 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.cpp
index bcd9fa4..8237186 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.h
index dac0a19..da3bf5f 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.cpp
index 07bc1fb..58618cb 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.h
index af751f6..bef8c09 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.cpp
index 1838c11..431be86 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.h
index 397dabc..9cc5d76 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.cpp
index 8e0cdba..86236ab 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.h
index 82175d3..849ab63 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.cpp
index 974bb3a..d4b79a3 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.h
index 761f608..f267c08 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_LWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.cpp
index 17c14ab..df336e6 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.h
index 46c3479..9d26bae 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.cpp
index 93e91e5..fda6046 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.h
index 80c3e11..90d634f 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.cpp
index b7fbd46..7720ab1 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.h
index 79dcad6..e35f85e 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.cpp
index 0e3ba0f..c9d36c2 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.h
index 3876c28..b6f7718 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.cpp
index 0fdd2e1..c7abdb9 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.h
index a269d59..2ac1add 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.cpp
index 8c80440..ce6ed94 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.h
index 7656a23..1b008a9 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.cpp
index 1a8fa74..b3c5898 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.h
index 4aa1fb4..0abd7cc 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.cpp
index 2e3ecc2..895fbcf 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.h
index 9af6b62..c0ca5f5 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.cpp b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.cpp
index 7f76063..4bd280b 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.cpp
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.h b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.h
index 8f5e969..5f99f72 100644
--- a/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.h
+++ b/src/modules/IEC61131-3/Conversion/WSTRING/F_WSTRING_TO_WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Counters/CMakeLists.txt b/src/modules/IEC61131-3/Counters/CMakeLists.txt
index 9e688a0..2e3b709 100644
--- a/src/modules/IEC61131-3/Counters/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Counters/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2012 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2012 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD.cpp b/src/modules/IEC61131-3/Counters/FB_CTD.cpp
index a3e280b..47da0b1 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD.h b/src/modules/IEC61131-3/Counters/FB_CTD.h
index 81102ad..7dd0593 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_DINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTD_DINT.cpp
index 23185c2..b91e3ec 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_DINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_DINT.h b/src/modules/IEC61131-3/Counters/FB_CTD_DINT.h
index 960c265..74ee59f 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_DINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_LINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTD_LINT.cpp
index b9b8717..3d1909f 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_LINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_LINT.h b/src/modules/IEC61131-3/Counters/FB_CTD_LINT.h
index 71440a1..4a17673 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_LINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.cpp
index f6f5058..9ddc410 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.h b/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.h
index 6747fe9..f45b135 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.cpp
index 7c46384..3996386 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.h b/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.h
index 1fb680d..165964c 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTD_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU.cpp b/src/modules/IEC61131-3/Counters/FB_CTU.cpp
index 11d6510..a2ea423 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTU.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU.h b/src/modules/IEC61131-3/Counters/FB_CTU.h
index 5b8ef86..951ad68 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTU.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD.cpp b/src/modules/IEC61131-3/Counters/FB_CTUD.cpp
index 1414df7..74d554d 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD.h b/src/modules/IEC61131-3/Counters/FB_CTUD.h
index 7278ada..756b195 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.cpp
index 2100b97..948548d 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.h b/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.h
index 8af7f5d..6b12375 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.cpp
index bff7a27..0bd7ca8 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.h b/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.h
index c83cc96..a0f8254 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.cpp
index 43b7cdd..6f4def2 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.h b/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.h
index c251a66..9239c20 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTUD_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_DINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTU_DINT.cpp
index d9826dc..a0e4b7e 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_DINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoit, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_DINT.h b/src/modules/IEC61131-3/Counters/FB_CTU_DINT.h
index a6ca717..8cdb38f 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_DINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_LINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTU_LINT.cpp
index 407c219..947f5b6 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_LINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_LINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_LINT.h b/src/modules/IEC61131-3/Counters/FB_CTU_LINT.h
index 129a351..f54bab0 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_LINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_LINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.cpp
index 42a2298..7834d18 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.h b/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.h
index ac393ec..0c253c3 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.cpp b/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.cpp
index f9b9bff..444ce3e 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.cpp
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.h b/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.h
index 13c4145..8534274 100644
--- a/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.h
+++ b/src/modules/IEC61131-3/Counters/FB_CTU_ULINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/EdgeDetection/CMakeLists.txt b/src/modules/IEC61131-3/EdgeDetection/CMakeLists.txt
index e70a0f3..9778b58 100644
--- a/src/modules/IEC61131-3/EdgeDetection/CMakeLists.txt
+++ b/src/modules/IEC61131-3/EdgeDetection/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2012 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2012 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.cpp b/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.cpp
index a4c3a55..4a232c6 100644
--- a/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.cpp
+++ b/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.h b/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.h
index e8c8724..3804e56 100644
--- a/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.h
+++ b/src/modules/IEC61131-3/EdgeDetection/FB_F_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.cpp b/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.cpp
index f5daee0..881cf51 100644
--- a/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.cpp
+++ b/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.h b/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.h
index b14ea96..0d21b9e 100644
--- a/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.h
+++ b/src/modules/IEC61131-3/EdgeDetection/FB_R_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Numerical/CMakeLists.txt b/src/modules/IEC61131-3/Numerical/CMakeLists.txt
index 85805f2..827c67e 100644
--- a/src/modules/IEC61131-3/Numerical/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Numerical/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Numerical/F_ABS.cpp b/src/modules/IEC61131-3/Numerical/F_ABS.cpp
index d9fca19..4d07dce 100644
--- a/src/modules/IEC61131-3/Numerical/F_ABS.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_ABS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_ABS.h b/src/modules/IEC61131-3/Numerical/F_ABS.h
index 9416d00..3d92a97 100644
--- a/src/modules/IEC61131-3/Numerical/F_ABS.h
+++ b/src/modules/IEC61131-3/Numerical/F_ABS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_ACOS.cpp b/src/modules/IEC61131-3/Numerical/F_ACOS.cpp
index 22b98fb..ef2e3fb 100644
--- a/src/modules/IEC61131-3/Numerical/F_ACOS.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_ACOS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_ACOS.h b/src/modules/IEC61131-3/Numerical/F_ACOS.h
index 8c10bed..29ddf9e 100644
--- a/src/modules/IEC61131-3/Numerical/F_ACOS.h
+++ b/src/modules/IEC61131-3/Numerical/F_ACOS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_ASIN.cpp b/src/modules/IEC61131-3/Numerical/F_ASIN.cpp
index 515a289..5ba91b8 100644
--- a/src/modules/IEC61131-3/Numerical/F_ASIN.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_ASIN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_ASIN.h b/src/modules/IEC61131-3/Numerical/F_ASIN.h
index a20cd18..016af96 100644
--- a/src/modules/IEC61131-3/Numerical/F_ASIN.h
+++ b/src/modules/IEC61131-3/Numerical/F_ASIN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_ATAN.cpp b/src/modules/IEC61131-3/Numerical/F_ATAN.cpp
index 4024013..4fd7e4e 100644
--- a/src/modules/IEC61131-3/Numerical/F_ATAN.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_ATAN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_ATAN.h b/src/modules/IEC61131-3/Numerical/F_ATAN.h
index 2ac8e8f..0719597 100644
--- a/src/modules/IEC61131-3/Numerical/F_ATAN.h
+++ b/src/modules/IEC61131-3/Numerical/F_ATAN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_COS.cpp b/src/modules/IEC61131-3/Numerical/F_COS.cpp
index 4628b33..f519e05 100644
--- a/src/modules/IEC61131-3/Numerical/F_COS.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_COS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_COS.h b/src/modules/IEC61131-3/Numerical/F_COS.h
index 252062d..a752cac 100644
--- a/src/modules/IEC61131-3/Numerical/F_COS.h
+++ b/src/modules/IEC61131-3/Numerical/F_COS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_EXP.cpp b/src/modules/IEC61131-3/Numerical/F_EXP.cpp
index 3aca288..1a679a5 100644
--- a/src/modules/IEC61131-3/Numerical/F_EXP.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_EXP.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_EXP.h b/src/modules/IEC61131-3/Numerical/F_EXP.h
index 99d59bc..4478aa8 100644
--- a/src/modules/IEC61131-3/Numerical/F_EXP.h
+++ b/src/modules/IEC61131-3/Numerical/F_EXP.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_LN.cpp b/src/modules/IEC61131-3/Numerical/F_LN.cpp
index 39c8fd3..0ce60a0 100644
--- a/src/modules/IEC61131-3/Numerical/F_LN.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_LN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_LN.h b/src/modules/IEC61131-3/Numerical/F_LN.h
index 0ddf84a..3293268 100644
--- a/src/modules/IEC61131-3/Numerical/F_LN.h
+++ b/src/modules/IEC61131-3/Numerical/F_LN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_LOG.cpp b/src/modules/IEC61131-3/Numerical/F_LOG.cpp
index 5de5db6..ed4c935 100644
--- a/src/modules/IEC61131-3/Numerical/F_LOG.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_LOG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_LOG.h b/src/modules/IEC61131-3/Numerical/F_LOG.h
index 3a6bffb..b85303d 100644
--- a/src/modules/IEC61131-3/Numerical/F_LOG.h
+++ b/src/modules/IEC61131-3/Numerical/F_LOG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_SIN.cpp b/src/modules/IEC61131-3/Numerical/F_SIN.cpp
index ae58dcb..3ad1823 100644
--- a/src/modules/IEC61131-3/Numerical/F_SIN.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_SIN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_SIN.h b/src/modules/IEC61131-3/Numerical/F_SIN.h
index 3311143..f7f8a88 100644
--- a/src/modules/IEC61131-3/Numerical/F_SIN.h
+++ b/src/modules/IEC61131-3/Numerical/F_SIN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_SQRT.cpp b/src/modules/IEC61131-3/Numerical/F_SQRT.cpp
index 827d0a8..1344eca 100644
--- a/src/modules/IEC61131-3/Numerical/F_SQRT.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_SQRT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_SQRT.h b/src/modules/IEC61131-3/Numerical/F_SQRT.h
index 39a5821..aa34d0a 100644
--- a/src/modules/IEC61131-3/Numerical/F_SQRT.h
+++ b/src/modules/IEC61131-3/Numerical/F_SQRT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Numerical/F_TAN.cpp b/src/modules/IEC61131-3/Numerical/F_TAN.cpp
index 0e103c4..94f3786 100644
--- a/src/modules/IEC61131-3/Numerical/F_TAN.cpp
+++ b/src/modules/IEC61131-3/Numerical/F_TAN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Numerical/F_TAN.h b/src/modules/IEC61131-3/Numerical/F_TAN.h
index 4b884b8..bc0efea 100644
--- a/src/modules/IEC61131-3/Numerical/F_TAN.h
+++ b/src/modules/IEC61131-3/Numerical/F_TAN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Selection/CMakeLists.txt b/src/modules/IEC61131-3/Selection/CMakeLists.txt
index 0e79e8b..9f5ab83 100644
--- a/src/modules/IEC61131-3/Selection/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Selection/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2013 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2013 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Selection/F_LIMIT.cpp b/src/modules/IEC61131-3/Selection/F_LIMIT.cpp
index 43fae8e..343627b 100644
--- a/src/modules/IEC61131-3/Selection/F_LIMIT.cpp
+++ b/src/modules/IEC61131-3/Selection/F_LIMIT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_LIMIT.h b/src/modules/IEC61131-3/Selection/F_LIMIT.h
index 6dd4d3b..de07dbd 100644
--- a/src/modules/IEC61131-3/Selection/F_LIMIT.h
+++ b/src/modules/IEC61131-3/Selection/F_LIMIT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Matthias Plasch, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_MAX.cpp b/src/modules/IEC61131-3/Selection/F_MAX.cpp
index da49c84..e5577e3 100644
--- a/src/modules/IEC61131-3/Selection/F_MAX.cpp
+++ b/src/modules/IEC61131-3/Selection/F_MAX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_MAX.h b/src/modules/IEC61131-3/Selection/F_MAX.h
index 2f46c02..9a267f7 100644
--- a/src/modules/IEC61131-3/Selection/F_MAX.h
+++ b/src/modules/IEC61131-3/Selection/F_MAX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Matthias Plasch, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_MIN.cpp b/src/modules/IEC61131-3/Selection/F_MIN.cpp
index 25bbf36..6cd858a 100644
--- a/src/modules/IEC61131-3/Selection/F_MIN.cpp
+++ b/src/modules/IEC61131-3/Selection/F_MIN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_MIN.h b/src/modules/IEC61131-3/Selection/F_MIN.h
index a20b082..dff994d 100644
--- a/src/modules/IEC61131-3/Selection/F_MIN.h
+++ b/src/modules/IEC61131-3/Selection/F_MIN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Matthias Plasch, Gerhard Ebenhofer
diff --git a/src/modules/IEC61131-3/Selection/F_MUX_2.cpp b/src/modules/IEC61131-3/Selection/F_MUX_2.cpp
index b732845..3fc345f 100644
--- a/src/modules/IEC61131-3/Selection/F_MUX_2.cpp
+++ b/src/modules/IEC61131-3/Selection/F_MUX_2.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -44,7 +45,7 @@
void FORTE_F_MUX_2::executeEvent(int pa_nEIID){
if(scm_nEventREQID == pa_nEIID){
if(K().isSigned() && (K().getSignedValue() < 0 || K().getSignedValue() > 1)){
- DEVLOG_ERROR("value of input K is not between 0 and 1");
+ DEVLOG_ERROR("value of input K is not between 0 and 1\n");
}else{
OUT().saveAssign(*static_cast<CIEC_ANY*>(getDI( static_cast<TForteUInt16>(K().getUnsignedValue() + 1))));
sendOutputEvent(scm_nEventCNFID);
diff --git a/src/modules/IEC61131-3/Selection/F_MUX_2.h b/src/modules/IEC61131-3/Selection/F_MUX_2.h
index a912567..b60a0c4 100644
--- a/src/modules/IEC61131-3/Selection/F_MUX_2.h
+++ b/src/modules/IEC61131-3/Selection/F_MUX_2.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Selection/F_SEL.cpp b/src/modules/IEC61131-3/Selection/F_SEL.cpp
index 3cfea12..283409b 100644
--- a/src/modules/IEC61131-3/Selection/F_SEL.cpp
+++ b/src/modules/IEC61131-3/Selection/F_SEL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
diff --git a/src/modules/IEC61131-3/Selection/F_SEL.h b/src/modules/IEC61131-3/Selection/F_SEL.h
index 59c8ec3..362a5dd 100644
--- a/src/modules/IEC61131-3/Selection/F_SEL.h
+++ b/src/modules/IEC61131-3/Selection/F_SEL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2019 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl
diff --git a/src/modules/IEC61131-3/Timers/CMakeLists.txt b/src/modules/IEC61131-3/Timers/CMakeLists.txt
index 5d4cff1..4ddfee2 100644
--- a/src/modules/IEC61131-3/Timers/CMakeLists.txt
+++ b/src/modules/IEC61131-3/Timers/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2012 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Monika Wenger
+# Copyright (c) 2011 - 2012 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/modules/IEC61131-3/Timers/FB_TOF.cpp b/src/modules/IEC61131-3/Timers/FB_TOF.cpp
index ad845c8..59bc7e0 100644
--- a/src/modules/IEC61131-3/Timers/FB_TOF.cpp
+++ b/src/modules/IEC61131-3/Timers/FB_TOF.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
@@ -60,10 +61,10 @@
if(true == notFirstRisingEdge){
if(fallingEdge == false){
fallingEdge = true;
- start = TIME();
+ start = NOW_MONOTONIC();
}
else{
- count = TIME() - start;
+ count = NOW_MONOTONIC() - start;
if(PT() <= count){
Q() = false;
ET() = PT();
diff --git a/src/modules/IEC61131-3/Timers/FB_TOF.h b/src/modules/IEC61131-3/Timers/FB_TOF.h
index 2a2dd3e..e80b3f6 100644
--- a/src/modules/IEC61131-3/Timers/FB_TOF.h
+++ b/src/modules/IEC61131-3/Timers/FB_TOF.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Timers/FB_TON.cpp b/src/modules/IEC61131-3/Timers/FB_TON.cpp
index 3d13076..5594aa1 100644
--- a/src/modules/IEC61131-3/Timers/FB_TON.cpp
+++ b/src/modules/IEC61131-3/Timers/FB_TON.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
@@ -58,9 +59,9 @@
else{
if(risingEdge == false){
risingEdge = true;
- start = TIME();
+ start = NOW_MONOTONIC();
}else{
- count = TIME() - start;
+ count = NOW_MONOTONIC() - start;
if(PT() <= count){
Q() = true;
ET() = PT();
diff --git a/src/modules/IEC61131-3/Timers/FB_TON.h b/src/modules/IEC61131-3/Timers/FB_TON.h
index 4a159cc..7b0e6a7 100644
--- a/src/modules/IEC61131-3/Timers/FB_TON.h
+++ b/src/modules/IEC61131-3/Timers/FB_TON.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/IEC61131-3/Timers/FB_TP.cpp b/src/modules/IEC61131-3/Timers/FB_TP.cpp
index cc1ea7d..991527a 100644
--- a/src/modules/IEC61131-3/Timers/FB_TP.cpp
+++ b/src/modules/IEC61131-3/Timers/FB_TP.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
@@ -55,7 +56,7 @@
edgeFlag = false;
DEVLOG_DEBUG("top\n");
}else{
- ET() = TIME() - start;
+ ET() = NOW_MONOTONIC() - start;
DEVLOG_DEBUG("rising\n");
}
}
@@ -63,7 +64,7 @@
if(IN() == true && ET() == 0){
Q() = true;
edgeFlag = true;
- start = TIME();
+ start = NOW_MONOTONIC();
DEVLOG_DEBUG("start\n");
}
else
diff --git a/src/modules/IEC61131-3/Timers/FB_TP.h b/src/modules/IEC61131-3/Timers/FB_TP.h
index 67fda84..c0f8498 100644
--- a/src/modules/IEC61131-3/Timers/FB_TP.h
+++ b/src/modules/IEC61131-3/Timers/FB_TP.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2009 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl, Ingo Hengy
diff --git a/src/modules/ads/ADS_SERVER_CONFIG.cpp b/src/modules/ads/ADS_SERVER_CONFIG.cpp
index 36b8cb7..cbe03a1 100755
--- a/src/modules/ads/ADS_SERVER_CONFIG.cpp
+++ b/src/modules/ads/ADS_SERVER_CONFIG.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
-* Copyright (c) 2018 TU Wien/ACIN
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Martin Melik-Merkumians - initial contribution
-*******************************************************************************/
+ * Copyright (c) 2018 TU Wien/ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial contribution
+ *******************************************************************************/
#include "ADS_SERVER_CONFIG.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
diff --git a/src/modules/ads/ADS_SERVER_CONFIG.h b/src/modules/ads/ADS_SERVER_CONFIG.h
index 7c8028a..244a14b 100755
--- a/src/modules/ads/ADS_SERVER_CONFIG.h
+++ b/src/modules/ads/ADS_SERVER_CONFIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CAdsConnection.cpp b/src/modules/ads/CAdsConnection.cpp
index 3e3ce29..87bf999 100644
--- a/src/modules/ads/CAdsConnection.cpp
+++ b/src/modules/ads/CAdsConnection.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CAdsConnection.h b/src/modules/ads/CAdsConnection.h
index 90fdca3..1a3aa6b 100644
--- a/src/modules/ads/CAdsConnection.h
+++ b/src/modules/ads/CAdsConnection.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CAdsConnectionManager.cpp b/src/modules/ads/CAdsConnectionManager.cpp
index 580a9a5..45a63a1 100644
--- a/src/modules/ads/CAdsConnectionManager.cpp
+++ b/src/modules/ads/CAdsConnectionManager.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CAdsConnectionManager.h b/src/modules/ads/CAdsConnectionManager.h
index 5381014..b89d73d 100644
--- a/src/modules/ads/CAdsConnectionManager.h
+++ b/src/modules/ads/CAdsConnectionManager.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CAdsProcessInterface.cpp b/src/modules/ads/CAdsProcessInterface.cpp
index dc1aabf..d791a4b 100644
--- a/src/modules/ads/CAdsProcessInterface.cpp
+++ b/src/modules/ads/CAdsProcessInterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
@@ -25,7 +26,7 @@
}
bool CAdsProcessInterface::initialise(bool){
- CParameterParser adsParameters(PARAMS().getValue(), 2, ':');
+ CParameterParser adsParameters(PARAMS().getValue(), ':', 2);
if(2 != adsParameters.parseParameters()) {
STATUS() = "PARAMS could not be parsed";
return false;
diff --git a/src/modules/ads/CAdsProcessInterface.h b/src/modules/ads/CAdsProcessInterface.h
index 68af266..e25a76a 100644
--- a/src/modules/ads/CAdsProcessInterface.h
+++ b/src/modules/ads/CAdsProcessInterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/CMakeLists.txt b/src/modules/ads/CMakeLists.txt
index 54444c1..6e15729 100644
--- a/src/modules/ads/CMakeLists.txt
+++ b/src/modules/ads/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2018 TU Wien/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik-Merkumians - inital contribution
+# Copyright (c) 2018 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - inital contribution
# * Martin Melik-Merkumians - adds IB, QB, IL, QL
# *******************************************************************************/
diff --git a/src/modules/ads/SET_LOCAL_ADS_ADDRESS.cpp b/src/modules/ads/SET_LOCAL_ADS_ADDRESS.cpp
index 6c718a3..f3baa09 100644
--- a/src/modules/ads/SET_LOCAL_ADS_ADDRESS.cpp
+++ b/src/modules/ads/SET_LOCAL_ADS_ADDRESS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/SET_LOCAL_ADS_ADDRESS.h b/src/modules/ads/SET_LOCAL_ADS_ADDRESS.h
index ab4aa13..5cdc08d 100644
--- a/src/modules/ads/SET_LOCAL_ADS_ADDRESS.h
+++ b/src/modules/ads/SET_LOCAL_ADS_ADDRESS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/ads/processinterface.h b/src/modules/ads/processinterface.h
index 540bd4e..db96f8e 100644
--- a/src/modules/ads/processinterface.h
+++ b/src/modules/ads/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial contribution
diff --git a/src/modules/arrowhead/CMakeLists.txt b/src/modules/arrowhead/CMakeLists.txt
new file mode 100644
index 0000000..793bd85
--- /dev/null
+++ b/src/modules/arrowhead/CMakeLists.txt
@@ -0,0 +1,28 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Arrowhead specific functional blocks
+#############################################################################
+
+forte_add_module(Arrowhead "Arrowhead Function Blocks")
+
+IF(FORTE_MODULE_Arrowhead)
+ add_subdirectory(common)
+ add_subdirectory(orchestrator)
+ add_subdirectory(serviceRegistry)
+ add_subdirectory(SystemTests)
+ENDIF(FORTE_MODULE_Arrowhead)
+
+
+
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/SystemTests/Arrowhead_HTTPTest.fboot b/src/modules/arrowhead/SystemTests/Arrowhead_HTTPTest.fboot
new file mode 100644
index 0000000..2a6eeb0
--- /dev/null
+++ b/src/modules/arrowhead/SystemTests/Arrowhead_HTTPTest.fboot
@@ -0,0 +1,2577 @@
+;<Request ID="1" Action="CREATE"><FB Name="cleanAll" Type="EMB_RES" /></Request>
+cleanAll;<Request ID="2" Action="CREATE"><FB Name="RegisterService1.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+cleanAll;<Request ID="3" Action="CREATE"><FB Name="RegisterService1.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+cleanAll;<Request ID="4" Action="CREATE"><FB Name="RegisterService1.RegisterService" Type="RegisterService" /></Request>
+cleanAll;<Request ID="5" Action="CREATE"><FB Name="RegisterService1.E_SR" Type="E_SR" /></Request>
+cleanAll;<Request ID="6" Action="CREATE"><FB Name="RegisterService1.E_SWITCH" Type="E_SWITCH" /></Request>
+cleanAll;<Request ID="7" Action="CREATE"><FB Name="RegisterService1.E_REND" Type="E_REND" /></Request>
+cleanAll;<Request ID="8" Action="CREATE"><FB Name="RegisterService2.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+cleanAll;<Request ID="9" Action="CREATE"><FB Name="RegisterService2.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+cleanAll;<Request ID="10" Action="CREATE"><FB Name="RegisterService2.RegisterService" Type="RegisterService" /></Request>
+cleanAll;<Request ID="11" Action="CREATE"><FB Name="RegisterService2.E_SR" Type="E_SR" /></Request>
+cleanAll;<Request ID="12" Action="CREATE"><FB Name="RegisterService2.E_SWITCH" Type="E_SWITCH" /></Request>
+cleanAll;<Request ID="13" Action="CREATE"><FB Name="RegisterService2.E_REND" Type="E_REND" /></Request>
+cleanAll;<Request ID="14" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+cleanAll;<Request ID="15" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+cleanAll;<Request ID="16" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+cleanAll;<Request ID="17" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+cleanAll;<Request ID="18" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+cleanAll;<Request ID="19" Action="WRITE"><Connection Source="WSTRIGN#allCleaned" Destination="PUBL_0.ID" /></Request>
+cleanAll;<Request ID="20" Action="CREATE"><FB Name="FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+cleanAll;<Request ID="21" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService.serviceDefinition" /></Request>
+cleanAll;<Request ID="22" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService.interfaces" /></Request>
+cleanAll;<Request ID="23" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService.serviceMetadata" /></Request>
+cleanAll;<Request ID="24" Action="CREATE"><FB Name="FieldsToArrowheadService_1" Type="FieldsToArrowheadService" /></Request>
+cleanAll;<Request ID="25" Action="WRITE"><Connection Source="WSTRING#serviceTest2" Destination="FieldsToArrowheadService_1.serviceDefinition" /></Request>
+cleanAll;<Request ID="26" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService_1.interfaces" /></Request>
+cleanAll;<Request ID="27" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1.serviceMetadata" /></Request>
+cleanAll;<Request ID="28" Action="CREATE"><FB Name="RegisterService2_1.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+cleanAll;<Request ID="29" Action="CREATE"><FB Name="RegisterService2_1.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+cleanAll;<Request ID="30" Action="CREATE"><FB Name="RegisterService2_1.RegisterService" Type="RegisterService" /></Request>
+cleanAll;<Request ID="31" Action="CREATE"><FB Name="RegisterService2_1.E_SR" Type="E_SR" /></Request>
+cleanAll;<Request ID="32" Action="CREATE"><FB Name="RegisterService2_1.E_SWITCH" Type="E_SWITCH" /></Request>
+cleanAll;<Request ID="33" Action="CREATE"><FB Name="RegisterService2_1.E_REND" Type="E_REND" /></Request>
+cleanAll;<Request ID="34" Action="CREATE"><FB Name="FieldsToArrowheadSystem_1" Type="FieldsToArrowheadSystem" /></Request>
+cleanAll;<Request ID="35" Action="WRITE"><Connection Source="WSTRING#systemTestName2" Destination="FieldsToArrowheadSystem_1.systemName" /></Request>
+cleanAll;<Request ID="36" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem_1.address" /></Request>
+cleanAll;<Request ID="37" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem_1.port" /></Request>
+cleanAll;<Request ID="38" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+cleanAll;<Request ID="39" Action="WRITE"><Connection Source="WSTRIGN#allEnded" Destination="SUBL_0.ID" /></Request>
+cleanAll;<Request ID="40" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+cleanAll;<Request ID="41" Action="CREATE"><FB Name="SUBL_0_1" Type="SUBL_0" /></Request>
+cleanAll;<Request ID="42" Action="WRITE"><Connection Source="WSTRING#allLoaded" Destination="SUBL_0_1.ID" /></Request>
+cleanAll;<Request ID="43" Action="WRITE"><Connection Source="/serviceTest/start" Destination="RegisterService1.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+cleanAll;<Request ID="44" Action="WRITE"><Connection Source="1" Destination="RegisterService1.FieldsToServiceRegistryEntry.version" /></Request>
+cleanAll;<Request ID="45" Action="WRITE"><Connection Source="false" Destination="RegisterService1.FieldsToServiceRegistryEntry.udp" /></Request>
+cleanAll;<Request ID="46" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService1.FieldsToServiceRegistryEntry.metadata" /></Request>
+cleanAll;<Request ID="47" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService1.RegisterService.endpoint" /></Request>
+cleanAll;<Request ID="48" Action="WRITE"><Connection Source="/serviceTest/start2" Destination="RegisterService2.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+cleanAll;<Request ID="49" Action="WRITE"><Connection Source="1" Destination="RegisterService2.FieldsToServiceRegistryEntry.version" /></Request>
+cleanAll;<Request ID="50" Action="WRITE"><Connection Source="false" Destination="RegisterService2.FieldsToServiceRegistryEntry.udp" /></Request>
+cleanAll;<Request ID="51" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2.FieldsToServiceRegistryEntry.metadata" /></Request>
+cleanAll;<Request ID="52" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2.RegisterService.endpoint" /></Request>
+cleanAll;<Request ID="53" Action="WRITE"><Connection Source="/serviceTest/start2" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+cleanAll;<Request ID="54" Action="WRITE"><Connection Source="1" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.version" /></Request>
+cleanAll;<Request ID="55" Action="WRITE"><Connection Source="false" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.udp" /></Request>
+cleanAll;<Request ID="56" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.metadata" /></Request>
+cleanAll;<Request ID="57" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2_1.RegisterService.endpoint" /></Request>
+cleanAll;<Request ID="58" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneUnregister" Destination="RegisterService2.E_SR.R" /></Request>
+cleanAll;<Request ID="59" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneUnregister" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+cleanAll;<Request ID="60" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneUnregister" Destination="RegisterService2.E_REND.EI1" /></Request>
+cleanAll;<Request ID="61" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO1" Destination="RegisterService1.RegisterService.register" /></Request>
+cleanAll;<Request ID="62" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO0" Destination="RegisterService1.RegisterService.unregister" /></Request>
+cleanAll;<Request ID="63" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService1.E_REND.EI2" /></Request>
+cleanAll;<Request ID="64" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_SWITCH.EI" /></Request>
+cleanAll;<Request ID="65" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_REND.R" /></Request>
+cleanAll;<Request ID="66" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService1.RegisterService.serviceRegistryEntry" /></Request>
+cleanAll;<Request ID="67" Action="CREATE"><Connection Source="RegisterService1.E_SR.Q" Destination="RegisterService1.E_SWITCH.G" /></Request>
+cleanAll;<Request ID="68" Action="CREATE"><Connection Source="RegisterService1.RegisterService.registerService" Destination="RegisterService1.RegisterServiceHTTP_1.registerService" /></Request>
+cleanAll;<Request ID="69" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="RegisterService2_1.E_SR.R" /></Request>
+cleanAll;<Request ID="70" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.REQ" /></Request>
+cleanAll;<Request ID="71" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="RegisterService2_1.E_REND.EI1" /></Request>
+cleanAll;<Request ID="72" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO1" Destination="RegisterService2.RegisterService.register" /></Request>
+cleanAll;<Request ID="73" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO0" Destination="RegisterService2.RegisterService.unregister" /></Request>
+cleanAll;<Request ID="74" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2.E_REND.EI2" /></Request>
+cleanAll;<Request ID="75" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_SWITCH.EI" /></Request>
+cleanAll;<Request ID="76" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_REND.R" /></Request>
+cleanAll;<Request ID="77" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2.RegisterService.serviceRegistryEntry" /></Request>
+cleanAll;<Request ID="78" Action="CREATE"><Connection Source="RegisterService2.E_SR.Q" Destination="RegisterService2.E_SWITCH.G" /></Request>
+cleanAll;<Request ID="79" Action="CREATE"><Connection Source="RegisterService2.RegisterService.registerService" Destination="RegisterService2.RegisterServiceHTTP_1.registerService" /></Request>
+cleanAll;<Request ID="80" Action="CREATE"><Connection Source="RegisterService2_1.RegisterService.doneUnregister" Destination="PUBL_0.INIT" /></Request>
+cleanAll;<Request ID="81" Action="CREATE"><Connection Source="RegisterService2_1.E_SWITCH.EO1" Destination="RegisterService2_1.RegisterService.register" /></Request>
+cleanAll;<Request ID="82" Action="CREATE"><Connection Source="RegisterService2_1.E_SWITCH.EO0" Destination="RegisterService2_1.RegisterService.unregister" /></Request>
+cleanAll;<Request ID="83" Action="CREATE"><Connection Source="RegisterService2_1.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2_1.E_REND.EI2" /></Request>
+cleanAll;<Request ID="84" Action="CREATE"><Connection Source="RegisterService2_1.E_REND.EO" Destination="RegisterService2_1.E_SWITCH.EI" /></Request>
+cleanAll;<Request ID="85" Action="CREATE"><Connection Source="RegisterService2_1.E_REND.EO" Destination="RegisterService2_1.E_REND.R" /></Request>
+cleanAll;<Request ID="86" Action="CREATE"><Connection Source="RegisterService2_1.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2_1.RegisterService.serviceRegistryEntry" /></Request>
+cleanAll;<Request ID="87" Action="CREATE"><Connection Source="RegisterService2_1.E_SR.Q" Destination="RegisterService2_1.E_SWITCH.G" /></Request>
+cleanAll;<Request ID="88" Action="CREATE"><Connection Source="RegisterService2_1.RegisterService.registerService" Destination="RegisterService2_1.RegisterServiceHTTP_1.registerService" /></Request>
+cleanAll;<Request ID="89" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="FieldsToArrowheadService.REQ" /></Request>
+cleanAll;<Request ID="90" Action="CREATE"><Connection Source="FieldsToArrowheadService.CNF" Destination="FieldsToArrowheadService_1.REQ" /></Request>
+cleanAll;<Request ID="91" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.CNF" Destination="RegisterService1.E_SR.R" /></Request>
+cleanAll;<Request ID="92" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.CNF" Destination="RegisterService1.FieldsToServiceRegistryEntry.REQ" /></Request>
+cleanAll;<Request ID="93" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.CNF" Destination="RegisterService1.E_REND.EI1" /></Request>
+cleanAll;<Request ID="94" Action="CREATE"><Connection Source="FieldsToArrowheadService_1.CNF" Destination="FieldsToArrowheadSystem_1.REQ" /></Request>
+cleanAll;<Request ID="95" Action="CREATE"><Connection Source="SUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+cleanAll;<Request ID="96" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="SUBL_0.INIT" /></Request>
+cleanAll;<Request ID="97" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="STEST_END.REQ" /></Request>
+cleanAll;<Request ID="98" Action="CREATE"><Connection Source="SUBL_0_1.IND" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+cleanAll;<Request ID="99" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0_1.INIT" /></Request>
+cleanAll;<Request ID="100" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0_1.INIT" /></Request>
+cleanAll;<Request ID="101" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService1.FieldsToServiceRegistryEntry.provider" /></Request>
+cleanAll;<Request ID="102" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService2.FieldsToServiceRegistryEntry.provider" /></Request>
+cleanAll;<Request ID="103" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="RegisterService1.FieldsToServiceRegistryEntry.providedService" /></Request>
+cleanAll;<Request ID="104" Action="CREATE"><Connection Source="FieldsToArrowheadService_1.arrowheadService" Destination="RegisterService2.FieldsToServiceRegistryEntry.providedService" /></Request>
+cleanAll;<Request ID="105" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.providedService" /></Request>
+cleanAll;<Request ID="106" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.arrowheadSystem" Destination="RegisterService2_1.FieldsToServiceRegistryEntry.provider" /></Request>
+cleanAll;<Request ID="107" Action="START"/>
+;<Request ID="108" Action="CREATE"><FB Name="RegisterUnregister" Type="EMB_RES" /></Request>
+RegisterUnregister;<Request ID="109" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+RegisterUnregister;<Request ID="110" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+RegisterUnregister;<Request ID="111" Action="CREATE"><FB Name="ServiceNotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+RegisterUnregister;<Request ID="112" Action="CREATE"><FB Name="FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+RegisterUnregister;<Request ID="113" Action="WRITE"><Connection Source="1" Destination="FieldsToServiceQueryForm.version" /></Request>
+RegisterUnregister;<Request ID="114" Action="CREATE"><FB Name="QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+RegisterUnregister;<Request ID="115" Action="CREATE"><FB Name="FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+RegisterUnregister;<Request ID="116" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService.serviceDefinition" /></Request>
+RegisterUnregister;<Request ID="117" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService.interfaces" /></Request>
+RegisterUnregister;<Request ID="118" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService.serviceMetadata" /></Request>
+RegisterUnregister;<Request ID="119" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+RegisterUnregister;<Request ID="120" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ.IN1" /></Request>
+RegisterUnregister;<Request ID="121" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterUnregister;<Request ID="122" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterUnregister;<Request ID="123" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="124" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+RegisterUnregister;<Request ID="125" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterUnregister;<Request ID="126" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+RegisterUnregister;<Request ID="127" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="128" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+RegisterUnregister;<Request ID="129" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterUnregister;<Request ID="130" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="131" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+RegisterUnregister;<Request ID="132" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterUnregister;<Request ID="133" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterUnregister;<Request ID="134" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterUnregister;<Request ID="135" Action="CREATE"><FB Name="QueryService" Type="QueryService" /></Request>
+RegisterUnregister;<Request ID="136" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryService.address" /></Request>
+RegisterUnregister;<Request ID="137" Action="CREATE"><FB Name="Registered" Type="E_SR" /></Request>
+RegisterUnregister;<Request ID="138" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterUnregister;<Request ID="139" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+RegisterUnregister;<Request ID="140" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_1.IN1" /></Request>
+RegisterUnregister;<Request ID="141" Action="CREATE"><FB Name="ServiceRegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterUnregister;<Request ID="142" Action="CREATE"><FB Name="Sequencer.E_DEMUX" Type="E_DEMUX" /></Request>
+RegisterUnregister;<Request ID="143" Action="CREATE"><FB Name="Sequencer.E_CTU" Type="E_CTU" /></Request>
+RegisterUnregister;<Request ID="144" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1" Type="E_DEMUX" /></Request>
+RegisterUnregister;<Request ID="145" Action="CREATE"><FB Name="Sequencer.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterUnregister;<Request ID="146" Action="CREATE"><FB Name="Sequencer.F_GT" Type="F_GT" /></Request>
+RegisterUnregister;<Request ID="147" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer.F_GT.IN2" /></Request>
+RegisterUnregister;<Request ID="148" Action="CREATE"><FB Name="Sequencer.E_MERGE" Type="E_MERGE" /></Request>
+RegisterUnregister;<Request ID="149" Action="CREATE"><FB Name="Sequencer.F_SUB" Type="F_SUB" /></Request>
+RegisterUnregister;<Request ID="150" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer.F_SUB.IN2" /></Request>
+RegisterUnregister;<Request ID="151" Action="CREATE"><FB Name="RegisterServiceHTTP" Type="RegisterServiceHTTP" /></Request>
+RegisterUnregister;<Request ID="152" Action="CREATE"><FB Name="RegisterService" Type="RegisterService" /></Request>
+RegisterUnregister;<Request ID="153" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService.endpoint" /></Request>
+RegisterUnregister;<Request ID="154" Action="CREATE"><FB Name="FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+RegisterUnregister;<Request ID="155" Action="WRITE"><Connection Source="/serviceTest/start" Destination="FieldsToServiceRegistryEntry.serviceURI" /></Request>
+RegisterUnregister;<Request ID="156" Action="WRITE"><Connection Source="1" Destination="FieldsToServiceRegistryEntry.version" /></Request>
+RegisterUnregister;<Request ID="157" Action="WRITE"><Connection Source="false" Destination="FieldsToServiceRegistryEntry.udp" /></Request>
+RegisterUnregister;<Request ID="158" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="FieldsToServiceRegistryEntry.metadata" /></Request>
+RegisterUnregister;<Request ID="159" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+RegisterUnregister;<Request ID="160" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+RegisterUnregister;<Request ID="161" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+RegisterUnregister;<Request ID="162" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+RegisterUnregister;<Request ID="163" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterUnregister;<Request ID="164" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterUnregister;<Request ID="165" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="166" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+RegisterUnregister;<Request ID="167" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterUnregister;<Request ID="168" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+RegisterUnregister;<Request ID="169" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="170" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+RegisterUnregister;<Request ID="171" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterUnregister;<Request ID="172" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterUnregister;<Request ID="173" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+RegisterUnregister;<Request ID="174" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterUnregister;<Request ID="175" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterUnregister;<Request ID="176" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterUnregister;<Request ID="177" Action="CREATE"><FB Name="F_EQ_2" Type="F_EQ" /></Request>
+RegisterUnregister;<Request ID="178" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_2.IN1" /></Request>
+RegisterUnregister;<Request ID="179" Action="CREATE"><FB Name="ServiceNotRegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterUnregister;<Request ID="180" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+RegisterUnregister;<Request ID="181" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+RegisterUnregister;<Request ID="182" Action="CREATE"><FB Name="PUBLISH_0" Type="PUBL_0" /></Request>
+RegisterUnregister;<Request ID="183" Action="WRITE"><Connection Source="WSTRIGN#RegisterUnregisterTestReady" Destination="PUBLISH_0.ID" /></Request>
+RegisterUnregister;<Request ID="184" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+RegisterUnregister;<Request ID="185" Action="WRITE"><Connection Source="WSTRIGN#allCleaned" Destination="SUBL_0.ID" /></Request>
+RegisterUnregister;<Request ID="186" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+RegisterUnregister;<Request ID="187" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+RegisterUnregister;<Request ID="188" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+RegisterUnregister;<Request ID="189" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="E_SWITCH.EI" /></Request>
+RegisterUnregister;<Request ID="190" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+RegisterUnregister;<Request ID="191" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+RegisterUnregister;<Request ID="192" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+RegisterUnregister;<Request ID="193" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+RegisterUnregister;<Request ID="194" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+RegisterUnregister;<Request ID="195" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+RegisterUnregister;<Request ID="196" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+RegisterUnregister;<Request ID="197" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+RegisterUnregister;<Request ID="198" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+RegisterUnregister;<Request ID="199" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+RegisterUnregister;<Request ID="200" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+RegisterUnregister;<Request ID="201" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_2.IN2" /></Request>
+RegisterUnregister;<Request ID="202" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+RegisterUnregister;<Request ID="203" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+RegisterUnregister;<Request ID="204" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+RegisterUnregister;<Request ID="205" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+RegisterUnregister;<Request ID="206" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+RegisterUnregister;<Request ID="207" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+RegisterUnregister;<Request ID="208" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+RegisterUnregister;<Request ID="209" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="QueryService.query" /></Request>
+RegisterUnregister;<Request ID="210" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService.register" /></Request>
+RegisterUnregister;<Request ID="211" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="QueryService.query" /></Request>
+RegisterUnregister;<Request ID="212" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="RegisterService.unregister" /></Request>
+RegisterUnregister;<Request ID="213" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="QueryService.query" /></Request>
+RegisterUnregister;<Request ID="214" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="PUBLISH_0.INIT" /></Request>
+RegisterUnregister;<Request ID="215" Action="CREATE"><Connection Source="Sequencer.F_GT.CNF" Destination="Sequencer.E_SWITCH.EI" /></Request>
+RegisterUnregister;<Request ID="216" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO0" Destination="Sequencer.E_DEMUX.EI" /></Request>
+RegisterUnregister;<Request ID="217" Action="CREATE"><Connection Source="Sequencer.E_MERGE.EO" Destination="Sequencer.E_CTU.CU" /></Request>
+RegisterUnregister;<Request ID="218" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO1" Destination="Sequencer.F_SUB.REQ" /></Request>
+RegisterUnregister;<Request ID="219" Action="CREATE"><Connection Source="Sequencer.F_SUB.CNF" Destination="Sequencer.E_DEMUX_1.EI" /></Request>
+RegisterUnregister;<Request ID="220" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="Sequencer.E_CTU.R" /></Request>
+RegisterUnregister;<Request ID="221" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterUnregister;<Request ID="222" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterUnregister;<Request ID="223" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterUnregister;<Request ID="224" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterUnregister;<Request ID="225" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterUnregister;<Request ID="226" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterUnregister;<Request ID="227" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterUnregister;<Request ID="228" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.E_DEMUX.K" /></Request>
+RegisterUnregister;<Request ID="229" Action="CREATE"><Connection Source="Sequencer.F_GT.OUT" Destination="Sequencer.E_SWITCH.G" /></Request>
+RegisterUnregister;<Request ID="230" Action="CREATE"><Connection Source="Sequencer.F_SUB.OUT" Destination="Sequencer.E_DEMUX_1.K" /></Request>
+RegisterUnregister;<Request ID="231" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT.IN1" /></Request>
+RegisterUnregister;<Request ID="232" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB.IN1" /></Request>
+RegisterUnregister;<Request ID="233" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+RegisterUnregister;<Request ID="234" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+RegisterUnregister;<Request ID="235" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+RegisterUnregister;<Request ID="236" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="F_EQ.REQ" /></Request>
+RegisterUnregister;<Request ID="237" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+RegisterUnregister;<Request ID="238" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+RegisterUnregister;<Request ID="239" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+RegisterUnregister;<Request ID="240" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+RegisterUnregister;<Request ID="241" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+RegisterUnregister;<Request ID="242" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+RegisterUnregister;<Request ID="243" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+RegisterUnregister;<Request ID="244" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+RegisterUnregister;<Request ID="245" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+RegisterUnregister;<Request ID="246" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+RegisterUnregister;<Request ID="247" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+RegisterUnregister;<Request ID="248" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+RegisterUnregister;<Request ID="249" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+RegisterUnregister;<Request ID="250" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+RegisterUnregister;<Request ID="251" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+RegisterUnregister;<Request ID="252" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+RegisterUnregister;<Request ID="253" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+RegisterUnregister;<Request ID="254" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+RegisterUnregister;<Request ID="255" Action="CREATE"><Connection Source="FieldsToArrowheadService.CNF" Destination="FieldsToServiceQueryForm.REQ" /></Request>
+RegisterUnregister;<Request ID="256" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="ServiceNotRegisteredPos1.REQ" /></Request>
+RegisterUnregister;<Request ID="257" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterUnregister;<Request ID="258" Action="CREATE"><Connection Source="QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+RegisterUnregister;<Request ID="259" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="F_EQ_1.REQ" /></Request>
+RegisterUnregister;<Request ID="260" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="ServiceRegisteredPos0.REQ" /></Request>
+RegisterUnregister;<Request ID="261" Action="CREATE"><Connection Source="ServiceRegisteredPos0.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterUnregister;<Request ID="262" Action="CREATE"><Connection Source="RegisterService.doneUnregister" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterUnregister;<Request ID="263" Action="CREATE"><Connection Source="RegisterService.doneUnregister" Destination="Registered.R" /></Request>
+RegisterUnregister;<Request ID="264" Action="CREATE"><Connection Source="RegisterService.doneRegister" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterUnregister;<Request ID="265" Action="CREATE"><Connection Source="RegisterService.doneRegister" Destination="Registered.S" /></Request>
+RegisterUnregister;<Request ID="266" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterUnregister;<Request ID="267" Action="CREATE"><Connection Source="F_EQ_2.CNF" Destination="ServiceNotRegisteredPos0.REQ" /></Request>
+RegisterUnregister;<Request ID="268" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterUnregister;<Request ID="269" Action="CREATE"><Connection Source="QueryService.queried" Destination="GET_AT_INDEX_1.REQ" /></Request>
+RegisterUnregister;<Request ID="270" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="F_EQ_2.REQ" /></Request>
+RegisterUnregister;<Request ID="271" Action="CREATE"><Connection Source="ServiceNotRegisteredPos0.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterUnregister;<Request ID="272" Action="CREATE"><Connection Source="PUBLISH_0.INITO" Destination="PUBLISH_0.REQ" /></Request>
+RegisterUnregister;<Request ID="273" Action="CREATE"><Connection Source="FieldsToServiceQueryForm.CNF" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+RegisterUnregister;<Request ID="274" Action="CREATE"><Connection Source="FieldsToServiceRegistryEntry.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterUnregister;<Request ID="275" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadService.REQ" /></Request>
+RegisterUnregister;<Request ID="276" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+RegisterUnregister;<Request ID="277" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+RegisterUnregister;<Request ID="278" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="FieldsToServiceQueryForm.service" /></Request>
+RegisterUnregister;<Request ID="279" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="ServiceNotRegisteredPos1.check" /></Request>
+RegisterUnregister;<Request ID="280" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterUnregister;<Request ID="281" Action="CREATE"><Connection Source="FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryService.serviceQueryForm" /></Request>
+RegisterUnregister;<Request ID="282" Action="CREATE"><Connection Source="QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+RegisterUnregister;<Request ID="283" Action="CREATE"><Connection Source="Registered.Q" Destination="E_SWITCH.G" /></Request>
+RegisterUnregister;<Request ID="284" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="ServiceRegisteredPos0.check" /></Request>
+RegisterUnregister;<Request ID="285" Action="CREATE"><Connection Source="FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService.serviceRegistryEntry" /></Request>
+RegisterUnregister;<Request ID="286" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="FieldsToServiceRegistryEntry.providedService" /></Request>
+RegisterUnregister;<Request ID="287" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="FieldsToServiceRegistryEntry.provider" /></Request>
+RegisterUnregister;<Request ID="288" Action="CREATE"><Connection Source="F_EQ_2.OUT" Destination="ServiceNotRegisteredPos0.check" /></Request>
+RegisterUnregister;<Request ID="289" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterUnregister;<Request ID="290" Action="CREATE"><Connection Source="QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+RegisterUnregister;<Request ID="291" Action="CREATE"><Connection Source="QueryService.queryServices" Destination="QueryServiceHTTP.queryServices" /></Request>
+RegisterUnregister;<Request ID="292" Action="CREATE"><Connection Source="RegisterService.registerService" Destination="RegisterServiceHTTP.registerService" /></Request>
+RegisterUnregister;<Request ID="293" Action="START"/>
+;<Request ID="294" Action="CREATE"><FB Name="DoubleRegister" Type="EMB_RES" /></Request>
+DoubleRegister;<Request ID="295" Action="CREATE"><FB Name="QueryService" Type="QueryService" /></Request>
+DoubleRegister;<Request ID="296" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryService.address" /></Request>
+DoubleRegister;<Request ID="297" Action="CREATE"><FB Name="QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+DoubleRegister;<Request ID="298" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+DoubleRegister;<Request ID="299" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+DoubleRegister;<Request ID="300" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+DoubleRegister;<Request ID="301" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ.IN1" /></Request>
+DoubleRegister;<Request ID="302" Action="CREATE"><FB Name="ServiceNotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+DoubleRegister;<Request ID="303" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+DoubleRegister;<Request ID="304" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+DoubleRegister;<Request ID="305" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="306" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+DoubleRegister;<Request ID="307" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+DoubleRegister;<Request ID="308" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+DoubleRegister;<Request ID="309" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="310" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+DoubleRegister;<Request ID="311" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+DoubleRegister;<Request ID="312" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="313" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+DoubleRegister;<Request ID="314" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+DoubleRegister;<Request ID="315" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+DoubleRegister;<Request ID="316" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+DoubleRegister;<Request ID="317" Action="CREATE"><FB Name="FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+DoubleRegister;<Request ID="318" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService.serviceDefinition" /></Request>
+DoubleRegister;<Request ID="319" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService.interfaces" /></Request>
+DoubleRegister;<Request ID="320" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService.serviceMetadata" /></Request>
+DoubleRegister;<Request ID="321" Action="CREATE"><FB Name="FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+DoubleRegister;<Request ID="322" Action="WRITE"><Connection Source="1" Destination="FieldsToServiceQueryForm.version" /></Request>
+DoubleRegister;<Request ID="323" Action="CREATE"><FB Name="Registered" Type="E_SR" /></Request>
+DoubleRegister;<Request ID="324" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+DoubleRegister;<Request ID="325" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+DoubleRegister;<Request ID="326" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_1.IN1" /></Request>
+DoubleRegister;<Request ID="327" Action="CREATE"><FB Name="ServiceRegisteredPos0" Type="TEST_CONDITION" /></Request>
+DoubleRegister;<Request ID="328" Action="CREATE"><FB Name="Sequencer.E_DEMUX" Type="E_DEMUX" /></Request>
+DoubleRegister;<Request ID="329" Action="CREATE"><FB Name="Sequencer.E_CTU" Type="E_CTU" /></Request>
+DoubleRegister;<Request ID="330" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1" Type="E_DEMUX" /></Request>
+DoubleRegister;<Request ID="331" Action="CREATE"><FB Name="Sequencer.E_SWITCH" Type="E_SWITCH" /></Request>
+DoubleRegister;<Request ID="332" Action="CREATE"><FB Name="Sequencer.F_GT" Type="F_GT" /></Request>
+DoubleRegister;<Request ID="333" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer.F_GT.IN2" /></Request>
+DoubleRegister;<Request ID="334" Action="CREATE"><FB Name="Sequencer.F_SUB" Type="F_SUB" /></Request>
+DoubleRegister;<Request ID="335" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer.F_SUB.IN2" /></Request>
+DoubleRegister;<Request ID="336" Action="CREATE"><FB Name="Sequencer.E_MERGE_1" Type="E_MERGE" /></Request>
+DoubleRegister;<Request ID="337" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+DoubleRegister;<Request ID="338" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+DoubleRegister;<Request ID="339" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+DoubleRegister;<Request ID="340" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+DoubleRegister;<Request ID="341" Action="CREATE"><FB Name="FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+DoubleRegister;<Request ID="342" Action="WRITE"><Connection Source="/serviceTest/start" Destination="FieldsToServiceRegistryEntry.serviceURI" /></Request>
+DoubleRegister;<Request ID="343" Action="WRITE"><Connection Source="1" Destination="FieldsToServiceRegistryEntry.version" /></Request>
+DoubleRegister;<Request ID="344" Action="WRITE"><Connection Source="false" Destination="FieldsToServiceRegistryEntry.udp" /></Request>
+DoubleRegister;<Request ID="345" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="FieldsToServiceRegistryEntry.metadata" /></Request>
+DoubleRegister;<Request ID="346" Action="CREATE"><FB Name="RegisterService" Type="RegisterService" /></Request>
+DoubleRegister;<Request ID="347" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService.endpoint" /></Request>
+DoubleRegister;<Request ID="348" Action="CREATE"><FB Name="RegisterServiceHTTP" Type="RegisterServiceHTTP" /></Request>
+DoubleRegister;<Request ID="349" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+DoubleRegister;<Request ID="350" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+DoubleRegister;<Request ID="351" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="352" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+DoubleRegister;<Request ID="353" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+DoubleRegister;<Request ID="354" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+DoubleRegister;<Request ID="355" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="356" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+DoubleRegister;<Request ID="357" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+DoubleRegister;<Request ID="358" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+DoubleRegister;<Request ID="359" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+DoubleRegister;<Request ID="360" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+DoubleRegister;<Request ID="361" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+DoubleRegister;<Request ID="362" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+DoubleRegister;<Request ID="363" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+DoubleRegister;<Request ID="364" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+DoubleRegister;<Request ID="365" Action="CREATE"><FB Name="F_EQ_2" Type="F_EQ" /></Request>
+DoubleRegister;<Request ID="366" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_2.IN1" /></Request>
+DoubleRegister;<Request ID="367" Action="CREATE"><FB Name="ServiceNotRegisteredPos0" Type="TEST_CONDITION" /></Request>
+DoubleRegister;<Request ID="368" Action="CREATE"><FB Name="SUBSCRIBE_0" Type="SUBL_0" /></Request>
+DoubleRegister;<Request ID="369" Action="WRITE"><Connection Source="WSTRIGN#RegisterUnregisterTestReady" Destination="SUBSCRIBE_0.ID" /></Request>
+DoubleRegister;<Request ID="370" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+DoubleRegister;<Request ID="371" Action="WRITE"><Connection Source="WSTRIGN#DoubleRegisterReady" Destination="PUBL_0.ID" /></Request>
+DoubleRegister;<Request ID="372" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+DoubleRegister;<Request ID="373" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+DoubleRegister;<Request ID="374" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+DoubleRegister;<Request ID="375" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="E_SWITCH.EI" /></Request>
+DoubleRegister;<Request ID="376" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+DoubleRegister;<Request ID="377" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+DoubleRegister;<Request ID="378" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+DoubleRegister;<Request ID="379" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+DoubleRegister;<Request ID="380" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+DoubleRegister;<Request ID="381" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+DoubleRegister;<Request ID="382" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+DoubleRegister;<Request ID="383" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+DoubleRegister;<Request ID="384" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+DoubleRegister;<Request ID="385" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+DoubleRegister;<Request ID="386" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+DoubleRegister;<Request ID="387" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_2.IN2" /></Request>
+DoubleRegister;<Request ID="388" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+DoubleRegister;<Request ID="389" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+DoubleRegister;<Request ID="390" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+DoubleRegister;<Request ID="391" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+DoubleRegister;<Request ID="392" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+DoubleRegister;<Request ID="393" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+DoubleRegister;<Request ID="394" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+DoubleRegister;<Request ID="395" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService.register" /></Request>
+DoubleRegister;<Request ID="396" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService.register" /></Request>
+DoubleRegister;<Request ID="397" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="QueryService.query" /></Request>
+DoubleRegister;<Request ID="398" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="PUBL_0.REQ" /></Request>
+DoubleRegister;<Request ID="399" Action="CREATE"><Connection Source="Sequencer.F_GT.CNF" Destination="Sequencer.E_SWITCH.EI" /></Request>
+DoubleRegister;<Request ID="400" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO1" Destination="Sequencer.F_SUB.REQ" /></Request>
+DoubleRegister;<Request ID="401" Action="CREATE"><Connection Source="Sequencer.F_SUB.CNF" Destination="Sequencer.E_DEMUX_1.EI" /></Request>
+DoubleRegister;<Request ID="402" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="Sequencer.E_CTU.R" /></Request>
+DoubleRegister;<Request ID="403" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="Sequencer.E_MERGE_1.EI2" /></Request>
+DoubleRegister;<Request ID="404" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="Sequencer.E_MERGE_1.EI2" /></Request>
+DoubleRegister;<Request ID="405" Action="CREATE"><Connection Source="Sequencer.E_MERGE_1.EO" Destination="Sequencer.E_CTU.CU" /></Request>
+DoubleRegister;<Request ID="406" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="Sequencer.E_MERGE_1.EI1" /></Request>
+DoubleRegister;<Request ID="407" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="Sequencer.E_MERGE_1.EI1" /></Request>
+DoubleRegister;<Request ID="408" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="Sequencer.E_MERGE_1.EI1" /></Request>
+DoubleRegister;<Request ID="409" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="Sequencer.E_MERGE_1.EI2" /></Request>
+DoubleRegister;<Request ID="410" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="Sequencer.E_MERGE_1.EI1" /></Request>
+DoubleRegister;<Request ID="411" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO0" Destination="Sequencer.E_DEMUX.EI" /></Request>
+DoubleRegister;<Request ID="412" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="RegisterService.unregister" /></Request>
+DoubleRegister;<Request ID="413" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="QueryService.query" /></Request>
+DoubleRegister;<Request ID="414" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.E_DEMUX.K" /></Request>
+DoubleRegister;<Request ID="415" Action="CREATE"><Connection Source="Sequencer.F_GT.OUT" Destination="Sequencer.E_SWITCH.G" /></Request>
+DoubleRegister;<Request ID="416" Action="CREATE"><Connection Source="Sequencer.F_SUB.OUT" Destination="Sequencer.E_DEMUX_1.K" /></Request>
+DoubleRegister;<Request ID="417" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT.IN1" /></Request>
+DoubleRegister;<Request ID="418" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB.IN1" /></Request>
+DoubleRegister;<Request ID="419" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+DoubleRegister;<Request ID="420" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+DoubleRegister;<Request ID="421" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+DoubleRegister;<Request ID="422" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="F_EQ.REQ" /></Request>
+DoubleRegister;<Request ID="423" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+DoubleRegister;<Request ID="424" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+DoubleRegister;<Request ID="425" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+DoubleRegister;<Request ID="426" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+DoubleRegister;<Request ID="427" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+DoubleRegister;<Request ID="428" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+DoubleRegister;<Request ID="429" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+DoubleRegister;<Request ID="430" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+DoubleRegister;<Request ID="431" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+DoubleRegister;<Request ID="432" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+DoubleRegister;<Request ID="433" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+DoubleRegister;<Request ID="434" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+DoubleRegister;<Request ID="435" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+DoubleRegister;<Request ID="436" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+DoubleRegister;<Request ID="437" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+DoubleRegister;<Request ID="438" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+DoubleRegister;<Request ID="439" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+DoubleRegister;<Request ID="440" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+DoubleRegister;<Request ID="441" Action="CREATE"><Connection Source="QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+DoubleRegister;<Request ID="442" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="ServiceNotRegisteredPos1.REQ" /></Request>
+DoubleRegister;<Request ID="443" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+DoubleRegister;<Request ID="444" Action="CREATE"><Connection Source="FieldsToArrowheadService.CNF" Destination="FieldsToServiceQueryForm.REQ" /></Request>
+DoubleRegister;<Request ID="445" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="F_EQ_1.REQ" /></Request>
+DoubleRegister;<Request ID="446" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="ServiceRegisteredPos0.REQ" /></Request>
+DoubleRegister;<Request ID="447" Action="CREATE"><Connection Source="ServiceRegisteredPos0.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+DoubleRegister;<Request ID="448" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="FieldsToServiceRegistryEntry.REQ" /></Request>
+DoubleRegister;<Request ID="449" Action="CREATE"><Connection Source="RegisterService.doneRegister" Destination="Registered.S" /></Request>
+DoubleRegister;<Request ID="450" Action="CREATE"><Connection Source="RegisterService.doneUnregister" Destination="Registered.R" /></Request>
+DoubleRegister;<Request ID="451" Action="CREATE"><Connection Source="QueryService.queried" Destination="GET_AT_INDEX_1.REQ" /></Request>
+DoubleRegister;<Request ID="452" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+DoubleRegister;<Request ID="453" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="F_EQ_2.REQ" /></Request>
+DoubleRegister;<Request ID="454" Action="CREATE"><Connection Source="F_EQ_2.CNF" Destination="ServiceNotRegisteredPos0.REQ" /></Request>
+DoubleRegister;<Request ID="455" Action="CREATE"><Connection Source="ServiceNotRegisteredPos0.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+DoubleRegister;<Request ID="456" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_0.INIT" /></Request>
+DoubleRegister;<Request ID="457" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_0.INIT" /></Request>
+DoubleRegister;<Request ID="458" Action="CREATE"><Connection Source="FieldsToServiceRegistryEntry.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+DoubleRegister;<Request ID="459" Action="CREATE"><Connection Source="SUBSCRIBE_0.IND" Destination="FieldsToArrowheadService.REQ" /></Request>
+DoubleRegister;<Request ID="460" Action="CREATE"><Connection Source="FieldsToServiceQueryForm.CNF" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+DoubleRegister;<Request ID="461" Action="CREATE"><Connection Source="RegisterService.doneRegister" Destination="Sequencer.F_GT.REQ" /></Request>
+DoubleRegister;<Request ID="462" Action="CREATE"><Connection Source="RegisterService.doneUnregister" Destination="Sequencer.F_GT.REQ" /></Request>
+DoubleRegister;<Request ID="463" Action="CREATE"><Connection Source="SUBSCRIBE_0.INITO" Destination="PUBL_0.INIT" /></Request>
+DoubleRegister;<Request ID="464" Action="CREATE"><Connection Source="QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+DoubleRegister;<Request ID="465" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="ServiceNotRegisteredPos1.check" /></Request>
+DoubleRegister;<Request ID="466" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+DoubleRegister;<Request ID="467" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="FieldsToServiceQueryForm.service" /></Request>
+DoubleRegister;<Request ID="468" Action="CREATE"><Connection Source="FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryService.serviceQueryForm" /></Request>
+DoubleRegister;<Request ID="469" Action="CREATE"><Connection Source="Registered.Q" Destination="E_SWITCH.G" /></Request>
+DoubleRegister;<Request ID="470" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="ServiceRegisteredPos0.check" /></Request>
+DoubleRegister;<Request ID="471" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="FieldsToServiceRegistryEntry.providedService" /></Request>
+DoubleRegister;<Request ID="472" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="FieldsToServiceRegistryEntry.provider" /></Request>
+DoubleRegister;<Request ID="473" Action="CREATE"><Connection Source="FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService.serviceRegistryEntry" /></Request>
+DoubleRegister;<Request ID="474" Action="CREATE"><Connection Source="QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+DoubleRegister;<Request ID="475" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+DoubleRegister;<Request ID="476" Action="CREATE"><Connection Source="F_EQ_2.OUT" Destination="ServiceNotRegisteredPos0.check" /></Request>
+DoubleRegister;<Request ID="477" Action="CREATE"><Connection Source="QueryService.queryServices" Destination="QueryServiceHTTP.queryServices" /></Request>
+DoubleRegister;<Request ID="478" Action="CREATE"><Connection Source="RegisterService.registerService" Destination="RegisterServiceHTTP.registerService" /></Request>
+DoubleRegister;<Request ID="479" Action="START"/>
+;<Request ID="480" Action="CREATE"><FB Name="RegisterMoreServices" Type="EMB_RES" /></Request>
+RegisterMoreServices;<Request ID="481" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="482" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServices;<Request ID="483" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="484" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="485" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+RegisterMoreServices;<Request ID="486" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServices;<Request ID="487" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+RegisterMoreServices;<Request ID="488" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="489" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+RegisterMoreServices;<Request ID="490" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServices;<Request ID="491" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="492" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+RegisterMoreServices;<Request ID="493" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="494" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="495" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServices;<Request ID="496" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+RegisterMoreServices;<Request ID="497" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+RegisterMoreServices;<Request ID="498" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+RegisterMoreServices;<Request ID="499" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+RegisterMoreServices;<Request ID="500" Action="CREATE"><FB Name="Service2RegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="501" Action="CREATE"><FB Name="Service1RegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="502" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="503" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ.IN1" /></Request>
+RegisterMoreServices;<Request ID="504" Action="CREATE"><FB Name="F_EQ_2" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="505" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_2.IN1" /></Request>
+RegisterMoreServices;<Request ID="506" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServices;<Request ID="507" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="508" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="509" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+RegisterMoreServices;<Request ID="510" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServices;<Request ID="511" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+RegisterMoreServices;<Request ID="512" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="513" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+RegisterMoreServices;<Request ID="514" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServices;<Request ID="515" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="516" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+RegisterMoreServices;<Request ID="517" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="518" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="519" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServices;<Request ID="520" Action="CREATE"><FB Name="Service1NotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="521" Action="CREATE"><FB Name="Sequencer.E_DEMUX" Type="E_DEMUX" /></Request>
+RegisterMoreServices;<Request ID="522" Action="CREATE"><FB Name="Sequencer.E_CTU" Type="E_CTU" /></Request>
+RegisterMoreServices;<Request ID="523" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1" Type="E_DEMUX" /></Request>
+RegisterMoreServices;<Request ID="524" Action="CREATE"><FB Name="Sequencer.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="525" Action="CREATE"><FB Name="Sequencer.F_GT" Type="F_GT" /></Request>
+RegisterMoreServices;<Request ID="526" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer.F_GT.IN2" /></Request>
+RegisterMoreServices;<Request ID="527" Action="CREATE"><FB Name="Sequencer.E_MERGE" Type="E_MERGE" /></Request>
+RegisterMoreServices;<Request ID="528" Action="CREATE"><FB Name="Sequencer.F_SUB" Type="F_SUB" /></Request>
+RegisterMoreServices;<Request ID="529" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer.F_SUB.IN2" /></Request>
+RegisterMoreServices;<Request ID="530" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1_1" Type="E_DEMUX" /></Request>
+RegisterMoreServices;<Request ID="531" Action="CREATE"><FB Name="Sequencer.F_GT_1" Type="F_GT" /></Request>
+RegisterMoreServices;<Request ID="532" Action="WRITE"><Connection Source="INT#7" Destination="Sequencer.F_GT_1.IN2" /></Request>
+RegisterMoreServices;<Request ID="533" Action="CREATE"><FB Name="Sequencer.F_SUB_1" Type="F_SUB" /></Request>
+RegisterMoreServices;<Request ID="534" Action="WRITE"><Connection Source="INT#8" Destination="Sequencer.F_SUB_1.IN2" /></Request>
+RegisterMoreServices;<Request ID="535" Action="CREATE"><FB Name="Sequencer.E_SWITCH_1" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="536" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServices;<Request ID="537" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+RegisterMoreServices;<Request ID="538" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServices;<Request ID="539" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+RegisterMoreServices;<Request ID="540" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="541" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start2" Destination="F_EQ_1.IN1" /></Request>
+RegisterMoreServices;<Request ID="542" Action="CREATE"><FB Name="S1Reg" Type="E_SR" /></Request>
+RegisterMoreServices;<Request ID="543" Action="CREATE"><FB Name="RegisterService2.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="544" Action="CREATE"><FB Name="RegisterService2.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+RegisterMoreServices;<Request ID="545" Action="CREATE"><FB Name="RegisterService2.RegisterService" Type="RegisterService" /></Request>
+RegisterMoreServices;<Request ID="546" Action="CREATE"><FB Name="RegisterService2.E_SR" Type="E_SR" /></Request>
+RegisterMoreServices;<Request ID="547" Action="CREATE"><FB Name="RegisterService2.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="548" Action="CREATE"><FB Name="RegisterService2.E_REND" Type="E_REND" /></Request>
+RegisterMoreServices;<Request ID="549" Action="CREATE"><FB Name="RegisterService1.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="550" Action="CREATE"><FB Name="RegisterService1.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+RegisterMoreServices;<Request ID="551" Action="CREATE"><FB Name="RegisterService1.RegisterService" Type="RegisterService" /></Request>
+RegisterMoreServices;<Request ID="552" Action="CREATE"><FB Name="RegisterService1.E_SR" Type="E_SR" /></Request>
+RegisterMoreServices;<Request ID="553" Action="CREATE"><FB Name="RegisterService1.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="554" Action="CREATE"><FB Name="RegisterService1.E_REND" Type="E_REND" /></Request>
+RegisterMoreServices;<Request ID="555" Action="CREATE"><FB Name="Service2NotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="556" Action="CREATE"><FB Name="F_EQ_1_1" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="557" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1_1.IN1" /></Request>
+RegisterMoreServices;<Request ID="558" Action="CREATE"><FB Name="S2Reg" Type="E_SR" /></Request>
+RegisterMoreServices;<Request ID="559" Action="CREATE"><FB Name="E_SWITCH_1" Type="E_SWITCH" /></Request>
+RegisterMoreServices;<Request ID="560" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServices;<Request ID="561" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="562" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="563" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.member" /></Request>
+RegisterMoreServices;<Request ID="564" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServices;<Request ID="565" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_2" /></Request>
+RegisterMoreServices;<Request ID="566" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="567" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.member" /></Request>
+RegisterMoreServices;<Request ID="568" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServices;<Request ID="569" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="570" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.member" /></Request>
+RegisterMoreServices;<Request ID="571" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="572" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="573" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServices;<Request ID="574" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServices;<Request ID="575" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="576" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="577" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.member" /></Request>
+RegisterMoreServices;<Request ID="578" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServices;<Request ID="579" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_2" /></Request>
+RegisterMoreServices;<Request ID="580" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="581" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.member" /></Request>
+RegisterMoreServices;<Request ID="582" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServices;<Request ID="583" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServices;<Request ID="584" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.member" /></Request>
+RegisterMoreServices;<Request ID="585" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="586" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServices;<Request ID="587" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServices;<Request ID="588" Action="CREATE"><FB Name="GET_AT_INDEX_1_1" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServices;<Request ID="589" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1_1.INDEX" /></Request>
+RegisterMoreServices;<Request ID="590" Action="CREATE"><FB Name="QueryService2.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+RegisterMoreServices;<Request ID="591" Action="CREATE"><FB Name="QueryService2.QueryService" Type="QueryService" /></Request>
+RegisterMoreServices;<Request ID="592" Action="CREATE"><FB Name="QueryService2.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+RegisterMoreServices;<Request ID="593" Action="CREATE"><FB Name="GET_AT_INDEX_2" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServices;<Request ID="594" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_2.INDEX" /></Request>
+RegisterMoreServices;<Request ID="595" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+RegisterMoreServices;<Request ID="596" Action="WRITE"><Connection Source="WSTRIGN#DoubleRegisterReady" Destination="SUBL_0.ID" /></Request>
+RegisterMoreServices;<Request ID="597" Action="CREATE"><FB Name="F_EQ_3" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="598" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_3.IN1" /></Request>
+RegisterMoreServices;<Request ID="599" Action="CREATE"><FB Name="Service1NotRegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="600" Action="CREATE"><FB Name="F_EQ_3_1" Type="F_EQ" /></Request>
+RegisterMoreServices;<Request ID="601" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_3_1.IN1" /></Request>
+RegisterMoreServices;<Request ID="602" Action="CREATE"><FB Name="Service2NotRegisteredPos0" Type="TEST_CONDITION" /></Request>
+RegisterMoreServices;<Request ID="603" Action="CREATE"><FB Name="QueryService1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+RegisterMoreServices;<Request ID="604" Action="CREATE"><FB Name="QueryService1.QueryService" Type="QueryService" /></Request>
+RegisterMoreServices;<Request ID="605" Action="CREATE"><FB Name="QueryService1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+RegisterMoreServices;<Request ID="606" Action="CREATE"><FB Name="Service1" Type="FieldsToArrowheadService" /></Request>
+RegisterMoreServices;<Request ID="607" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="Service1.serviceDefinition" /></Request>
+RegisterMoreServices;<Request ID="608" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="Service1.interfaces" /></Request>
+RegisterMoreServices;<Request ID="609" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="Service1.serviceMetadata" /></Request>
+RegisterMoreServices;<Request ID="610" Action="CREATE"><FB Name="Service2" Type="FieldsToArrowheadService" /></Request>
+RegisterMoreServices;<Request ID="611" Action="WRITE"><Connection Source="WSTRING#serviceTest2" Destination="Service2.serviceDefinition" /></Request>
+RegisterMoreServices;<Request ID="612" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="Service2.interfaces" /></Request>
+RegisterMoreServices;<Request ID="613" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="Service2.serviceMetadata" /></Request>
+RegisterMoreServices;<Request ID="614" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+RegisterMoreServices;<Request ID="615" Action="WRITE"><Connection Source="WSTRIGN#testMoreServicesReady" Destination="PUBL_0.ID" /></Request>
+RegisterMoreServices;<Request ID="616" Action="WRITE"><Connection Source="/serviceTest/start2" Destination="RegisterService2.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+RegisterMoreServices;<Request ID="617" Action="WRITE"><Connection Source="1" Destination="RegisterService2.FieldsToServiceRegistryEntry.version" /></Request>
+RegisterMoreServices;<Request ID="618" Action="WRITE"><Connection Source="false" Destination="RegisterService2.FieldsToServiceRegistryEntry.udp" /></Request>
+RegisterMoreServices;<Request ID="619" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2.FieldsToServiceRegistryEntry.metadata" /></Request>
+RegisterMoreServices;<Request ID="620" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2.RegisterService.endpoint" /></Request>
+RegisterMoreServices;<Request ID="621" Action="WRITE"><Connection Source="/serviceTest/start" Destination="RegisterService1.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+RegisterMoreServices;<Request ID="622" Action="WRITE"><Connection Source="1" Destination="RegisterService1.FieldsToServiceRegistryEntry.version" /></Request>
+RegisterMoreServices;<Request ID="623" Action="WRITE"><Connection Source="false" Destination="RegisterService1.FieldsToServiceRegistryEntry.udp" /></Request>
+RegisterMoreServices;<Request ID="624" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService1.FieldsToServiceRegistryEntry.metadata" /></Request>
+RegisterMoreServices;<Request ID="625" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService1.RegisterService.endpoint" /></Request>
+RegisterMoreServices;<Request ID="626" Action="WRITE"><Connection Source="1" Destination="QueryService2.FieldsToServiceQueryForm.version" /></Request>
+RegisterMoreServices;<Request ID="627" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryService2.QueryService.address" /></Request>
+RegisterMoreServices;<Request ID="628" Action="WRITE"><Connection Source="1" Destination="QueryService1.FieldsToServiceQueryForm.version" /></Request>
+RegisterMoreServices;<Request ID="629" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryService1.QueryService.address" /></Request>
+RegisterMoreServices;<Request ID="630" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="631" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="632" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="633" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="E_SWITCH.EI" /></Request>
+RegisterMoreServices;<Request ID="634" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="635" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+RegisterMoreServices;<Request ID="636" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="637" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+RegisterMoreServices;<Request ID="638" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="639" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="640" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+RegisterMoreServices;<Request ID="641" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="642" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+RegisterMoreServices;<Request ID="643" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+RegisterMoreServices;<Request ID="644" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+RegisterMoreServices;<Request ID="645" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+RegisterMoreServices;<Request ID="646" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+RegisterMoreServices;<Request ID="647" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+RegisterMoreServices;<Request ID="648" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+RegisterMoreServices;<Request ID="649" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+RegisterMoreServices;<Request ID="650" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="651" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+RegisterMoreServices;<Request ID="652" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="653" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="654" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="655" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="656" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="657" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+RegisterMoreServices;<Request ID="658" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="659" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+RegisterMoreServices;<Request ID="660" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="661" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="662" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+RegisterMoreServices;<Request ID="663" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="664" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+RegisterMoreServices;<Request ID="665" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+RegisterMoreServices;<Request ID="666" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_2.IN2" /></Request>
+RegisterMoreServices;<Request ID="667" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_3.IN2" /></Request>
+RegisterMoreServices;<Request ID="668" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+RegisterMoreServices;<Request ID="669" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+RegisterMoreServices;<Request ID="670" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+RegisterMoreServices;<Request ID="671" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+RegisterMoreServices;<Request ID="672" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+RegisterMoreServices;<Request ID="673" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="674" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+RegisterMoreServices;<Request ID="675" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.E_SR.S" /></Request>
+RegisterMoreServices;<Request ID="676" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="677" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.E_REND.EI1" /></Request>
+RegisterMoreServices;<Request ID="678" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.E_SR.S" /></Request>
+RegisterMoreServices;<Request ID="679" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="680" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.E_REND.EI1" /></Request>
+RegisterMoreServices;<Request ID="681" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="QueryService1.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="682" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="QueryService2.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="683" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.E_SR.R" /></Request>
+RegisterMoreServices;<Request ID="684" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="685" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.E_REND.EI1" /></Request>
+RegisterMoreServices;<Request ID="686" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="QueryService1.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="687" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="QueryService2.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="688" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.E_SR.R" /></Request>
+RegisterMoreServices;<Request ID="689" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="690" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.E_REND.EI1" /></Request>
+RegisterMoreServices;<Request ID="691" Action="CREATE"><Connection Source="Sequencer.F_GT.CNF" Destination="Sequencer.E_SWITCH.EI" /></Request>
+RegisterMoreServices;<Request ID="692" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO0" Destination="Sequencer.E_DEMUX.EI" /></Request>
+RegisterMoreServices;<Request ID="693" Action="CREATE"><Connection Source="Sequencer.E_MERGE.EO" Destination="Sequencer.E_CTU.CU" /></Request>
+RegisterMoreServices;<Request ID="694" Action="CREATE"><Connection Source="Sequencer.F_SUB.CNF" Destination="Sequencer.E_DEMUX_1.EI" /></Request>
+RegisterMoreServices;<Request ID="695" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="696" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="697" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="698" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServices;<Request ID="699" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServices;<Request ID="700" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServices;<Request ID="701" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServices;<Request ID="702" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO1" Destination="Sequencer.F_GT_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="703" Action="CREATE"><Connection Source="Sequencer.F_GT_1.CNF" Destination="Sequencer.E_SWITCH_1.EI" /></Request>
+RegisterMoreServices;<Request ID="704" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO0" Destination="Sequencer.F_SUB.REQ" /></Request>
+RegisterMoreServices;<Request ID="705" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO1" Destination="Sequencer.F_SUB_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="706" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.CNF" Destination="Sequencer.E_DEMUX_1_1.EI" /></Request>
+RegisterMoreServices;<Request ID="707" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="QueryService1.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="708" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="QueryService2.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServices;<Request ID="709" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="PUBL_0.INIT" /></Request>
+RegisterMoreServices;<Request ID="710" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="711" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="712" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="713" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServices;<Request ID="714" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO3" Destination="Sequencer.E_CTU.R" /></Request>
+RegisterMoreServices;<Request ID="715" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.E_DEMUX.K" /></Request>
+RegisterMoreServices;<Request ID="716" Action="CREATE"><Connection Source="Sequencer.F_GT.OUT" Destination="Sequencer.E_SWITCH.G" /></Request>
+RegisterMoreServices;<Request ID="717" Action="CREATE"><Connection Source="Sequencer.F_SUB.OUT" Destination="Sequencer.E_DEMUX_1.K" /></Request>
+RegisterMoreServices;<Request ID="718" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT.IN1" /></Request>
+RegisterMoreServices;<Request ID="719" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB.IN1" /></Request>
+RegisterMoreServices;<Request ID="720" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB_1.IN1" /></Request>
+RegisterMoreServices;<Request ID="721" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT_1.IN1" /></Request>
+RegisterMoreServices;<Request ID="722" Action="CREATE"><Connection Source="Sequencer.F_GT_1.OUT" Destination="Sequencer.E_SWITCH_1.G" /></Request>
+RegisterMoreServices;<Request ID="723" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.OUT" Destination="Sequencer.E_DEMUX_1_1.K" /></Request>
+RegisterMoreServices;<Request ID="724" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneRegister" Destination="S2Reg.S" /></Request>
+RegisterMoreServices;<Request ID="725" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="S2Reg.R" /></Request>
+RegisterMoreServices;<Request ID="726" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO1" Destination="RegisterService2.RegisterService.register" /></Request>
+RegisterMoreServices;<Request ID="727" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO0" Destination="RegisterService2.RegisterService.unregister" /></Request>
+RegisterMoreServices;<Request ID="728" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2.E_REND.EI2" /></Request>
+RegisterMoreServices;<Request ID="729" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_SWITCH.EI" /></Request>
+RegisterMoreServices;<Request ID="730" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_REND.R" /></Request>
+RegisterMoreServices;<Request ID="731" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2.RegisterService.serviceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="732" Action="CREATE"><Connection Source="RegisterService2.E_SR.Q" Destination="RegisterService2.E_SWITCH.G" /></Request>
+RegisterMoreServices;<Request ID="733" Action="CREATE"><Connection Source="RegisterService2.RegisterService.registerService" Destination="RegisterService2.RegisterServiceHTTP_1.registerService" /></Request>
+RegisterMoreServices;<Request ID="734" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneRegister" Destination="S1Reg.S" /></Request>
+RegisterMoreServices;<Request ID="735" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneUnregister" Destination="S1Reg.R" /></Request>
+RegisterMoreServices;<Request ID="736" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO1" Destination="RegisterService1.RegisterService.register" /></Request>
+RegisterMoreServices;<Request ID="737" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO0" Destination="RegisterService1.RegisterService.unregister" /></Request>
+RegisterMoreServices;<Request ID="738" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService1.E_REND.EI2" /></Request>
+RegisterMoreServices;<Request ID="739" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_SWITCH.EI" /></Request>
+RegisterMoreServices;<Request ID="740" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_REND.R" /></Request>
+RegisterMoreServices;<Request ID="741" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService1.RegisterService.serviceRegistryEntry" /></Request>
+RegisterMoreServices;<Request ID="742" Action="CREATE"><Connection Source="RegisterService1.E_SR.Q" Destination="RegisterService1.E_SWITCH.G" /></Request>
+RegisterMoreServices;<Request ID="743" Action="CREATE"><Connection Source="RegisterService1.RegisterService.registerService" Destination="RegisterService1.RegisterServiceHTTP_1.registerService" /></Request>
+RegisterMoreServices;<Request ID="744" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="745" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="746" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="747" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.CNF" Destination="E_SWITCH_1.EI" /></Request>
+RegisterMoreServices;<Request ID="748" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="749" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.REQ" /></Request>
+RegisterMoreServices;<Request ID="750" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="751" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.REQ" /></Request>
+RegisterMoreServices;<Request ID="752" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="753" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="754" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_1" /></Request>
+RegisterMoreServices;<Request ID="755" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="756" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_3" /></Request>
+RegisterMoreServices;<Request ID="757" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.IN" /></Request>
+RegisterMoreServices;<Request ID="758" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.OUT" Destination="F_EQ_1_1.IN2" /></Request>
+RegisterMoreServices;<Request ID="759" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.in_struct" /></Request>
+RegisterMoreServices;<Request ID="760" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.in_struct" /></Request>
+RegisterMoreServices;<Request ID="761" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.in_struct" /></Request>
+RegisterMoreServices;<Request ID="762" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.IN" /></Request>
+RegisterMoreServices;<Request ID="763" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_1" /></Request>
+RegisterMoreServices;<Request ID="764" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="765" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_2" /></Request>
+RegisterMoreServices;<Request ID="766" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="767" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="768" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.REQ" /></Request>
+RegisterMoreServices;<Request ID="769" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="770" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="771" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.REQ" /></Request>
+RegisterMoreServices;<Request ID="772" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="773" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.DI2S.REQ" /></Request>
+RegisterMoreServices;<Request ID="774" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.REQ" /></Request>
+RegisterMoreServices;<Request ID="775" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.S2WS.REQ" /></Request>
+RegisterMoreServices;<Request ID="776" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_1" /></Request>
+RegisterMoreServices;<Request ID="777" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="778" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_3" /></Request>
+RegisterMoreServices;<Request ID="779" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_2.DI2S.IN" /></Request>
+RegisterMoreServices;<Request ID="780" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+RegisterMoreServices;<Request ID="781" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.OUT" Destination="F_EQ_3_1.IN2" /></Request>
+RegisterMoreServices;<Request ID="782" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.in_struct" /></Request>
+RegisterMoreServices;<Request ID="783" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.in_struct" /></Request>
+RegisterMoreServices;<Request ID="784" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.in_struct" /></Request>
+RegisterMoreServices;<Request ID="785" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.IN" /></Request>
+RegisterMoreServices;<Request ID="786" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.IN_1" /></Request>
+RegisterMoreServices;<Request ID="787" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.S2WS.IN" /></Request>
+RegisterMoreServices;<Request ID="788" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.IN_2" /></Request>
+RegisterMoreServices;<Request ID="789" Action="CREATE"><Connection Source="QueryService2.FieldsToServiceQueryForm.CNF" Destination="QueryService2.QueryService.query" /></Request>
+RegisterMoreServices;<Request ID="790" Action="CREATE"><Connection Source="QueryService2.QueryService.queried" Destination="GET_AT_INDEX_2.REQ" /></Request>
+RegisterMoreServices;<Request ID="791" Action="CREATE"><Connection Source="QueryService2.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryService2.QueryService.serviceQueryForm" /></Request>
+RegisterMoreServices;<Request ID="792" Action="CREATE"><Connection Source="QueryService2.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_1.IN_ARRAY" /></Request>
+RegisterMoreServices;<Request ID="793" Action="CREATE"><Connection Source="QueryService2.QueryService.serviceEntries" Destination="GET_AT_INDEX_2.IN_ARRAY" /></Request>
+RegisterMoreServices;<Request ID="794" Action="CREATE"><Connection Source="QueryService2.QueryService.queryServices" Destination="QueryService2.QueryServiceHTTP.queryServices" /></Request>
+RegisterMoreServices;<Request ID="795" Action="CREATE"><Connection Source="QueryService1.FieldsToServiceQueryForm.CNF" Destination="QueryService1.QueryService.query" /></Request>
+RegisterMoreServices;<Request ID="796" Action="CREATE"><Connection Source="QueryService1.QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+RegisterMoreServices;<Request ID="797" Action="CREATE"><Connection Source="QueryService1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryService1.QueryService.serviceQueryForm" /></Request>
+RegisterMoreServices;<Request ID="798" Action="CREATE"><Connection Source="QueryService1.QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+RegisterMoreServices;<Request ID="799" Action="CREATE"><Connection Source="QueryService1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+RegisterMoreServices;<Request ID="800" Action="CREATE"><Connection Source="QueryService1.QueryService.queryServices" Destination="QueryService1.QueryServiceHTTP.queryServices" /></Request>
+RegisterMoreServices;<Request ID="801" Action="CREATE"><Connection Source="F_EQ_2.CNF" Destination="Service1RegisteredPos0.REQ" /></Request>
+RegisterMoreServices;<Request ID="802" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="Service1NotRegisteredPos1.REQ" /></Request>
+RegisterMoreServices;<Request ID="803" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="Service2RegisteredPos0.REQ" /></Request>
+RegisterMoreServices;<Request ID="804" Action="CREATE"><Connection Source="F_EQ_1_1.CNF" Destination="Service2NotRegisteredPos1.REQ" /></Request>
+RegisterMoreServices;<Request ID="805" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+RegisterMoreServices;<Request ID="806" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GET_AT_INDEX_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="807" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="808" Action="CREATE"><Connection Source="Service1RegisteredPos0.CNF" Destination="F_EQ.REQ" /></Request>
+RegisterMoreServices;<Request ID="809" Action="CREATE"><Connection Source="Service2RegisteredPos0.CNF" Destination="F_EQ_1_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="810" Action="CREATE"><Connection Source="GET_AT_INDEX_2.CNF" Destination="GET_AT_INDEX_1_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="811" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServices;<Request ID="812" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="F_EQ_2.REQ" /></Request>
+RegisterMoreServices;<Request ID="813" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="F_EQ_3.REQ" /></Request>
+RegisterMoreServices;<Request ID="814" Action="CREATE"><Connection Source="F_EQ_3.CNF" Destination="Service1NotRegisteredPos0.REQ" /></Request>
+RegisterMoreServices;<Request ID="815" Action="CREATE"><Connection Source="Service1NotRegisteredPos0.CNF" Destination="F_EQ.REQ" /></Request>
+RegisterMoreServices;<Request ID="816" Action="CREATE"><Connection Source="F_EQ_3_1.CNF" Destination="Service2NotRegisteredPos0.REQ" /></Request>
+RegisterMoreServices;<Request ID="817" Action="CREATE"><Connection Source="E_SWITCH_1.EO1" Destination="F_EQ_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="818" Action="CREATE"><Connection Source="E_SWITCH_1.EO0" Destination="F_EQ_3_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="819" Action="CREATE"><Connection Source="Service2NotRegisteredPos0.CNF" Destination="F_EQ_1_1.REQ" /></Request>
+RegisterMoreServices;<Request ID="820" Action="CREATE"><Connection Source="Service2NotRegisteredPos1.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServices;<Request ID="821" Action="CREATE"><Connection Source="Service1NotRegisteredPos1.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServices;<Request ID="822" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+RegisterMoreServices;<Request ID="823" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+RegisterMoreServices;<Request ID="824" Action="CREATE"><Connection Source="S2Reg.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServices;<Request ID="825" Action="CREATE"><Connection Source="S1Reg.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServices;<Request ID="826" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="Service1.REQ" /></Request>
+RegisterMoreServices;<Request ID="827" Action="CREATE"><Connection Source="Service1.CNF" Destination="Service2.REQ" /></Request>
+RegisterMoreServices;<Request ID="828" Action="CREATE"><Connection Source="Service2.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServices;<Request ID="829" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+RegisterMoreServices;<Request ID="830" Action="CREATE"><Connection Source="F_EQ_2.OUT" Destination="Service1RegisteredPos0.check" /></Request>
+RegisterMoreServices;<Request ID="831" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="Service1NotRegisteredPos1.check" /></Request>
+RegisterMoreServices;<Request ID="832" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServices;<Request ID="833" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServices;<Request ID="834" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="Service2RegisteredPos0.check" /></Request>
+RegisterMoreServices;<Request ID="835" Action="CREATE"><Connection Source="S1Reg.Q" Destination="E_SWITCH.G" /></Request>
+RegisterMoreServices;<Request ID="836" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService2.FieldsToServiceRegistryEntry.provider" /></Request>
+RegisterMoreServices;<Request ID="837" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService1.FieldsToServiceRegistryEntry.provider" /></Request>
+RegisterMoreServices;<Request ID="838" Action="CREATE"><Connection Source="F_EQ_1_1.OUT" Destination="Service2NotRegisteredPos1.check" /></Request>
+RegisterMoreServices;<Request ID="839" Action="CREATE"><Connection Source="S2Reg.Q" Destination="E_SWITCH_1.G" /></Request>
+RegisterMoreServices;<Request ID="840" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServices;<Request ID="841" Action="CREATE"><Connection Source="GET_AT_INDEX_2.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServices;<Request ID="842" Action="CREATE"><Connection Source="F_EQ_3.OUT" Destination="Service1NotRegisteredPos0.check" /></Request>
+RegisterMoreServices;<Request ID="843" Action="CREATE"><Connection Source="F_EQ_3_1.OUT" Destination="Service2NotRegisteredPos0.check" /></Request>
+RegisterMoreServices;<Request ID="844" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="RegisterService1.FieldsToServiceRegistryEntry.providedService" /></Request>
+RegisterMoreServices;<Request ID="845" Action="CREATE"><Connection Source="Service2.arrowheadService" Destination="RegisterService2.FieldsToServiceRegistryEntry.providedService" /></Request>
+RegisterMoreServices;<Request ID="846" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="QueryService1.FieldsToServiceQueryForm.service" /></Request>
+RegisterMoreServices;<Request ID="847" Action="CREATE"><Connection Source="Service2.arrowheadService" Destination="QueryService2.FieldsToServiceQueryForm.service" /></Request>
+RegisterMoreServices;<Request ID="848" Action="START"/>
+;<Request ID="849" Action="CREATE"><FB Name="SameServiceTwice" Type="EMB_RES" /></Request>
+SameServiceTwice;<Request ID="850" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+SameServiceTwice;<Request ID="851" Action="WRITE"><Connection Source="WSTRIGN#testMoreServicesReady" Destination="SUBL_0.ID" /></Request>
+SameServiceTwice;<Request ID="852" Action="CREATE"><FB Name="Sequencer.E_DEMUX" Type="E_DEMUX" /></Request>
+SameServiceTwice;<Request ID="853" Action="CREATE"><FB Name="Sequencer.E_CTU" Type="E_CTU" /></Request>
+SameServiceTwice;<Request ID="854" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1" Type="E_DEMUX" /></Request>
+SameServiceTwice;<Request ID="855" Action="CREATE"><FB Name="Sequencer.E_SWITCH" Type="E_SWITCH" /></Request>
+SameServiceTwice;<Request ID="856" Action="CREATE"><FB Name="Sequencer.F_GT" Type="F_GT" /></Request>
+SameServiceTwice;<Request ID="857" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer.F_GT.IN2" /></Request>
+SameServiceTwice;<Request ID="858" Action="CREATE"><FB Name="Sequencer.E_MERGE" Type="E_MERGE" /></Request>
+SameServiceTwice;<Request ID="859" Action="CREATE"><FB Name="Sequencer.F_SUB" Type="F_SUB" /></Request>
+SameServiceTwice;<Request ID="860" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer.F_SUB.IN2" /></Request>
+SameServiceTwice;<Request ID="861" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1_1" Type="E_DEMUX" /></Request>
+SameServiceTwice;<Request ID="862" Action="CREATE"><FB Name="Sequencer.F_GT_1" Type="F_GT" /></Request>
+SameServiceTwice;<Request ID="863" Action="WRITE"><Connection Source="INT#7" Destination="Sequencer.F_GT_1.IN2" /></Request>
+SameServiceTwice;<Request ID="864" Action="CREATE"><FB Name="Sequencer.F_SUB_1" Type="F_SUB" /></Request>
+SameServiceTwice;<Request ID="865" Action="WRITE"><Connection Source="INT#8" Destination="Sequencer.F_SUB_1.IN2" /></Request>
+SameServiceTwice;<Request ID="866" Action="CREATE"><FB Name="Sequencer.E_SWITCH_1" Type="E_SWITCH" /></Request>
+SameServiceTwice;<Request ID="867" Action="CREATE"><FB Name="RegisterService2.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="868" Action="CREATE"><FB Name="RegisterService2.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+SameServiceTwice;<Request ID="869" Action="CREATE"><FB Name="RegisterService2.RegisterService" Type="RegisterService" /></Request>
+SameServiceTwice;<Request ID="870" Action="CREATE"><FB Name="RegisterService2.E_SR" Type="E_SR" /></Request>
+SameServiceTwice;<Request ID="871" Action="CREATE"><FB Name="RegisterService2.E_SWITCH" Type="E_SWITCH" /></Request>
+SameServiceTwice;<Request ID="872" Action="CREATE"><FB Name="RegisterService2.E_REND" Type="E_REND" /></Request>
+SameServiceTwice;<Request ID="873" Action="CREATE"><FB Name="Service1" Type="FieldsToArrowheadService" /></Request>
+SameServiceTwice;<Request ID="874" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="Service1.serviceDefinition" /></Request>
+SameServiceTwice;<Request ID="875" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="Service1.interfaces" /></Request>
+SameServiceTwice;<Request ID="876" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="Service1.serviceMetadata" /></Request>
+SameServiceTwice;<Request ID="877" Action="CREATE"><FB Name="RegisterService1.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="878" Action="CREATE"><FB Name="RegisterService1.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+SameServiceTwice;<Request ID="879" Action="CREATE"><FB Name="RegisterService1.RegisterService" Type="RegisterService" /></Request>
+SameServiceTwice;<Request ID="880" Action="CREATE"><FB Name="RegisterService1.E_SR" Type="E_SR" /></Request>
+SameServiceTwice;<Request ID="881" Action="CREATE"><FB Name="RegisterService1.E_SWITCH" Type="E_SWITCH" /></Request>
+SameServiceTwice;<Request ID="882" Action="CREATE"><FB Name="RegisterService1.E_REND" Type="E_REND" /></Request>
+SameServiceTwice;<Request ID="883" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+SameServiceTwice;<Request ID="884" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+SameServiceTwice;<Request ID="885" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+SameServiceTwice;<Request ID="886" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+SameServiceTwice;<Request ID="887" Action="CREATE"><FB Name="QueryServiceHTTPSub.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+SameServiceTwice;<Request ID="888" Action="CREATE"><FB Name="QueryServiceHTTPSub.QueryService" Type="QueryService" /></Request>
+SameServiceTwice;<Request ID="889" Action="CREATE"><FB Name="QueryServiceHTTPSub.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+SameServiceTwice;<Request ID="890" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+SameServiceTwice;<Request ID="891" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+SameServiceTwice;<Request ID="892" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+SameServiceTwice;<Request ID="893" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+SameServiceTwice;<Request ID="894" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="895" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+SameServiceTwice;<Request ID="896" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+SameServiceTwice;<Request ID="897" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+SameServiceTwice;<Request ID="898" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="899" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+SameServiceTwice;<Request ID="900" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+SameServiceTwice;<Request ID="901" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="902" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+SameServiceTwice;<Request ID="903" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="904" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+SameServiceTwice;<Request ID="905" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+SameServiceTwice;<Request ID="906" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+SameServiceTwice;<Request ID="907" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+SameServiceTwice;<Request ID="908" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+SameServiceTwice;<Request ID="909" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+SameServiceTwice;<Request ID="910" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="911" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+SameServiceTwice;<Request ID="912" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+SameServiceTwice;<Request ID="913" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+SameServiceTwice;<Request ID="914" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="915" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+SameServiceTwice;<Request ID="916" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+SameServiceTwice;<Request ID="917" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+SameServiceTwice;<Request ID="918" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+SameServiceTwice;<Request ID="919" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="920" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+SameServiceTwice;<Request ID="921" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+SameServiceTwice;<Request ID="922" Action="CREATE"><FB Name="Service1RegisteredPos0" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="923" Action="CREATE"><FB Name="F_EQ_2" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="924" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_2.IN1" /></Request>
+SameServiceTwice;<Request ID="925" Action="CREATE"><FB Name="BothServicesRegistered" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="926" Action="CREATE"><FB Name="F_EQ_3" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="927" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start2" Destination="F_EQ_3.IN1" /></Request>
+SameServiceTwice;<Request ID="928" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="929" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ.IN1" /></Request>
+SameServiceTwice;<Request ID="930" Action="CREATE"><FB Name="F_EQ_2_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="931" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start2" Destination="F_EQ_2_1.IN1" /></Request>
+SameServiceTwice;<Request ID="932" Action="CREATE"><FB Name="F_EQ_3_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="933" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_3_1.IN1" /></Request>
+SameServiceTwice;<Request ID="934" Action="CREATE"><FB Name="Service2RegisteredPos0" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="935" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="936" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start2" Destination="F_EQ_1.IN1" /></Request>
+SameServiceTwice;<Request ID="937" Action="CREATE"><FB Name="BothServicesNotRegistered" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="938" Action="CREATE"><FB Name="F_EQ_1_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="939" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1_1.IN1" /></Request>
+SameServiceTwice;<Request ID="940" Action="CREATE"><FB Name="F_EQ_1_1_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="941" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1_1_1.IN1" /></Request>
+SameServiceTwice;<Request ID="942" Action="CREATE"><FB Name="Service2NotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="943" Action="CREATE"><FB Name="F_EQ_4" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="944" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4.IN1" /></Request>
+SameServiceTwice;<Request ID="945" Action="CREATE"><FB Name="F_EQ_4_1" Type="F_EQ" /></Request>
+SameServiceTwice;<Request ID="946" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4_1.IN1" /></Request>
+SameServiceTwice;<Request ID="947" Action="CREATE"><FB Name="Service1NotRegisteredPos1" Type="TEST_CONDITION" /></Request>
+SameServiceTwice;<Request ID="948" Action="CREATE"><FB Name="F_AND" Type="F_AND" /></Request>
+SameServiceTwice;<Request ID="949" Action="CREATE"><FB Name="E_MERGE" Type="E_MERGE" /></Request>
+SameServiceTwice;<Request ID="950" Action="CREATE"><FB Name="E_MERGE_1" Type="E_MERGE" /></Request>
+SameServiceTwice;<Request ID="951" Action="CREATE"><FB Name="F_AND_1" Type="F_AND" /></Request>
+SameServiceTwice;<Request ID="952" Action="CREATE"><FB Name="F_OR" Type="F_OR" /></Request>
+SameServiceTwice;<Request ID="953" Action="CREATE"><FB Name="F_AND_1_1" Type="F_AND" /></Request>
+SameServiceTwice;<Request ID="954" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+SameServiceTwice;<Request ID="955" Action="CREATE"><FB Name="BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+SameServiceTwice;<Request ID="956" Action="CREATE"><FB Name="FieldsToArrowheadSystem_1" Type="FieldsToArrowheadSystem" /></Request>
+SameServiceTwice;<Request ID="957" Action="WRITE"><Connection Source="WSTRING#systemTestName2" Destination="FieldsToArrowheadSystem_1.systemName" /></Request>
+SameServiceTwice;<Request ID="958" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem_1.address" /></Request>
+SameServiceTwice;<Request ID="959" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem_1.port" /></Request>
+SameServiceTwice;<Request ID="960" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+SameServiceTwice;<Request ID="961" Action="WRITE"><Connection Source="WSTRIGN#sameServiceTwiceReady" Destination="PUBL_0.ID" /></Request>
+SameServiceTwice;<Request ID="962" Action="WRITE"><Connection Source="/serviceTest/start2" Destination="RegisterService2.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+SameServiceTwice;<Request ID="963" Action="WRITE"><Connection Source="1" Destination="RegisterService2.FieldsToServiceRegistryEntry.version" /></Request>
+SameServiceTwice;<Request ID="964" Action="WRITE"><Connection Source="false" Destination="RegisterService2.FieldsToServiceRegistryEntry.udp" /></Request>
+SameServiceTwice;<Request ID="965" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2.FieldsToServiceRegistryEntry.metadata" /></Request>
+SameServiceTwice;<Request ID="966" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2.RegisterService.endpoint" /></Request>
+SameServiceTwice;<Request ID="967" Action="WRITE"><Connection Source="/serviceTest/start" Destination="RegisterService1.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+SameServiceTwice;<Request ID="968" Action="WRITE"><Connection Source="1" Destination="RegisterService1.FieldsToServiceRegistryEntry.version" /></Request>
+SameServiceTwice;<Request ID="969" Action="WRITE"><Connection Source="false" Destination="RegisterService1.FieldsToServiceRegistryEntry.udp" /></Request>
+SameServiceTwice;<Request ID="970" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService1.FieldsToServiceRegistryEntry.metadata" /></Request>
+SameServiceTwice;<Request ID="971" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService1.RegisterService.endpoint" /></Request>
+SameServiceTwice;<Request ID="972" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.version" /></Request>
+SameServiceTwice;<Request ID="973" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub.QueryService.address" /></Request>
+SameServiceTwice;<Request ID="974" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.E_SR.S" /></Request>
+SameServiceTwice;<Request ID="975" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.FieldsToServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="976" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterService1.E_REND.EI1" /></Request>
+SameServiceTwice;<Request ID="977" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.E_SR.S" /></Request>
+SameServiceTwice;<Request ID="978" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="979" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="RegisterService2.E_REND.EI1" /></Request>
+SameServiceTwice;<Request ID="980" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+SameServiceTwice;<Request ID="981" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="F_EQ_3_1.REQ" /></Request>
+SameServiceTwice;<Request ID="982" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.E_SR.R" /></Request>
+SameServiceTwice;<Request ID="983" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.FieldsToServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="984" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="RegisterService1.E_REND.EI1" /></Request>
+SameServiceTwice;<Request ID="985" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+SameServiceTwice;<Request ID="986" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="F_EQ_1.REQ" /></Request>
+SameServiceTwice;<Request ID="987" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.E_SR.R" /></Request>
+SameServiceTwice;<Request ID="988" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="989" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="RegisterService2.E_REND.EI1" /></Request>
+SameServiceTwice;<Request ID="990" Action="CREATE"><Connection Source="Sequencer.F_GT.CNF" Destination="Sequencer.E_SWITCH.EI" /></Request>
+SameServiceTwice;<Request ID="991" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO0" Destination="Sequencer.E_DEMUX.EI" /></Request>
+SameServiceTwice;<Request ID="992" Action="CREATE"><Connection Source="Sequencer.E_MERGE.EO" Destination="Sequencer.E_CTU.CU" /></Request>
+SameServiceTwice;<Request ID="993" Action="CREATE"><Connection Source="Sequencer.F_SUB.CNF" Destination="Sequencer.E_DEMUX_1.EI" /></Request>
+SameServiceTwice;<Request ID="994" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="995" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="996" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="997" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="Sequencer.E_MERGE.EI1" /></Request>
+SameServiceTwice;<Request ID="998" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="Sequencer.E_MERGE.EI1" /></Request>
+SameServiceTwice;<Request ID="999" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="Sequencer.E_MERGE.EI1" /></Request>
+SameServiceTwice;<Request ID="1,000" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="Sequencer.E_MERGE.EI1" /></Request>
+SameServiceTwice;<Request ID="1,001" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO1" Destination="Sequencer.F_GT_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,002" Action="CREATE"><Connection Source="Sequencer.F_GT_1.CNF" Destination="Sequencer.E_SWITCH_1.EI" /></Request>
+SameServiceTwice;<Request ID="1,003" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO0" Destination="Sequencer.F_SUB.REQ" /></Request>
+SameServiceTwice;<Request ID="1,004" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO1" Destination="Sequencer.F_SUB_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,005" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.CNF" Destination="Sequencer.E_DEMUX_1_1.EI" /></Request>
+SameServiceTwice;<Request ID="1,006" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+SameServiceTwice;<Request ID="1,007" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="F_EQ_1_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,008" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="PUBL_0.INIT" /></Request>
+SameServiceTwice;<Request ID="1,009" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,010" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,011" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,012" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,013" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO3" Destination="Sequencer.E_CTU.R" /></Request>
+SameServiceTwice;<Request ID="1,014" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.E_DEMUX.K" /></Request>
+SameServiceTwice;<Request ID="1,015" Action="CREATE"><Connection Source="Sequencer.F_GT.OUT" Destination="Sequencer.E_SWITCH.G" /></Request>
+SameServiceTwice;<Request ID="1,016" Action="CREATE"><Connection Source="Sequencer.F_SUB.OUT" Destination="Sequencer.E_DEMUX_1.K" /></Request>
+SameServiceTwice;<Request ID="1,017" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT.IN1" /></Request>
+SameServiceTwice;<Request ID="1,018" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB.IN1" /></Request>
+SameServiceTwice;<Request ID="1,019" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB_1.IN1" /></Request>
+SameServiceTwice;<Request ID="1,020" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT_1.IN1" /></Request>
+SameServiceTwice;<Request ID="1,021" Action="CREATE"><Connection Source="Sequencer.F_GT_1.OUT" Destination="Sequencer.E_SWITCH_1.G" /></Request>
+SameServiceTwice;<Request ID="1,022" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.OUT" Destination="Sequencer.E_DEMUX_1_1.K" /></Request>
+SameServiceTwice;<Request ID="1,023" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneRegister" Destination="E_MERGE_1.EI1" /></Request>
+SameServiceTwice;<Request ID="1,024" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="E_MERGE_1.EI2" /></Request>
+SameServiceTwice;<Request ID="1,025" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO1" Destination="RegisterService2.RegisterService.register" /></Request>
+SameServiceTwice;<Request ID="1,026" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO0" Destination="RegisterService2.RegisterService.unregister" /></Request>
+SameServiceTwice;<Request ID="1,027" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2.E_REND.EI2" /></Request>
+SameServiceTwice;<Request ID="1,028" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_SWITCH.EI" /></Request>
+SameServiceTwice;<Request ID="1,029" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_REND.R" /></Request>
+SameServiceTwice;<Request ID="1,030" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2.RegisterService.serviceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="1,031" Action="CREATE"><Connection Source="RegisterService2.E_SR.Q" Destination="RegisterService2.E_SWITCH.G" /></Request>
+SameServiceTwice;<Request ID="1,032" Action="CREATE"><Connection Source="RegisterService2.RegisterService.registerService" Destination="RegisterService2.RegisterServiceHTTP_1.registerService" /></Request>
+SameServiceTwice;<Request ID="1,033" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneRegister" Destination="E_MERGE_1.EI1" /></Request>
+SameServiceTwice;<Request ID="1,034" Action="CREATE"><Connection Source="RegisterService1.RegisterService.doneUnregister" Destination="E_MERGE_1.EI2" /></Request>
+SameServiceTwice;<Request ID="1,035" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO1" Destination="RegisterService1.RegisterService.register" /></Request>
+SameServiceTwice;<Request ID="1,036" Action="CREATE"><Connection Source="RegisterService1.E_SWITCH.EO0" Destination="RegisterService1.RegisterService.unregister" /></Request>
+SameServiceTwice;<Request ID="1,037" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService1.E_REND.EI2" /></Request>
+SameServiceTwice;<Request ID="1,038" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_SWITCH.EI" /></Request>
+SameServiceTwice;<Request ID="1,039" Action="CREATE"><Connection Source="RegisterService1.E_REND.EO" Destination="RegisterService1.E_REND.R" /></Request>
+SameServiceTwice;<Request ID="1,040" Action="CREATE"><Connection Source="RegisterService1.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService1.RegisterService.serviceRegistryEntry" /></Request>
+SameServiceTwice;<Request ID="1,041" Action="CREATE"><Connection Source="RegisterService1.E_SR.Q" Destination="RegisterService1.E_SWITCH.G" /></Request>
+SameServiceTwice;<Request ID="1,042" Action="CREATE"><Connection Source="RegisterService1.RegisterService.registerService" Destination="RegisterService1.RegisterServiceHTTP_1.registerService" /></Request>
+SameServiceTwice;<Request ID="1,043" Action="CREATE"><Connection Source="QueryServiceHTTPSub.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub.QueryService.query" /></Request>
+SameServiceTwice;<Request ID="1,044" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+SameServiceTwice;<Request ID="1,045" Action="CREATE"><Connection Source="QueryServiceHTTPSub.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub.QueryService.serviceQueryForm" /></Request>
+SameServiceTwice;<Request ID="1,046" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+SameServiceTwice;<Request ID="1,047" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+SameServiceTwice;<Request ID="1,048" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.queryServices" Destination="QueryServiceHTTPSub.QueryServiceHTTP.queryServices" /></Request>
+SameServiceTwice;<Request ID="1,049" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+SameServiceTwice;<Request ID="1,050" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+SameServiceTwice;<Request ID="1,051" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+SameServiceTwice;<Request ID="1,052" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="1,053" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+SameServiceTwice;<Request ID="1,054" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+SameServiceTwice;<Request ID="1,055" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,056" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+SameServiceTwice;<Request ID="1,057" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+SameServiceTwice;<Request ID="1,058" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+SameServiceTwice;<Request ID="1,059" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+SameServiceTwice;<Request ID="1,060" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+SameServiceTwice;<Request ID="1,061" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+SameServiceTwice;<Request ID="1,062" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+SameServiceTwice;<Request ID="1,063" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_3.IN2" /></Request>
+SameServiceTwice;<Request ID="1,064" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+SameServiceTwice;<Request ID="1,065" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_3_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,066" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,067" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_1_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,068" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,069" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,070" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,071" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+SameServiceTwice;<Request ID="1,072" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+SameServiceTwice;<Request ID="1,073" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+SameServiceTwice;<Request ID="1,074" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+SameServiceTwice;<Request ID="1,075" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+SameServiceTwice;<Request ID="1,076" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+SameServiceTwice;<Request ID="1,077" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+SameServiceTwice;<Request ID="1,078" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+SameServiceTwice;<Request ID="1,079" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+SameServiceTwice;<Request ID="1,080" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+SameServiceTwice;<Request ID="1,081" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,082" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+SameServiceTwice;<Request ID="1,083" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+SameServiceTwice;<Request ID="1,084" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+SameServiceTwice;<Request ID="1,085" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+SameServiceTwice;<Request ID="1,086" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+SameServiceTwice;<Request ID="1,087" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+SameServiceTwice;<Request ID="1,088" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+SameServiceTwice;<Request ID="1,089" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_2.IN2" /></Request>
+SameServiceTwice;<Request ID="1,090" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_2_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,091" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_1_1_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,092" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_4.IN2" /></Request>
+SameServiceTwice;<Request ID="1,093" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_4_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,094" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,095" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,096" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+SameServiceTwice;<Request ID="1,097" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+SameServiceTwice;<Request ID="1,098" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+SameServiceTwice;<Request ID="1,099" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+SameServiceTwice;<Request ID="1,100" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+SameServiceTwice;<Request ID="1,101" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="Service1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,102" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+SameServiceTwice;<Request ID="1,103" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GET_AT_INDEX_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,104" Action="CREATE"><Connection Source="F_EQ_3.CNF" Destination="F_EQ_2.REQ" /></Request>
+SameServiceTwice;<Request ID="1,105" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="Service1RegisteredPos0.REQ" /></Request>
+SameServiceTwice;<Request ID="1,106" Action="CREATE"><Connection Source="F_EQ_3_1.CNF" Destination="F_EQ_2_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,107" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="Service2RegisteredPos0.REQ" /></Request>
+SameServiceTwice;<Request ID="1,108" Action="CREATE"><Connection Source="F_EQ_1_1.CNF" Destination="F_EQ_1_1_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,109" Action="CREATE"><Connection Source="Service1RegisteredPos0.CNF" Destination="F_EQ_4.REQ" /></Request>
+SameServiceTwice;<Request ID="1,110" Action="CREATE"><Connection Source="F_EQ_4.CNF" Destination="Service2NotRegisteredPos1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,111" Action="CREATE"><Connection Source="Service2RegisteredPos0.CNF" Destination="F_EQ_4_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,112" Action="CREATE"><Connection Source="F_EQ_4_1.CNF" Destination="Service1NotRegisteredPos1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,113" Action="CREATE"><Connection Source="F_EQ_1_1_1.CNF" Destination="F_AND.REQ" /></Request>
+SameServiceTwice;<Request ID="1,114" Action="CREATE"><Connection Source="F_AND.CNF" Destination="BothServicesNotRegistered.REQ" /></Request>
+SameServiceTwice;<Request ID="1,115" Action="CREATE"><Connection Source="BothServicesRegistered.CNF" Destination="E_MERGE.EI1" /></Request>
+SameServiceTwice;<Request ID="1,116" Action="CREATE"><Connection Source="BothServicesNotRegistered.CNF" Destination="E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,117" Action="CREATE"><Connection Source="Service1NotRegisteredPos1.CNF" Destination="E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,118" Action="CREATE"><Connection Source="Service2NotRegisteredPos1.CNF" Destination="E_MERGE.EI2" /></Request>
+SameServiceTwice;<Request ID="1,119" Action="CREATE"><Connection Source="E_MERGE.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+SameServiceTwice;<Request ID="1,120" Action="CREATE"><Connection Source="E_MERGE_1.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+SameServiceTwice;<Request ID="1,121" Action="CREATE"><Connection Source="F_EQ_2_1.CNF" Destination="F_AND_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,122" Action="CREATE"><Connection Source="F_OR.CNF" Destination="BothServicesRegistered.REQ" /></Request>
+SameServiceTwice;<Request ID="1,123" Action="CREATE"><Connection Source="F_EQ_2.CNF" Destination="F_AND_1_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,124" Action="CREATE"><Connection Source="F_AND_1.CNF" Destination="BOOL2BOOL.REQ" /></Request>
+SameServiceTwice;<Request ID="1,125" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="F_EQ_3.REQ" /></Request>
+SameServiceTwice;<Request ID="1,126" Action="CREATE"><Connection Source="F_AND_1_1.CNF" Destination="BOOL2BOOL_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,127" Action="CREATE"><Connection Source="BOOL2BOOL_1.CNF" Destination="F_OR.REQ" /></Request>
+SameServiceTwice;<Request ID="1,128" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+SameServiceTwice;<Request ID="1,129" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+SameServiceTwice;<Request ID="1,130" Action="CREATE"><Connection Source="Service1.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+SameServiceTwice;<Request ID="1,131" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.CNF" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+SameServiceTwice;<Request ID="1,132" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadSystem_1.REQ" /></Request>
+SameServiceTwice;<Request ID="1,133" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+SameServiceTwice;<Request ID="1,134" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="RegisterService2.FieldsToServiceRegistryEntry.providedService" /></Request>
+SameServiceTwice;<Request ID="1,135" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="RegisterService1.FieldsToServiceRegistryEntry.providedService" /></Request>
+SameServiceTwice;<Request ID="1,136" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService1.FieldsToServiceRegistryEntry.provider" /></Request>
+SameServiceTwice;<Request ID="1,137" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.service" /></Request>
+SameServiceTwice;<Request ID="1,138" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+SameServiceTwice;<Request ID="1,139" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+SameServiceTwice;<Request ID="1,140" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="Service1RegisteredPos0.check" /></Request>
+SameServiceTwice;<Request ID="1,141" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="Service2RegisteredPos0.check" /></Request>
+SameServiceTwice;<Request ID="1,142" Action="CREATE"><Connection Source="F_EQ_4.OUT" Destination="Service2NotRegisteredPos1.check" /></Request>
+SameServiceTwice;<Request ID="1,143" Action="CREATE"><Connection Source="F_EQ_4_1.OUT" Destination="Service1NotRegisteredPos1.check" /></Request>
+SameServiceTwice;<Request ID="1,144" Action="CREATE"><Connection Source="F_EQ_1_1.OUT" Destination="F_AND.IN1" /></Request>
+SameServiceTwice;<Request ID="1,145" Action="CREATE"><Connection Source="F_EQ_1_1_1.OUT" Destination="F_AND.IN2" /></Request>
+SameServiceTwice;<Request ID="1,146" Action="CREATE"><Connection Source="F_AND.OUT" Destination="BothServicesNotRegistered.check" /></Request>
+SameServiceTwice;<Request ID="1,147" Action="CREATE"><Connection Source="F_EQ_3_1.OUT" Destination="F_AND_1.IN1" /></Request>
+SameServiceTwice;<Request ID="1,148" Action="CREATE"><Connection Source="F_EQ_2_1.OUT" Destination="F_AND_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,149" Action="CREATE"><Connection Source="F_OR.OUT" Destination="BothServicesRegistered.check" /></Request>
+SameServiceTwice;<Request ID="1,150" Action="CREATE"><Connection Source="F_EQ_3.OUT" Destination="F_AND_1_1.IN1" /></Request>
+SameServiceTwice;<Request ID="1,151" Action="CREATE"><Connection Source="F_EQ_2.OUT" Destination="F_AND_1_1.IN2" /></Request>
+SameServiceTwice;<Request ID="1,152" Action="CREATE"><Connection Source="F_AND_1.OUT" Destination="BOOL2BOOL.IN" /></Request>
+SameServiceTwice;<Request ID="1,153" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="F_OR.IN1" /></Request>
+SameServiceTwice;<Request ID="1,154" Action="CREATE"><Connection Source="F_AND_1_1.OUT" Destination="BOOL2BOOL_1.IN" /></Request>
+SameServiceTwice;<Request ID="1,155" Action="CREATE"><Connection Source="BOOL2BOOL_1.OUT" Destination="F_OR.IN2" /></Request>
+SameServiceTwice;<Request ID="1,156" Action="CREATE"><Connection Source="FieldsToArrowheadSystem_1.arrowheadSystem" Destination="RegisterService2.FieldsToServiceRegistryEntry.provider" /></Request>
+SameServiceTwice;<Request ID="1,157" Action="START"/>
+;<Request ID="1,158" Action="CREATE"><FB Name="VersionInterfaceAndMetadata" Type="EMB_RES" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,159" Action="CREATE"><FB Name="RegisterServiceFullHTTP.FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,160" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,161" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,162" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService" Type="RegisterService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,163" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SR" Type="E_SR" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,164" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SWITCH" Type="E_SWITCH" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,165" Action="CREATE"><FB Name="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND" Type="E_REND" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,166" Action="CREATE"><FB Name="RegisterServiceFullHTTP.FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,167" Action="CREATE"><FB Name="RegisterServiceFullHTTP.E_SR" Type="E_SR" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,168" Action="CREATE"><FB Name="RegisterServiceFullHTTP.E_SWITCH" Type="E_SWITCH" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,169" Action="CREATE"><FB Name="QueryServiceHTTPSub.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,170" Action="CREATE"><FB Name="QueryServiceHTTPSub.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,171" Action="CREATE"><FB Name="QueryServiceHTTPSub.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,172" Action="CREATE"><FB Name="FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,173" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,174" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,175" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,176" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,177" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,178" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,179" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,180" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,181" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,182" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,183" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,184" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,185" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,186" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,187" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,188" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,189" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,190" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,191" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,192" Action="CREATE"><FB Name="F_EQ_4" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,193" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,194" Action="CREATE"><FB Name="LowerVersion" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,195" Action="CREATE"><FB Name="FieldsToArrowheadService_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,196" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,197" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,198" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,199" Action="CREATE"><FB Name="SameVersion" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,200" Action="CREATE"><FB Name="QueryServiceHTTPSub_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,201" Action="CREATE"><FB Name="QueryServiceHTTPSub_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,202" Action="CREATE"><FB Name="QueryServiceHTTPSub_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,203" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,204" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,205" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,206" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,207" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,208" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,209" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,210" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,211" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,212" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,213" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,214" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,215" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,216" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,217" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,218" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,219" Action="CREATE"><FB Name="F_EQ_4_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,220" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_4_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,221" Action="CREATE"><FB Name="OneInterfaceOutOfTwo" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,222" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,223" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,224" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,225" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,226" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,227" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,228" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,229" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,230" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,231" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,232" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,233" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,234" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,235" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,236" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,237" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,238" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,239" Action="CREATE"><FB Name="F_EQ_4_1_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,240" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_4_1_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,241" Action="CREATE"><FB Name="FieldsToArrowheadService_1_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,242" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,243" Action="WRITE"><Connection Source="["XML"]" Destination="FieldsToArrowheadService_1_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,244" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1_1.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,245" Action="CREATE"><FB Name="GET_AT_INDEX_1_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,246" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,247" Action="CREATE"><FB Name="OneInterfaceOutOfTwo_2" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,248" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,249" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,250" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,251" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,252" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,253" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,254" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,255" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,256" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,257" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,258" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,259" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,260" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,261" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,262" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,263" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,264" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,265" Action="CREATE"><FB Name="F_EQ_4_1_2" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,266" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_4_1_2.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,267" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,268" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,269" Action="WRITE"><Connection Source="["JSON"]" Destination="FieldsToArrowheadService_1_2.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,270" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1_2.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,271" Action="CREATE"><FB Name="GET_AT_INDEX_1_2" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,272" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,273" Action="CREATE"><FB Name="WrongInterfaceProvided" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,274" Action="CREATE"><FB Name="GET_AT_INDEX_1_2_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,275" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,276" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,277" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,278" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,279" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,280" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,281" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,282" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,283" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,284" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,285" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,286" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,287" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,288" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,289" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,290" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,291" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,292" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,293" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,294" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,295" Action="WRITE"><Connection Source="["JSON1"]" Destination="FieldsToArrowheadService_1_2_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,296" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1_2_1.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,297" Action="CREATE"><FB Name="F_EQ_4_1_2_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,298" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4_1_2_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,299" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,300" Action="WRITE"><Connection Source="WSTRIGN#sameServiceTwiceReady" Destination="SUBL_0.ID" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,301" Action="CREATE"><FB Name="OnlyOneMetadata" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,302" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,303" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,304" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,305" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,306" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,307" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,308" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,309" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,310" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,311" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,312" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,313" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,314" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,315" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,316" Action="CREATE"><FB Name="F_EQ_4_1_2_1_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,317" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4_1_2_1_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,318" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2_1_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,319" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2_1_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,320" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService_1_2_1_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,321" Action="WRITE"><Connection Source="["key1=value1"]" Destination="FieldsToArrowheadService_1_2_1_1.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,322" Action="CREATE"><FB Name="GET_AT_INDEX_1_2_1_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,323" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2_1_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,324" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,325" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,326" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,327" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,328" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,329" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,330" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,331" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,332" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,333" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,334" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,335" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,336" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,337" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,338" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,339" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,340" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,341" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,342" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,343" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,344" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2_1_1_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,345" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2_1_1_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,346" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService_1_2_1_1_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,347" Action="CREATE"><FB Name="F_EQ_4_1_2_1_1_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,348" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4_1_2_1_1_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,349" Action="CREATE"><FB Name="GET_AT_INDEX_1_2_1_1_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,350" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2_1_1_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,351" Action="CREATE"><FB Name="NoMetadataAndAsked" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,352" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2_1_2" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,353" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2_1_2.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,354" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="FieldsToArrowheadService_1_2_1_2.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,355" Action="CREATE"><FB Name="F_EQ_4_1_2_1_2" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,356" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_4_1_2_1_2.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,357" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,358" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,359" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,360" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,361" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,362" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,363" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,364" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,365" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,366" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,367" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,368" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,369" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,370" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,371" Action="CREATE"><FB Name="GET_AT_INDEX_1_2_1_2" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,372" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2_1_2.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,373" Action="CREATE"><FB Name="NoInterfaceProvided" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,374" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,375" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_2.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,376" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_2.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,377" Action="CREATE"><FB Name="GET_AT_INDEX_1_2_1_1_1_1" Type="GET_AT_INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,378" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_1_2_1_1_1_1.INDEX" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,379" Action="CREATE"><FB Name="FieldsToArrowheadService_1_2_1_1_1_1" Type="FieldsToArrowheadService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,380" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="FieldsToArrowheadService_1_2_1_1_1_1.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,381" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="FieldsToArrowheadService_1_2_1_1_1_1.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,382" Action="CREATE"><FB Name="WrongMetadaButNotAsked" Type="TEST_CONDITION" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,383" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,384" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService" Type="QueryService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,385" Action="CREATE"><FB Name="QueryServiceHTTPSub_1_2_1_1_1_1.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,386" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,387" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,388" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,389" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,390" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,391" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,392" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,393" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,394" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,395" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,396" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI.member" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,397" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,398" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,399" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,400" Action="CREATE"><FB Name="F_EQ_4_1_2_1_1_1_1" Type="F_EQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,401" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_4_1_2_1_1_1_1.IN1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,402" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,403" Action="WRITE"><Connection Source="WSTRIGN#versionEnded" Destination="PUBL_0.ID" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,404" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="RegisterServiceFullHTTP.FieldsToArrowheadSystem.systemName" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,405" Action="WRITE"><Connection Source="localhost" Destination="RegisterServiceFullHTTP.FieldsToArrowheadSystem.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,406" Action="WRITE"><Connection Source="8090" Destination="RegisterServiceFullHTTP.FieldsToArrowheadSystem.port" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,407" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="RegisterServiceFullHTTP.FieldsToArrowheadService.serviceDefinition" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,408" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="RegisterServiceFullHTTP.FieldsToArrowheadService.interfaces" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,409" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="RegisterServiceFullHTTP.FieldsToArrowheadService.serviceMetadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,410" Action="WRITE"><Connection Source="/serviceTest/start" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,411" Action="WRITE"><Connection Source="1" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,412" Action="WRITE"><Connection Source="false" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.udp" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,413" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.metadata" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,414" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.endpoint" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,415" Action="WRITE"><Connection Source="0" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,416" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,417" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,418" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,419" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,420" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,421" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,422" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,423" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,424" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,425" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,426" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,427" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,428" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,429" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,430" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2_1_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,431" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,432" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,433" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2_1_1_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,434" Action="WRITE"><Connection Source="true" Destination="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,435" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,436" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2_1_2.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,437" Action="WRITE"><Connection Source="false" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.metadataSearch" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,438" Action="WRITE"><Connection Source="1" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.version" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,439" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.address" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,440" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.doneRegister" Destination="FieldsToArrowheadService.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,441" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.doneUnregister" Destination="PUBL_0.INIT" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,442" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SWITCH.EO1" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.register" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,443" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SWITCH.EO0" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.unregister" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,444" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.CNF" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.EI2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,445" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.EO" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SWITCH.EI" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,446" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.EO" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.R" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,447" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.serviceRegistryEntry" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,448" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SR.Q" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SWITCH.G" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,449" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterService.registerService" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.RegisterServiceHTTP_1.registerService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,450" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.FieldsToArrowheadSystem.CNF" Destination="RegisterServiceFullHTTP.FieldsToArrowheadService.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,451" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.FieldsToArrowheadService.CNF" Destination="RegisterServiceFullHTTP.E_SWITCH.EI" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,452" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO1" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SR.S" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,453" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO1" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,454" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO1" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.EI1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,455" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO0" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_SR.R" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,456" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO0" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,457" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SWITCH.EO0" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.E_REND.EI1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,458" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.provider" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,459" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.E_SR.Q" Destination="RegisterServiceFullHTTP.E_SWITCH.G" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,460" Action="CREATE"><Connection Source="RegisterServiceFullHTTP.FieldsToArrowheadService.arrowheadService" Destination="RegisterServiceFullHTTP.RegisterServicePartialHTTP.FieldsToServiceRegistryEntry.providedService" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,461" Action="CREATE"><Connection Source="QueryServiceHTTPSub.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,462" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,463" Action="CREATE"><Connection Source="QueryServiceHTTPSub.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,464" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,465" Action="CREATE"><Connection Source="QueryServiceHTTPSub.QueryService.queryServices" Destination="QueryServiceHTTPSub.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,466" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,467" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,468" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,469" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="F_EQ_4.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,470" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,471" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,472" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,473" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,474" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,475" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,476" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,477" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,478" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,479" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,480" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_4.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,481" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,482" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,483" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,484" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,485" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,486" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,487" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,488" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,489" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1.QueryService.queried" Destination="GET_AT_INDEX_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,490" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,491" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,492" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,493" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,494" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,495" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,496" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="F_EQ_4_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,497" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,498" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,499" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,500" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,501" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,502" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,503" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,504" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,505" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,506" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,507" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_4_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,508" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,509" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,510" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,511" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,512" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,513" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,514" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,515" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,516" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_1.QueryService.queried" Destination="GET_AT_INDEX_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,517" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,518" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,519" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,520" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,521" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,522" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,523" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.CNF" Destination="F_EQ_4_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,524" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,525" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,526" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,527" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,528" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,529" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,530" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,531" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,532" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,533" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,534" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.OUT" Destination="F_EQ_4_1_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,535" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,536" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,537" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,538" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,539" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,540" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,541" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,542" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,543" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2.QueryService.queried" Destination="GET_AT_INDEX_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,544" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,545" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,546" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,547" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,548" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,549" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,550" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.S2WS.CNF" Destination="F_EQ_4_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,551" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,552" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,553" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,554" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,555" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,556" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,557" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,558" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,559" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,560" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,561" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.S2WS.OUT" Destination="F_EQ_4_1_2.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,562" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,563" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,564" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,565" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,566" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,567" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,568" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,569" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,570" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1.QueryService.queried" Destination="GET_AT_INDEX_1_2_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,571" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,572" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,573" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,574" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,575" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,576" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,577" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.S2WS.CNF" Destination="F_EQ_4_1_2_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,578" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,579" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,580" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,581" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,582" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,583" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,584" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,585" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,586" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,587" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,588" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.S2WS.OUT" Destination="F_EQ_4_1_2_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,589" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,590" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,591" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,592" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,593" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,594" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,595" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,596" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,597" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,598" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,599" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.S2WS.CNF" Destination="F_EQ_4_1_2_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,600" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,601" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,602" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,603" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,604" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,605" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,606" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,607" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,608" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,609" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,610" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.S2WS.OUT" Destination="F_EQ_4_1_2_1_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,611" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,612" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,613" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,614" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,615" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,616" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,617" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,618" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2_1_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,619" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1.QueryService.queried" Destination="GET_AT_INDEX_1_2_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,620" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2_1_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,621" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2_1_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,622" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2_1_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,623" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2_1_1_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,624" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1.QueryService.queried" Destination="GET_AT_INDEX_1_2_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,625" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2_1_1_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,626" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2_1_1_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,627" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2_1_1_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,628" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,629" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,630" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,631" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.S2WS.CNF" Destination="F_EQ_4_1_2_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,632" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,633" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,634" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,635" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,636" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,637" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,638" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,639" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,640" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,641" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,642" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.S2WS.OUT" Destination="F_EQ_4_1_2_1_1_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,643" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,644" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,645" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,646" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,647" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,648" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,649" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,650" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,651" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,652" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,653" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.S2WS.CNF" Destination="F_EQ_4_1_2_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,654" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,655" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,656" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,657" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,658" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,659" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,660" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,661" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,662" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,663" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,664" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.S2WS.OUT" Destination="F_EQ_4_1_2_1_2.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,665" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,666" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,667" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,668" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,669" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,670" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,671" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_2.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,672" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2_1_2.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,673" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_2.QueryService.queried" Destination="GET_AT_INDEX_1_2_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,674" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2_1_2.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,675" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_2.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2_1_2.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,676" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_2.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2_1_2.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,677" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.CNF" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.query" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,678" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.queried" Destination="GET_AT_INDEX_1_2_1_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,679" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.serviceQueryForm" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,680" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_2_1_1_1_1.IN_ARRAY" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,681" Action="CREATE"><Connection Source="QueryServiceHTTPSub_1_2_1_1_1_1.QueryService.queryServices" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.QueryServiceHTTP.queryServices" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,682" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,683" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,684" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,685" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.S2WS.CNF" Destination="F_EQ_4_1_2_1_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,686" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,687" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,688" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,689" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.DI2S.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,690" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,691" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.S2WS.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,692" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,693" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,694" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.IN_3" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,695" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.DI2S.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,696" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.S2WS.OUT" Destination="F_EQ_4_1_2_1_1_1_1.IN2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,697" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,698" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetPort.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,699" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetAddress.in_struct" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,700" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS_1.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,701" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI.IN_1" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,702" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.S2WS.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,703" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.IpPortURI.IN_2" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,704" Action="CREATE"><Connection Source="FieldsToArrowheadService.CNF" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,705" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,706" Action="CREATE"><Connection Source="F_EQ_4.CNF" Destination="LowerVersion.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,707" Action="CREATE"><Connection Source="FieldsToArrowheadService_1.CNF" Destination="QueryServiceHTTPSub_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,708" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,709" Action="CREATE"><Connection Source="F_EQ_4_1.CNF" Destination="SameVersion.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,710" Action="CREATE"><Connection Source="F_EQ_4_1_1.CNF" Destination="OneInterfaceOutOfTwo.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,711" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_1.CNF" Destination="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,712" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,713" Action="CREATE"><Connection Source="F_EQ_4_1_2.CNF" Destination="OneInterfaceOutOfTwo_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,714" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2.CNF" Destination="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,715" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,716" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,717" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1.CNF" Destination="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,718" Action="CREATE"><Connection Source="F_EQ_4_1_2_1.CNF" Destination="WrongInterfaceProvided.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,719" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1.CNF" Destination="OnlyOneMetadata.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,720" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,721" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1.CNF" Destination="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,722" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1_1.CNF" Destination="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,723" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,724" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1_1.CNF" Destination="NoMetadataAndAsked.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,725" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,726" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,727" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_2.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,728" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_2.CNF" Destination="NoInterfaceProvided.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,729" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_2.CNF" Destination="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,730" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1_1_1.CNF" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,731" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,732" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1_1_1.CNF" Destination="WrongMetadaButNotAsked.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,733" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="RegisterServiceFullHTTP.FieldsToArrowheadSystem.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,734" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="RegisterServiceFullHTTP.E_SR.S" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,735" Action="CREATE"><Connection Source="LowerVersion.CNF" Destination="FieldsToArrowheadService_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,736" Action="CREATE"><Connection Source="SameVersion.CNF" Destination="FieldsToArrowheadService_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,737" Action="CREATE"><Connection Source="OneInterfaceOutOfTwo.CNF" Destination="FieldsToArrowheadService_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,738" Action="CREATE"><Connection Source="OneInterfaceOutOfTwo_2.CNF" Destination="FieldsToArrowheadService_1_2_1_2.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,739" Action="CREATE"><Connection Source="NoInterfaceProvided.CNF" Destination="FieldsToArrowheadService_1_2_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,740" Action="CREATE"><Connection Source="WrongInterfaceProvided.CNF" Destination="FieldsToArrowheadService_1_2_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,741" Action="CREATE"><Connection Source="OnlyOneMetadata.CNF" Destination="FieldsToArrowheadService_1_2_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,742" Action="CREATE"><Connection Source="NoMetadataAndAsked.CNF" Destination="FieldsToArrowheadService_1_2_1_1_1_1.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,743" Action="CREATE"><Connection Source="WrongMetadaButNotAsked.CNF" Destination="RegisterServiceFullHTTP.FieldsToArrowheadSystem.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,744" Action="CREATE"><Connection Source="WrongMetadaButNotAsked.CNF" Destination="RegisterServiceFullHTTP.E_SR.R" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,745" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,746" Action="CREATE"><Connection Source="FieldsToArrowheadService.arrowheadService" Destination="QueryServiceHTTPSub.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,747" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,748" Action="CREATE"><Connection Source="F_EQ_4.OUT" Destination="LowerVersion.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,749" Action="CREATE"><Connection Source="FieldsToArrowheadService_1.arrowheadService" Destination="QueryServiceHTTPSub_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,750" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,751" Action="CREATE"><Connection Source="F_EQ_4_1.OUT" Destination="SameVersion.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,752" Action="CREATE"><Connection Source="F_EQ_4_1_1.OUT" Destination="OneInterfaceOutOfTwo.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,753" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_1.arrowheadService" Destination="QueryServiceHTTPSub_1_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,754" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,755" Action="CREATE"><Connection Source="F_EQ_4_1_2.OUT" Destination="OneInterfaceOutOfTwo_2.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,756" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2.arrowheadService" Destination="QueryServiceHTTPSub_1_2.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,757" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,758" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,759" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1.arrowheadService" Destination="QueryServiceHTTPSub_1_2_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,760" Action="CREATE"><Connection Source="F_EQ_4_1_2_1.OUT" Destination="WrongInterfaceProvided.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,761" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1.OUT" Destination="OnlyOneMetadata.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,762" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,763" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1.arrowheadService" Destination="QueryServiceHTTPSub_1_2_1_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,764" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1_1.arrowheadService" Destination="QueryServiceHTTPSub_1_2_1_1_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,765" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,766" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1_1.OUT" Destination="NoMetadataAndAsked.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,767" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_2.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_2.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,768" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_2.OUT" Destination="NoInterfaceProvided.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,769" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_2.arrowheadService" Destination="QueryServiceHTTPSub_1_2_1_2.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,770" Action="CREATE"><Connection Source="FieldsToArrowheadService_1_2_1_1_1_1.arrowheadService" Destination="QueryServiceHTTPSub_1_2_1_1_1_1.FieldsToServiceQueryForm.service" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,771" Action="CREATE"><Connection Source="GET_AT_INDEX_1_2_1_1_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_2_1_1_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,772" Action="CREATE"><Connection Source="F_EQ_4_1_2_1_1_1_1.OUT" Destination="WrongMetadaButNotAsked.check" /></Request>
+VersionInterfaceAndMetadata;<Request ID="1,773" Action="START"/>
+;<Request ID="1,774" Action="CREATE"><FB Name="RegisterMoreServicesSubApp" Type="EMB_RES" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,775" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,776" Action="WRITE"><Connection Source="WSTRIGN#versionEnded" Destination="SUBL_0.ID" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,777" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,778" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,779" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,780" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,781" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,782" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,783" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,784" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,785" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,786" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,787" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,788" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,789" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,790" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,791" Action="CREATE"><FB Name="GET_AT_INDEX_1" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,792" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,793" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,794" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,795" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,796" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry.GetPort.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,797" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,798" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,799" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,800" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,801" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,802" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,803" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry.GetURI.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,804" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,805" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,806" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,807" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,808" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,809" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,810" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,811" Action="CREATE"><FB Name="F_EQ_2" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,812" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_2.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,813" Action="CREATE"><FB Name="GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,814" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,815" Action="CREATE"><FB Name="Pos1Empty2" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,816" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,817" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,818" Action="CREATE"><FB Name="Pos1Empty" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,819" Action="CREATE"><FB Name="Sequencer.E_DEMUX" Type="E_DEMUX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,820" Action="CREATE"><FB Name="Sequencer.E_CTU" Type="E_CTU" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,821" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1" Type="E_DEMUX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,822" Action="CREATE"><FB Name="Sequencer.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,823" Action="CREATE"><FB Name="Sequencer.F_GT" Type="F_GT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,824" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer.F_GT.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,825" Action="CREATE"><FB Name="Sequencer.E_MERGE" Type="E_MERGE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,826" Action="CREATE"><FB Name="Sequencer.F_SUB" Type="F_SUB" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,827" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer.F_SUB.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,828" Action="CREATE"><FB Name="Sequencer.E_DEMUX_1_1" Type="E_DEMUX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,829" Action="CREATE"><FB Name="Sequencer.F_GT_1" Type="F_GT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,830" Action="WRITE"><Connection Source="INT#7" Destination="Sequencer.F_GT_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,831" Action="CREATE"><FB Name="Sequencer.F_SUB_1" Type="F_SUB" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,832" Action="WRITE"><Connection Source="INT#8" Destination="Sequencer.F_SUB_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,833" Action="CREATE"><FB Name="Sequencer.E_SWITCH_1" Type="E_SWITCH" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,834" Action="CREATE"><FB Name="GET_AT_INDEX_1_1" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,835" Action="WRITE"><Connection Source="1" Destination="GET_AT_INDEX_1_1.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,836" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,837" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,838" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,839" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,840" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,841" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,842" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,843" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,844" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,845" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,846" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,847" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,848" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,849" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,850" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.WS2WS" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,851" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.DI2S" Type="F_DINT_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,852" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,853" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,854" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.IpPort" Type="APPEND_STRING_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,855" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,856" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,857" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,858" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,859" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,860" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.member" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,861" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry" Type="ServiceRegistryEntry2ServiceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,862" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.WS2WS_1" Type="F_WSTRING_TO_STRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,863" Action="CREATE"><FB Name="GetEndpointFromServiceRegistryEntry_2.IpPortURI" Type="APPEND_STRING_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,864" Action="CREATE"><FB Name="GET_AT_INDEX_2" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,865" Action="WRITE"><Connection Source="0" Destination="GET_AT_INDEX_2.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,866" Action="CREATE"><FB Name="Pos0Service1" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,867" Action="CREATE"><FB Name="F_EQ_3" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,868" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_3.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,869" Action="CREATE"><FB Name="F_EQ_3_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,870" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start2" Destination="F_EQ_3_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,871" Action="CREATE"><FB Name="Pos0Service2" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,872" Action="CREATE"><FB Name="PUBL_0_1" Type="PUBL_0" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,873" Action="WRITE"><Connection Source="test6Ended" Destination="PUBL_0_1.ID" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,874" Action="CREATE"><FB Name="QuerySecondService.FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,875" Action="CREATE"><FB Name="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,876" Action="CREATE"><FB Name="QuerySecondService.QueryServiceHTTPSub.QueryService" Type="QueryService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,877" Action="CREATE"><FB Name="QuerySecondService.QueryServiceHTTPSub.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,878" Action="CREATE"><FB Name="QueryFirstService.FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,879" Action="CREATE"><FB Name="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm" Type="FieldsToServiceQueryForm" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,880" Action="CREATE"><FB Name="QueryFirstService.QueryServiceHTTPSub.QueryService" Type="QueryService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,881" Action="CREATE"><FB Name="QueryFirstService.QueryServiceHTTPSub.QueryServiceHTTP" Type="QueryServiceHTTP" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,882" Action="CREATE"><FB Name="F_EQ_1_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,883" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,884" Action="CREATE"><FB Name="F_EQ_3_1_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,885" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_3_1_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,886" Action="CREATE"><FB Name="Pos1Empty3" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,887" Action="CREATE"><FB Name="Pos0Empty3" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,888" Action="CREATE"><FB Name="F_EQ_1_1_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,889" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_1_1_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,890" Action="CREATE"><FB Name="Pos0Empty4" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,891" Action="CREATE"><FB Name="Pos1Empty4" Type="TEST_CONDITION" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,892" Action="CREATE"><FB Name="F_EQ_3_1_1_1" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,893" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ_3_1_1_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,894" Action="CREATE"><FB Name="E_MERGE" Type="E_MERGE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,895" Action="CREATE"><FB Name="E_MERGE_1" Type="E_MERGE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,896" Action="CREATE"><FB Name="RegisterManyServices.Reset" Type="E_MERGE" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,897" Action="CREATE"><FB Name="RegisterManyServices.FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,898" Action="CREATE"><FB Name="RegisterManyServices.RegUnreg" Type="E_SWITCH" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,899" Action="CREATE"><FB Name="RegisterManyServices.Register" Type="E_SR" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,900" Action="CREATE"><FB Name="RegisterManyServices.RegisterService" Type="RegisterService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,901" Action="CREATE"><FB Name="RegisterManyServices.RegisterServiceHTTP" Type="RegisterServiceHTTP" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,902" Action="CREATE"><FB Name="RegisterManyServices.RegUnregDone" Type="E_SWITCH" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,903" Action="CREATE"><FB Name="RegisterManyServices.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,904" Action="CREATE"><FB Name="RegisterManyServices.GetName" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,905" Action="CREATE"><FB Name="RegisterManyServices.E_CTU" Type="E_CTU" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,906" Action="CREATE"><FB Name="RegisterManyServices.E_SWITCH" Type="E_SWITCH" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,907" Action="CREATE"><FB Name="RegisterManyServices.WSTRING2WSTRING" Type="WSTRING2WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,908" Action="CREATE"><FB Name="RegisterManyServices.IsLast" Type="F_EQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,909" Action="WRITE"><Connection Source="WSTRING#""" Destination="RegisterManyServices.IsLast.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,910" Action="CREATE"><FB Name="RegisterManyServices.GetURI" Type="GET_AT_INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,911" Action="CREATE"><FB Name="RegisterManyServices.E_SPLIT" Type="E_SPLIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,912" Action="CREATE"><FB Name="RegisterManyServices.PermitUnreg" Type="E_PERMIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,913" Action="CREATE"><FB Name="RegisterManyServices.F_NOT" Type="F_NOT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,914" Action="CREATE"><FB Name="RegisterManyServices.PermitReg" Type="E_PERMIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,915" Action="CREATE"><FB Name="RegisterManyServices.Regblock" Type="E_SR" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,916" Action="CREATE"><FB Name="RegisterManyServices.F_NOT_1" Type="F_NOT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,917" Action="CREATE"><FB Name="RegisterManyServices.UnRegBlock" Type="E_SR" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,918" Action="CREATE"><FB Name="RegisterManyServices.ARRAY2ARRAY_10_WSTRING" Type="ARRAY2ARRAY_10_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,919" Action="CREATE"><FB Name="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1" Type="ARRAY2ARRAY_10_WSTRING" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,920" Action="WRITE"><Connection Source="WSTRING#serviceTest2" Destination="QuerySecondService.FieldsToArrowheadService.serviceDefinition" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,921" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="QuerySecondService.FieldsToArrowheadService.interfaces" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,922" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="QuerySecondService.FieldsToArrowheadService.serviceMetadata" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,923" Action="WRITE"><Connection Source="false" Destination="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.metadataSearch" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,924" Action="WRITE"><Connection Source="1" Destination="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.version" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,925" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QuerySecondService.QueryServiceHTTPSub.QueryService.address" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,926" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="QueryFirstService.FieldsToArrowheadService.serviceDefinition" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,927" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="QueryFirstService.FieldsToArrowheadService.interfaces" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,928" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="QueryFirstService.FieldsToArrowheadService.serviceMetadata" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,929" Action="WRITE"><Connection Source="false" Destination="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.metadataSearch" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,930" Action="WRITE"><Connection Source="1" Destination="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.version" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,931" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="QueryFirstService.QueryServiceHTTPSub.QueryService.address" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,932" Action="WRITE"><Connection Source="["serviceTest", "serviceTest2"]" Destination="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,933" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="RegisterManyServices.FieldsToArrowheadService.interfaces" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,934" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="RegisterManyServices.FieldsToArrowheadService.serviceMetadata" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,935" Action="WRITE"><Connection Source="["/serviceTest/start", "/serviceTest/start2"]" Destination="RegisterManyServices.ARRAY2ARRAY_10_WSTRING.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,936" Action="WRITE"><Connection Source="1" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.version" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,937" Action="WRITE"><Connection Source="false" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.udp" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,938" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.metadata" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,939" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterManyServices.RegisterService.endpoint" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,940" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,941" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,942" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,943" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.CNF" Destination="E_MERGE_1.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,944" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,945" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,946" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,947" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,948" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,949" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,950" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,951" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,952" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPort.IN_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,953" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1.DI2S.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,954" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_2.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,955" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.S2WS.OUT" Destination="F_EQ_1_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,956" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetURI.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,957" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetPort.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,958" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.GetAddress.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,959" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,960" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,961" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.S2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,962" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.IpPortURI.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,963" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,964" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,965" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,966" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,967" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,968" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,969" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,970" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.DI2S.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,971" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,972" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry.S2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,973" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,974" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,975" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPort.IN_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,976" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry.DI2S.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,977" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_3.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,978" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.S2WS.OUT" Destination="F_EQ_3_1_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,979" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetURI.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,980" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetPort.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,981" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry.GetAddress.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,982" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry.WS2WS_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,983" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,984" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry.S2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,985" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry.IpPortURI.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,986" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="RegisterManyServices.F_NOT_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,987" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="QueryFirstService.FieldsToArrowheadService.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,988" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="F_EQ_3.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,989" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="QuerySecondService.FieldsToArrowheadService.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,990" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="F_EQ_3_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,991" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="RegisterManyServices.F_NOT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,992" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="QueryFirstService.FieldsToArrowheadService.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,993" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="F_EQ_3_1_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,994" Action="CREATE"><Connection Source="Sequencer.F_GT.CNF" Destination="Sequencer.E_SWITCH.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,995" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO0" Destination="Sequencer.E_DEMUX.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,996" Action="CREATE"><Connection Source="Sequencer.E_MERGE.EO" Destination="Sequencer.E_CTU.CU" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,997" Action="CREATE"><Connection Source="Sequencer.F_SUB.CNF" Destination="Sequencer.E_DEMUX_1.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,998" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="1,999" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,000" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,001" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO3" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,002" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO2" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,003" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO1" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,004" Action="CREATE"><Connection Source="Sequencer.E_DEMUX.EO0" Destination="Sequencer.E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,005" Action="CREATE"><Connection Source="Sequencer.E_SWITCH.EO1" Destination="Sequencer.F_GT_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,006" Action="CREATE"><Connection Source="Sequencer.F_GT_1.CNF" Destination="Sequencer.E_SWITCH_1.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,007" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO0" Destination="Sequencer.F_SUB.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,008" Action="CREATE"><Connection Source="Sequencer.E_SWITCH_1.EO1" Destination="Sequencer.F_SUB_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,009" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.CNF" Destination="Sequencer.E_DEMUX_1_1.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,010" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="QuerySecondService.FieldsToArrowheadService.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,011" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="F_EQ_3_1_1_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,012" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="PUBL_0_1.INIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,013" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1.EO3" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,014" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO0" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,015" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO1" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,016" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO2" Destination="Sequencer.E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,017" Action="CREATE"><Connection Source="Sequencer.E_DEMUX_1_1.EO3" Destination="Sequencer.E_CTU.R" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,018" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.E_DEMUX.K" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,019" Action="CREATE"><Connection Source="Sequencer.F_GT.OUT" Destination="Sequencer.E_SWITCH.G" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,020" Action="CREATE"><Connection Source="Sequencer.F_SUB.OUT" Destination="Sequencer.E_DEMUX_1.K" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,021" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,022" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,023" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_SUB_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,024" Action="CREATE"><Connection Source="Sequencer.E_CTU.CV" Destination="Sequencer.F_GT_1.IN1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,025" Action="CREATE"><Connection Source="Sequencer.F_GT_1.OUT" Destination="Sequencer.E_SWITCH_1.G" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,026" Action="CREATE"><Connection Source="Sequencer.F_SUB_1.OUT" Destination="Sequencer.E_DEMUX_1_1.K" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,027" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,028" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,029" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,030" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.CNF" Destination="E_MERGE_1.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,031" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,032" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,033" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,034" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,035" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,036" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,037" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,038" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,039" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPort.IN_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,040" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.DI2S.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,041" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,042" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.S2WS.OUT" Destination="F_EQ_1_1_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,043" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetURI.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,044" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetPort.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,045" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.GetAddress.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,046" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,047" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,048" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.S2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,049" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_1_1.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.IpPortURI.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,050" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.DI2S.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,051" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,052" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetAddress.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,053" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.CNF" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,054" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,055" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,056" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,057" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.DI2S.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,058" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPort.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,059" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPortURI.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.S2WS.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,060" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,061" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetAddress.output" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,062" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.DI2S.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPort.IN_3" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,063" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetPort.output" Destination="GetEndpointFromServiceRegistryEntry_2.DI2S.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,064" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.OUT" Destination="F_EQ_3_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,065" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.S2WS.OUT" Destination="F_EQ_3_1_1_1.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,066" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetURI.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,067" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetPort.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,068" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.GetAddress.in_struct" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,069" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.GetURI.output" Destination="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,070" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPort.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.IN_1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,071" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.IpPortURI.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.S2WS.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,072" Action="CREATE"><Connection Source="GetEndpointFromServiceRegistryEntry_2.WS2WS_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.IpPortURI.IN_2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,073" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.CNF" Destination="QuerySecondService.QueryServiceHTTPSub.QueryService.query" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,074" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.QueryService.queried" Destination="GET_AT_INDEX_2.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,075" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.serviceQueryForm" Destination="QuerySecondService.QueryServiceHTTPSub.QueryService.serviceQueryForm" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,076" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX_1_1.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,077" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX_2.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,078" Action="CREATE"><Connection Source="QuerySecondService.QueryServiceHTTPSub.QueryService.queryServices" Destination="QuerySecondService.QueryServiceHTTPSub.QueryServiceHTTP.queryServices" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,079" Action="CREATE"><Connection Source="QuerySecondService.FieldsToArrowheadService.CNF" Destination="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,080" Action="CREATE"><Connection Source="QuerySecondService.FieldsToArrowheadService.arrowheadService" Destination="QuerySecondService.QueryServiceHTTPSub.FieldsToServiceQueryForm.service" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,081" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.CNF" Destination="QueryFirstService.QueryServiceHTTPSub.QueryService.query" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,082" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.QueryService.queried" Destination="GET_AT_INDEX.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,083" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.serviceQueryForm" Destination="QueryFirstService.QueryServiceHTTPSub.QueryService.serviceQueryForm" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,084" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX_1.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,085" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.QueryService.serviceEntries" Destination="GET_AT_INDEX.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,086" Action="CREATE"><Connection Source="QueryFirstService.QueryServiceHTTPSub.QueryService.queryServices" Destination="QueryFirstService.QueryServiceHTTPSub.QueryServiceHTTP.queryServices" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,087" Action="CREATE"><Connection Source="QueryFirstService.FieldsToArrowheadService.CNF" Destination="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,088" Action="CREATE"><Connection Source="QueryFirstService.FieldsToArrowheadService.arrowheadService" Destination="QueryFirstService.QueryServiceHTTPSub.FieldsToServiceQueryForm.service" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,089" Action="CREATE"><Connection Source="RegisterManyServices.RegUnregDone.EO0" Destination="RegisterManyServices.Reset.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,090" Action="CREATE"><Connection Source="RegisterManyServices.RegUnregDone.EO1" Destination="RegisterManyServices.Reset.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,091" Action="CREATE"><Connection Source="RegisterManyServices.FieldsToArrowheadService.CNF" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,092" Action="CREATE"><Connection Source="RegisterManyServices.FieldsToServiceRegistryEntry.CNF" Destination="RegisterManyServices.RegUnreg.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,093" Action="CREATE"><Connection Source="RegisterManyServices.RegUnreg.EO0" Destination="RegisterManyServices.RegisterService.unregister" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,094" Action="CREATE"><Connection Source="RegisterManyServices.RegUnreg.EO1" Destination="RegisterManyServices.RegisterService.register" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,095" Action="CREATE"><Connection Source="RegisterManyServices.RegUnregDone.EO1" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,096" Action="CREATE"><Connection Source="RegisterManyServices.RegUnregDone.EO0" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,097" Action="CREATE"><Connection Source="RegisterManyServices.IsLast.CNF" Destination="RegisterManyServices.E_SWITCH.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,098" Action="CREATE"><Connection Source="RegisterManyServices.WSTRING2WSTRING.CNF" Destination="RegisterManyServices.IsLast.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,099" Action="CREATE"><Connection Source="RegisterManyServices.GetURI.CNF" Destination="RegisterManyServices.WSTRING2WSTRING.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,100" Action="CREATE"><Connection Source="RegisterManyServices.E_SPLIT.EO1" Destination="RegisterManyServices.E_CTU.CU" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,101" Action="CREATE"><Connection Source="RegisterManyServices.E_SWITCH.EO0" Destination="RegisterManyServices.E_SPLIT.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,102" Action="CREATE"><Connection Source="RegisterManyServices.E_SWITCH.EO1" Destination="RegisterManyServices.E_CTU.R" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,103" Action="CREATE"><Connection Source="RegisterManyServices.E_SPLIT.EO2" Destination="RegisterManyServices.FieldsToArrowheadService.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,104" Action="CREATE"><Connection Source="RegisterManyServices.RegisterService.doneRegister" Destination="RegisterManyServices.GetName.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,105" Action="CREATE"><Connection Source="RegisterManyServices.E_CTU.RO" Destination="RegisterManyServices.RegUnregDone.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,106" Action="CREATE"><Connection Source="RegisterManyServices.F_NOT_1.CNF" Destination="RegisterManyServices.PermitReg.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,107" Action="CREATE"><Connection Source="RegisterManyServices.F_NOT.CNF" Destination="RegisterManyServices.PermitUnreg.EI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,108" Action="CREATE"><Connection Source="RegisterManyServices.PermitUnreg.EO" Destination="RegisterManyServices.Register.R" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,109" Action="CREATE"><Connection Source="RegisterManyServices.PermitReg.EO" Destination="RegisterManyServices.Register.S" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,110" Action="CREATE"><Connection Source="RegisterManyServices.Reset.EO" Destination="RegisterManyServices.UnRegBlock.R" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,111" Action="CREATE"><Connection Source="RegisterManyServices.Reset.EO" Destination="RegisterManyServices.Regblock.R" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,112" Action="CREATE"><Connection Source="RegisterManyServices.PermitUnreg.EO" Destination="RegisterManyServices.UnRegBlock.S" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,113" Action="CREATE"><Connection Source="RegisterManyServices.PermitUnreg.EO" Destination="RegisterManyServices.Regblock.S" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,114" Action="CREATE"><Connection Source="RegisterManyServices.PermitReg.EO" Destination="RegisterManyServices.Regblock.S" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,115" Action="CREATE"><Connection Source="RegisterManyServices.PermitReg.EO" Destination="RegisterManyServices.UnRegBlock.S" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,116" Action="CREATE"><Connection Source="RegisterManyServices.RegisterService.doneUnregister" Destination="RegisterManyServices.GetName.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,117" Action="CREATE"><Connection Source="RegisterManyServices.ARRAY2ARRAY_10_WSTRING.CNF" Destination="RegisterManyServices.GetName.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,118" Action="CREATE"><Connection Source="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1.CNF" Destination="RegisterManyServices.ARRAY2ARRAY_10_WSTRING.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,119" Action="CREATE"><Connection Source="RegisterManyServices.PermitReg.EO" Destination="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,120" Action="CREATE"><Connection Source="RegisterManyServices.PermitUnreg.EO" Destination="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,121" Action="CREATE"><Connection Source="RegisterManyServices.GetName.CNF" Destination="RegisterManyServices.GetURI.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,122" Action="CREATE"><Connection Source="RegisterManyServices.FieldsToArrowheadService.arrowheadService" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.providedService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,123" Action="CREATE"><Connection Source="RegisterManyServices.Register.Q" Destination="RegisterManyServices.RegUnreg.G" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,124" Action="CREATE"><Connection Source="RegisterManyServices.Register.Q" Destination="RegisterManyServices.RegUnregDone.G" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,125" Action="CREATE"><Connection Source="RegisterManyServices.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterManyServices.RegisterService.serviceRegistryEntry" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,126" Action="CREATE"><Connection Source="RegisterManyServices.E_CTU.CV" Destination="RegisterManyServices.GetName.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,127" Action="CREATE"><Connection Source="RegisterManyServices.GetName.OUT" Destination="RegisterManyServices.WSTRING2WSTRING.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,128" Action="CREATE"><Connection Source="RegisterManyServices.E_CTU.CV" Destination="RegisterManyServices.GetURI.INDEX" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,129" Action="CREATE"><Connection Source="RegisterManyServices.IsLast.OUT" Destination="RegisterManyServices.E_SWITCH.G" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,130" Action="CREATE"><Connection Source="RegisterManyServices.WSTRING2WSTRING.OUT" Destination="RegisterManyServices.IsLast.IN2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,131" Action="CREATE"><Connection Source="RegisterManyServices.GetURI.OUT" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,132" Action="CREATE"><Connection Source="RegisterManyServices.GetName.OUT" Destination="RegisterManyServices.FieldsToArrowheadService.serviceDefinition" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,133" Action="CREATE"><Connection Source="RegisterManyServices.F_NOT.OUT" Destination="RegisterManyServices.PermitUnreg.PERMIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,134" Action="CREATE"><Connection Source="RegisterManyServices.UnRegBlock.Q" Destination="RegisterManyServices.F_NOT.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,135" Action="CREATE"><Connection Source="RegisterManyServices.F_NOT_1.OUT" Destination="RegisterManyServices.PermitReg.PERMIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,136" Action="CREATE"><Connection Source="RegisterManyServices.Regblock.Q" Destination="RegisterManyServices.F_NOT_1.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,137" Action="CREATE"><Connection Source="RegisterManyServices.ARRAY2ARRAY_10_WSTRING.OUT" Destination="RegisterManyServices.GetURI.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,138" Action="CREATE"><Connection Source="RegisterManyServices.ARRAY2ARRAY_10_WSTRING_1.OUT" Destination="RegisterManyServices.GetName.IN_ARRAY" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,139" Action="CREATE"><Connection Source="RegisterManyServices.RegisterService.registerService" Destination="RegisterManyServices.RegisterServiceHTTP.registerService" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,140" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,141" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,142" Action="CREATE"><Connection Source="GET_AT_INDEX_1.CNF" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,143" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,144" Action="CREATE"><Connection Source="GET_AT_INDEX.CNF" Destination="GET_AT_INDEX_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,145" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,146" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.CNF" Destination="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,147" Action="CREATE"><Connection Source="GET_AT_INDEX_2.CNF" Destination="GET_AT_INDEX_1_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,148" Action="CREATE"><Connection Source="F_EQ_2.CNF" Destination="Pos0Service1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,149" Action="CREATE"><Connection Source="Pos0Service1.CNF" Destination="Pos1Empty.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,150" Action="CREATE"><Connection Source="F_EQ_3.CNF" Destination="F_EQ_2.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,151" Action="CREATE"><Connection Source="F_EQ_3_1.CNF" Destination="F_EQ_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,152" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="Pos0Service2.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,153" Action="CREATE"><Connection Source="Pos0Service2.CNF" Destination="Pos1Empty2.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,154" Action="CREATE"><Connection Source="F_EQ_1_1.CNF" Destination="Pos1Empty3.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,155" Action="CREATE"><Connection Source="F_EQ_3_1_1.CNF" Destination="Pos0Empty3.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,156" Action="CREATE"><Connection Source="Pos0Empty3.CNF" Destination="F_EQ_1_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,157" Action="CREATE"><Connection Source="Pos0Empty4.CNF" Destination="F_EQ_1_1_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,158" Action="CREATE"><Connection Source="F_EQ_1_1_1.CNF" Destination="Pos1Empty4.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,159" Action="CREATE"><Connection Source="F_EQ_3_1_1_1.CNF" Destination="Pos0Empty4.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,160" Action="CREATE"><Connection Source="Pos1Empty.CNF" Destination="E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,161" Action="CREATE"><Connection Source="Pos1Empty2.CNF" Destination="E_MERGE.EI1" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,162" Action="CREATE"><Connection Source="Pos1Empty3.CNF" Destination="E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,163" Action="CREATE"><Connection Source="Pos1Empty4.CNF" Destination="E_MERGE.EI2" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,164" Action="CREATE"><Connection Source="E_MERGE.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,165" Action="CREATE"><Connection Source="E_MERGE_1.EO" Destination="Sequencer.F_GT.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,166" Action="CREATE"><Connection Source="PUBL_0_1.INITO" Destination="PUBL_0_1.REQ" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,167" Action="CREATE"><Connection Source="GET_AT_INDEX_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,168" Action="CREATE"><Connection Source="GET_AT_INDEX.OUT" Destination="GetEndpointFromServiceRegistryEntry.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,169" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="Pos1Empty2.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,170" Action="CREATE"><Connection Source="F_EQ_2.OUT" Destination="Pos1Empty.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,171" Action="CREATE"><Connection Source="GET_AT_INDEX_1_1.OUT" Destination="GetEndpointFromServiceRegistryEntry_1_1.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,172" Action="CREATE"><Connection Source="GET_AT_INDEX_2.OUT" Destination="GetEndpointFromServiceRegistryEntry_2.ServiceRegistryEntry2ServiceRegistryEntry.IN" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,173" Action="CREATE"><Connection Source="F_EQ_3.OUT" Destination="Pos0Service1.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,174" Action="CREATE"><Connection Source="F_EQ_3_1.OUT" Destination="Pos0Service2.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,175" Action="CREATE"><Connection Source="F_EQ_1_1.OUT" Destination="Pos1Empty3.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,176" Action="CREATE"><Connection Source="F_EQ_3_1_1.OUT" Destination="Pos0Empty3.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,177" Action="CREATE"><Connection Source="F_EQ_1_1_1.OUT" Destination="Pos1Empty4.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,178" Action="CREATE"><Connection Source="F_EQ_3_1_1_1.OUT" Destination="Pos0Empty4.check" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,179" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterManyServices.FieldsToServiceRegistryEntry.provider" /></Request>
+RegisterMoreServicesSubApp;<Request ID="2,180" Action="START"/>
+;<Request ID="2,181" Action="CREATE"><FB Name="OrchestratorNoRule" Type="EMB_RES" /></Request>
+OrchestratorNoRule;<Request ID="2,182" Action="CREATE"><FB Name="RequestOrchestrationHTTP" Type="RequestOrchestrationHTTP" /></Request>
+OrchestratorNoRule;<Request ID="2,183" Action="CREATE"><FB Name="FieldsToServiceRequestForm" Type="FieldsToServiceRequestForm" /></Request>
+OrchestratorNoRule;<Request ID="2,184" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+OrchestratorNoRule;<Request ID="2,185" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+OrchestratorNoRule;<Request ID="2,186" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+OrchestratorNoRule;<Request ID="2,187" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+OrchestratorNoRule;<Request ID="2,188" Action="CREATE"><FB Name="Service1" Type="FieldsToArrowheadService" /></Request>
+OrchestratorNoRule;<Request ID="2,189" Action="WRITE"><Connection Source="WSTRING#serviceTest2" Destination="Service1.serviceDefinition" /></Request>
+OrchestratorNoRule;<Request ID="2,190" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="Service1.interfaces" /></Request>
+OrchestratorNoRule;<Request ID="2,191" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="Service1.serviceMetadata" /></Request>
+OrchestratorNoRule;<Request ID="2,192" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+OrchestratorNoRule;<Request ID="2,193" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.WS2WS" Type="WSTRING2WSTRING" /></Request>
+OrchestratorNoRule;<Request ID="2,194" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.DI2S" Type="F_DINT_TO_STRING" /></Request>
+OrchestratorNoRule;<Request ID="2,195" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+OrchestratorNoRule;<Request ID="2,196" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromOrchestrationForm.GetAddress.member" /></Request>
+OrchestratorNoRule;<Request ID="2,197" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+OrchestratorNoRule;<Request ID="2,198" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromOrchestrationForm.GetPort.member" /></Request>
+OrchestratorNoRule;<Request ID="2,199" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+OrchestratorNoRule;<Request ID="2,200" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromOrchestrationForm.GetURI.member" /></Request>
+OrchestratorNoRule;<Request ID="2,201" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.IpPort" Type="APPEND_STRING_3" /></Request>
+OrchestratorNoRule;<Request ID="2,202" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromOrchestrationForm.IpPort.IN_2" /></Request>
+OrchestratorNoRule;<Request ID="2,203" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm" Type="OrchestrationForm2OrchestrationForm" /></Request>
+OrchestratorNoRule;<Request ID="2,204" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.WS2WS_1" Type="WSTRING2WSTRING" /></Request>
+OrchestratorNoRule;<Request ID="2,205" Action="CREATE"><FB Name="GetEndpointFromOrchestrationForm.IpPortURI" Type="APPEND_STRING_2" /></Request>
+OrchestratorNoRule;<Request ID="2,206" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+OrchestratorNoRule;<Request ID="2,207" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ.IN1" /></Request>
+OrchestratorNoRule;<Request ID="2,208" Action="CREATE"><FB Name="NoServiceAvailable" Type="TEST_CONDITION" /></Request>
+OrchestratorNoRule;<Request ID="2,209" Action="CREATE"><FB Name="SERVER_1" Type="SERVER_1" /></Request>
+OrchestratorNoRule;<Request ID="2,210" Action="WRITE"><Connection Source="http[/serviceTest/start2]" Destination="SERVER_1.ID" /></Request>
+OrchestratorNoRule;<Request ID="2,211" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+OrchestratorNoRule;<Request ID="2,212" Action="CREATE"><FB Name="RegisterService2.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+OrchestratorNoRule;<Request ID="2,213" Action="CREATE"><FB Name="RegisterService2.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+OrchestratorNoRule;<Request ID="2,214" Action="CREATE"><FB Name="RegisterService2.RegisterService" Type="RegisterService" /></Request>
+OrchestratorNoRule;<Request ID="2,215" Action="CREATE"><FB Name="RegisterService2.E_SR" Type="E_SR" /></Request>
+OrchestratorNoRule;<Request ID="2,216" Action="CREATE"><FB Name="RegisterService2.E_SWITCH" Type="E_SWITCH" /></Request>
+OrchestratorNoRule;<Request ID="2,217" Action="CREATE"><FB Name="RegisterService2.E_REND" Type="E_REND" /></Request>
+OrchestratorNoRule;<Request ID="2,218" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+OrchestratorNoRule;<Request ID="2,219" Action="WRITE"><Connection Source="test6Ended" Destination="SUBL_0.ID" /></Request>
+OrchestratorNoRule;<Request ID="2,220" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+OrchestratorNoRule;<Request ID="2,221" Action="WRITE"><Connection Source="WSTRING#test7Ended" Destination="PUBL_0.ID" /></Request>
+OrchestratorNoRule;<Request ID="2,222" Action="CREATE"><FB Name="GET_STRUCT_VALUE1" Type="GET_AT_INDEX" /></Request>
+OrchestratorNoRule;<Request ID="2,223" Action="WRITE"><Connection Source="0" Destination="GET_STRUCT_VALUE1.INDEX" /></Request>
+OrchestratorNoRule;<Request ID="2,224" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX" Type="E_DEMUX" /></Request>
+OrchestratorNoRule;<Request ID="2,225" Action="CREATE"><FB Name="Sequencer_1.E_CTU" Type="E_CTU" /></Request>
+OrchestratorNoRule;<Request ID="2,226" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX_1" Type="E_DEMUX" /></Request>
+OrchestratorNoRule;<Request ID="2,227" Action="CREATE"><FB Name="Sequencer_1.E_SWITCH" Type="E_SWITCH" /></Request>
+OrchestratorNoRule;<Request ID="2,228" Action="CREATE"><FB Name="Sequencer_1.F_GT" Type="F_GT" /></Request>
+OrchestratorNoRule;<Request ID="2,229" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer_1.F_GT.IN2" /></Request>
+OrchestratorNoRule;<Request ID="2,230" Action="CREATE"><FB Name="Sequencer_1.F_SUB" Type="F_SUB" /></Request>
+OrchestratorNoRule;<Request ID="2,231" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer_1.F_SUB.IN2" /></Request>
+OrchestratorNoRule;<Request ID="2,232" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX_1_1" Type="E_DEMUX" /></Request>
+OrchestratorNoRule;<Request ID="2,233" Action="CREATE"><FB Name="Sequencer_1.F_GT_1" Type="F_GT" /></Request>
+OrchestratorNoRule;<Request ID="2,234" Action="WRITE"><Connection Source="INT#7" Destination="Sequencer_1.F_GT_1.IN2" /></Request>
+OrchestratorNoRule;<Request ID="2,235" Action="CREATE"><FB Name="Sequencer_1.F_SUB_1" Type="F_SUB" /></Request>
+OrchestratorNoRule;<Request ID="2,236" Action="WRITE"><Connection Source="INT#8" Destination="Sequencer_1.F_SUB_1.IN2" /></Request>
+OrchestratorNoRule;<Request ID="2,237" Action="CREATE"><FB Name="Sequencer_1.E_SWITCH_1" Type="E_SWITCH" /></Request>
+OrchestratorNoRule;<Request ID="2,238" Action="CREATE"><FB Name="RequestOrchestrationForm" Type="RequestOrchestrationForm" /></Request>
+OrchestratorNoRule;<Request ID="2,239" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8440/orchestrator" Destination="RequestOrchestrationForm.endpoint" /></Request>
+OrchestratorNoRule;<Request ID="2,240" Action="WRITE"><Connection Source="/serviceTest/start2" Destination="RegisterService2.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+OrchestratorNoRule;<Request ID="2,241" Action="WRITE"><Connection Source="1" Destination="RegisterService2.FieldsToServiceRegistryEntry.version" /></Request>
+OrchestratorNoRule;<Request ID="2,242" Action="WRITE"><Connection Source="false" Destination="RegisterService2.FieldsToServiceRegistryEntry.udp" /></Request>
+OrchestratorNoRule;<Request ID="2,243" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2.FieldsToServiceRegistryEntry.metadata" /></Request>
+OrchestratorNoRule;<Request ID="2,244" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2.RegisterService.endpoint" /></Request>
+OrchestratorNoRule;<Request ID="2,245" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.DI2S.CNF" Destination="GetEndpointFromOrchestrationForm.WS2WS.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,246" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetPort.CNF" Destination="GetEndpointFromOrchestrationForm.GetURI.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,247" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.WS2WS.CNF" Destination="GetEndpointFromOrchestrationForm.IpPort.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,248" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetAddress.CNF" Destination="GetEndpointFromOrchestrationForm.GetPort.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,249" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.S2WS.CNF" Destination="F_EQ.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,250" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.CNF" Destination="GetEndpointFromOrchestrationForm.GetAddress.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,251" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetURI.CNF" Destination="GetEndpointFromOrchestrationForm.WS2WS_1.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,252" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.WS2WS_1.CNF" Destination="GetEndpointFromOrchestrationForm.DI2S.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,253" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.IpPort.CNF" Destination="GetEndpointFromOrchestrationForm.IpPortURI.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,254" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.IpPortURI.CNF" Destination="GetEndpointFromOrchestrationForm.S2WS.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,255" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.DI2S.OUT" Destination="GetEndpointFromOrchestrationForm.IpPort.IN_3" /></Request>
+OrchestratorNoRule;<Request ID="2,256" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.WS2WS.OUT" Destination="GetEndpointFromOrchestrationForm.IpPort.IN_1" /></Request>
+OrchestratorNoRule;<Request ID="2,257" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetPort.output" Destination="GetEndpointFromOrchestrationForm.DI2S.IN" /></Request>
+OrchestratorNoRule;<Request ID="2,258" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetAddress.output" Destination="GetEndpointFromOrchestrationForm.WS2WS.IN" /></Request>
+OrchestratorNoRule;<Request ID="2,259" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+OrchestratorNoRule;<Request ID="2,260" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationForm.GetAddress.in_struct" /></Request>
+OrchestratorNoRule;<Request ID="2,261" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationForm.GetPort.in_struct" /></Request>
+OrchestratorNoRule;<Request ID="2,262" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationForm.GetURI.in_struct" /></Request>
+OrchestratorNoRule;<Request ID="2,263" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.GetURI.output" Destination="GetEndpointFromOrchestrationForm.WS2WS_1.IN" /></Request>
+OrchestratorNoRule;<Request ID="2,264" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.IpPort.OUT" Destination="GetEndpointFromOrchestrationForm.IpPortURI.IN_1" /></Request>
+OrchestratorNoRule;<Request ID="2,265" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.IpPortURI.OUT" Destination="GetEndpointFromOrchestrationForm.S2WS.IN" /></Request>
+OrchestratorNoRule;<Request ID="2,266" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationForm.WS2WS_1.OUT" Destination="GetEndpointFromOrchestrationForm.IpPortURI.IN_2" /></Request>
+OrchestratorNoRule;<Request ID="2,267" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneRegister" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,268" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,269" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO1" Destination="RegisterService2.RegisterService.register" /></Request>
+OrchestratorNoRule;<Request ID="2,270" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO0" Destination="RegisterService2.RegisterService.unregister" /></Request>
+OrchestratorNoRule;<Request ID="2,271" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2.E_REND.EI2" /></Request>
+OrchestratorNoRule;<Request ID="2,272" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_SWITCH.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,273" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_REND.R" /></Request>
+OrchestratorNoRule;<Request ID="2,274" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2.RegisterService.serviceRegistryEntry" /></Request>
+OrchestratorNoRule;<Request ID="2,275" Action="CREATE"><Connection Source="RegisterService2.E_SR.Q" Destination="RegisterService2.E_SWITCH.G" /></Request>
+OrchestratorNoRule;<Request ID="2,276" Action="CREATE"><Connection Source="RegisterService2.RegisterService.registerService" Destination="RegisterService2.RegisterServiceHTTP_1.registerService" /></Request>
+OrchestratorNoRule;<Request ID="2,277" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO0" Destination="RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestratorNoRule;<Request ID="2,278" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="RegisterService2.E_SR.S" /></Request>
+OrchestratorNoRule;<Request ID="2,279" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,280" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="RegisterService2.E_REND.EI1" /></Request>
+OrchestratorNoRule;<Request ID="2,281" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestratorNoRule;<Request ID="2,282" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO3" Destination="E_SR.S" /></Request>
+OrchestratorNoRule;<Request ID="2,283" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO0" Destination="RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestratorNoRule;<Request ID="2,284" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO1" Destination="E_SR.R" /></Request>
+OrchestratorNoRule;<Request ID="2,285" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO2" Destination="RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestratorNoRule;<Request ID="2,286" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="E_SR.S" /></Request>
+OrchestratorNoRule;<Request ID="2,287" Action="CREATE"><Connection Source="Sequencer_1.F_GT.CNF" Destination="Sequencer_1.E_SWITCH.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,288" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH.EO0" Destination="Sequencer_1.E_DEMUX.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,289" Action="CREATE"><Connection Source="Sequencer_1.F_SUB.CNF" Destination="Sequencer_1.E_DEMUX_1.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,290" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH.EO1" Destination="Sequencer_1.F_GT_1.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,291" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1.CNF" Destination="Sequencer_1.E_SWITCH_1.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,292" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1.EO0" Destination="Sequencer_1.F_SUB.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,293" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1.EO1" Destination="Sequencer_1.F_SUB_1.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,294" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1.CNF" Destination="Sequencer_1.E_DEMUX_1_1.EI" /></Request>
+OrchestratorNoRule;<Request ID="2,295" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="RegisterService2.E_SR.R" /></Request>
+OrchestratorNoRule;<Request ID="2,296" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,297" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="RegisterService2.E_REND.EI1" /></Request>
+OrchestratorNoRule;<Request ID="2,298" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO1" Destination="RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestratorNoRule;<Request ID="2,299" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO2" Destination="E_SR.R" /></Request>
+OrchestratorNoRule;<Request ID="2,300" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO3" Destination="PUBL_0.INIT" /></Request>
+OrchestratorNoRule;<Request ID="2,301" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO3" Destination="Sequencer_1.E_CTU.R" /></Request>
+OrchestratorNoRule;<Request ID="2,302" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,303" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,304" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,305" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,306" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,307" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,308" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,309" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,310" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,311" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,312" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestratorNoRule;<Request ID="2,313" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.E_DEMUX.K" /></Request>
+OrchestratorNoRule;<Request ID="2,314" Action="CREATE"><Connection Source="Sequencer_1.F_GT.OUT" Destination="Sequencer_1.E_SWITCH.G" /></Request>
+OrchestratorNoRule;<Request ID="2,315" Action="CREATE"><Connection Source="Sequencer_1.F_SUB.OUT" Destination="Sequencer_1.E_DEMUX_1.K" /></Request>
+OrchestratorNoRule;<Request ID="2,316" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_GT.IN1" /></Request>
+OrchestratorNoRule;<Request ID="2,317" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_SUB.IN1" /></Request>
+OrchestratorNoRule;<Request ID="2,318" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_SUB_1.IN1" /></Request>
+OrchestratorNoRule;<Request ID="2,319" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_GT_1.IN1" /></Request>
+OrchestratorNoRule;<Request ID="2,320" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1.OUT" Destination="Sequencer_1.E_SWITCH_1.G" /></Request>
+OrchestratorNoRule;<Request ID="2,321" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1.OUT" Destination="Sequencer_1.E_DEMUX_1_1.K" /></Request>
+OrchestratorNoRule;<Request ID="2,322" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="Service1.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,323" Action="CREATE"><Connection Source="Service1.CNF" Destination="FieldsToServiceRequestForm.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,324" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="NoServiceAvailable.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,325" Action="CREATE"><Connection Source="E_SR.EO" Destination="SERVER_1.INIT" /></Request>
+OrchestratorNoRule;<Request ID="2,326" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,327" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,328" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+OrchestratorNoRule;<Request ID="2,329" Action="CREATE"><Connection Source="GET_STRUCT_VALUE1.CNF" Destination="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,330" Action="CREATE"><Connection Source="NoServiceAvailable.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,331" Action="CREATE"><Connection Source="FieldsToServiceRequestForm.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,332" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+OrchestratorNoRule;<Request ID="2,333" Action="CREATE"><Connection Source="SERVER_1.INITO" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,334" Action="CREATE"><Connection Source="RequestOrchestrationForm.responseReceived" Destination="GET_STRUCT_VALUE1.REQ" /></Request>
+OrchestratorNoRule;<Request ID="2,335" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="FieldsToServiceRequestForm.requesterSystem" /></Request>
+OrchestratorNoRule;<Request ID="2,336" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="FieldsToServiceRequestForm.requestedService" /></Request>
+OrchestratorNoRule;<Request ID="2,337" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="NoServiceAvailable.check" /></Request>
+OrchestratorNoRule;<Request ID="2,338" Action="CREATE"><Connection Source="E_SR.Q" Destination="SERVER_1.QI" /></Request>
+OrchestratorNoRule;<Request ID="2,339" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="RegisterService2.FieldsToServiceRegistryEntry.providedService" /></Request>
+OrchestratorNoRule;<Request ID="2,340" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService2.FieldsToServiceRegistryEntry.provider" /></Request>
+OrchestratorNoRule;<Request ID="2,341" Action="CREATE"><Connection Source="GET_STRUCT_VALUE1.OUT" Destination="GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.IN" /></Request>
+OrchestratorNoRule;<Request ID="2,342" Action="CREATE"><Connection Source="FieldsToServiceRequestForm.serviceRequestForm" Destination="RequestOrchestrationForm.serviceRequestForm" /></Request>
+OrchestratorNoRule;<Request ID="2,343" Action="CREATE"><Connection Source="RequestOrchestrationForm.orchestrationResponse" Destination="GET_STRUCT_VALUE1.IN_ARRAY" /></Request>
+OrchestratorNoRule;<Request ID="2,344" Action="CREATE"><Connection Source="RequestOrchestrationForm.requestOrchestration" Destination="RequestOrchestrationHTTP.requestOrchestration" /></Request>
+OrchestratorNoRule;<Request ID="2,345" Action="START"/>
+;<Request ID="2,346" Action="CREATE"><FB Name="OrchestrationWithRules" Type="EMB_RES" /></Request>
+OrchestrationWithRules;<Request ID="2,347" Action="CREATE"><FB Name="FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+OrchestrationWithRules;<Request ID="2,348" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="FieldsToArrowheadSystem.systemName" /></Request>
+OrchestrationWithRules;<Request ID="2,349" Action="WRITE"><Connection Source="localhost" Destination="FieldsToArrowheadSystem.address" /></Request>
+OrchestrationWithRules;<Request ID="2,350" Action="WRITE"><Connection Source="8090" Destination="FieldsToArrowheadSystem.port" /></Request>
+OrchestrationWithRules;<Request ID="2,351" Action="CREATE"><FB Name="Service1" Type="FieldsToArrowheadService" /></Request>
+OrchestrationWithRules;<Request ID="2,352" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="Service1.serviceDefinition" /></Request>
+OrchestrationWithRules;<Request ID="2,353" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="Service1.interfaces" /></Request>
+OrchestrationWithRules;<Request ID="2,354" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="Service1.serviceMetadata" /></Request>
+OrchestrationWithRules;<Request ID="2,355" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+OrchestrationWithRules;<Request ID="2,356" Action="WRITE"><Connection Source="WSTRING#:0" Destination="F_EQ.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,357" Action="CREATE"><FB Name="NoServiceAvailable" Type="TEST_CONDITION" /></Request>
+OrchestrationWithRules;<Request ID="2,358" Action="CREATE"><FB Name="SERVER_1" Type="SERVER_1" /></Request>
+OrchestrationWithRules;<Request ID="2,359" Action="WRITE"><Connection Source="http[/serviceTest/start]" Destination="SERVER_1.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,360" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+OrchestrationWithRules;<Request ID="2,361" Action="CREATE"><FB Name="RegisterService2.FieldsToServiceRegistryEntry" Type="FieldsToServiceRegistryEntry" /></Request>
+OrchestrationWithRules;<Request ID="2,362" Action="CREATE"><FB Name="RegisterService2.RegisterServiceHTTP_1" Type="RegisterServiceHTTP" /></Request>
+OrchestrationWithRules;<Request ID="2,363" Action="CREATE"><FB Name="RegisterService2.RegisterService" Type="RegisterService" /></Request>
+OrchestrationWithRules;<Request ID="2,364" Action="CREATE"><FB Name="RegisterService2.E_SR" Type="E_SR" /></Request>
+OrchestrationWithRules;<Request ID="2,365" Action="CREATE"><FB Name="RegisterService2.E_SWITCH" Type="E_SWITCH" /></Request>
+OrchestrationWithRules;<Request ID="2,366" Action="CREATE"><FB Name="RegisterService2.E_REND" Type="E_REND" /></Request>
+OrchestrationWithRules;<Request ID="2,367" Action="CREATE"><FB Name="SUBL_0" Type="SUBL_0" /></Request>
+OrchestrationWithRules;<Request ID="2,368" Action="WRITE"><Connection Source="WSTRING#test7Ended" Destination="SUBL_0.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,369" Action="CREATE"><FB Name="PUBL_0" Type="PUBL_0" /></Request>
+OrchestrationWithRules;<Request ID="2,370" Action="WRITE"><Connection Source="WSTRIGN#allEnded" Destination="PUBL_0.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,371" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX" Type="E_DEMUX" /></Request>
+OrchestrationWithRules;<Request ID="2,372" Action="CREATE"><FB Name="Sequencer_1.E_CTU" Type="E_CTU" /></Request>
+OrchestrationWithRules;<Request ID="2,373" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX_1" Type="E_DEMUX" /></Request>
+OrchestrationWithRules;<Request ID="2,374" Action="CREATE"><FB Name="Sequencer_1.E_SWITCH" Type="E_SWITCH" /></Request>
+OrchestrationWithRules;<Request ID="2,375" Action="CREATE"><FB Name="Sequencer_1.F_GT" Type="F_GT" /></Request>
+OrchestrationWithRules;<Request ID="2,376" Action="WRITE"><Connection Source="INT#3" Destination="Sequencer_1.F_GT.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,377" Action="CREATE"><FB Name="Sequencer_1.F_SUB" Type="F_SUB" /></Request>
+OrchestrationWithRules;<Request ID="2,378" Action="WRITE"><Connection Source="INT#4" Destination="Sequencer_1.F_SUB.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,379" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX_1_1" Type="E_DEMUX" /></Request>
+OrchestrationWithRules;<Request ID="2,380" Action="CREATE"><FB Name="Sequencer_1.F_GT_1" Type="F_GT" /></Request>
+OrchestrationWithRules;<Request ID="2,381" Action="WRITE"><Connection Source="INT#7" Destination="Sequencer_1.F_GT_1.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,382" Action="CREATE"><FB Name="Sequencer_1.F_SUB_1" Type="F_SUB" /></Request>
+OrchestrationWithRules;<Request ID="2,383" Action="WRITE"><Connection Source="INT#8" Destination="Sequencer_1.F_SUB_1.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,384" Action="CREATE"><FB Name="Sequencer_1.E_SWITCH_1" Type="E_SWITCH" /></Request>
+OrchestrationWithRules;<Request ID="2,385" Action="CREATE"><FB Name="Sequencer_1.F_GT_1_1" Type="F_GT" /></Request>
+OrchestrationWithRules;<Request ID="2,386" Action="WRITE"><Connection Source="INT#11" Destination="Sequencer_1.F_GT_1_1.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,387" Action="CREATE"><FB Name="Sequencer_1.E_SWITCH_1_1" Type="E_SWITCH" /></Request>
+OrchestrationWithRules;<Request ID="2,388" Action="CREATE"><FB Name="Sequencer_1.E_DEMUX_1_1_1" Type="E_DEMUX" /></Request>
+OrchestrationWithRules;<Request ID="2,389" Action="CREATE"><FB Name="Sequencer_1.F_SUB_1_1" Type="F_SUB" /></Request>
+OrchestrationWithRules;<Request ID="2,390" Action="WRITE"><Connection Source="INT#12" Destination="Sequencer_1.F_SUB_1_1.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,391" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+OrchestrationWithRules;<Request ID="2,392" Action="WRITE"><Connection Source="WSTRING#localhost:8090/serviceTest/start" Destination="F_EQ_1.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,393" Action="CREATE"><FB Name="ServiceAvailable" Type="TEST_CONDITION" /></Request>
+OrchestrationWithRules;<Request ID="2,394" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+OrchestrationWithRules;<Request ID="2,395" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+OrchestrationWithRules;<Request ID="2,396" Action="CREATE"><FB Name="CLIENT_1_2" Type="CLIENT_1_2" /></Request>
+OrchestrationWithRules;<Request ID="2,397" Action="WRITE"><Connection Source="1" Destination="CLIENT_1_2.QI" /></Request>
+OrchestrationWithRules;<Request ID="2,398" Action="WRITE"><Connection Source="http[127.0.0.1:8444/authorization/mgmt/intracloud; POST; application/json]]" Destination="CLIENT_1_2.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,399" Action="WRITE"><Connection Source="STRING#{"consumer": {"systemName" : "systemTestName","address" : "localhost","port" : 8090},"providerList": [{"systemName" : "systemTestName","address" : "localhost","port" : 8090}],"serviceList": [{"serviceDefinition" : "serviceTest"}]}" Destination="CLIENT_1_2.SD_1" /></Request>
+OrchestrationWithRules;<Request ID="2,400" Action="CREATE"><FB Name="CLIENT_1_2_1" Type="CLIENT_1_2" /></Request>
+OrchestrationWithRules;<Request ID="2,401" Action="WRITE"><Connection Source="1" Destination="CLIENT_1_2_1.QI" /></Request>
+OrchestrationWithRules;<Request ID="2,402" Action="WRITE"><Connection Source="http[127.0.0.1:8440/orchestrator/mgmt/store; POST; application/json]]" Destination="CLIENT_1_2_1.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,403" Action="WRITE"><Connection Source="STRING#[{"service" : {"serviceDefinition" : "serviceTest","interfaces" : [ "XML", "JSON"],"serviceMetadata" : { "key1" : "value1", "key2" : "value2"}},"consumer" : {"systemName" : "systemTestName","address" :"localhost","port" : 8090, "authenticationInfo" : ""},"providerSystem" : {"systemName" : "systemTestName","address" : "localhost","port" : 8090,"authenticationInfo" : ""},"priority" : 1,"defaultEntry" : true,"name" : "","lastUpdated" : "","instruction" : "","attributes" : { },"serviceURI" : "serviceTest/start"} ]" Destination="CLIENT_1_2_1.SD_1" /></Request>
+OrchestrationWithRules;<Request ID="2,404" Action="CREATE"><FB Name="STRING2STRING" Type="STRING2STRING" /></Request>
+OrchestrationWithRules;<Request ID="2,405" Action="CREATE"><FB Name="PUBL_0_1" Type="PUBL_0" /></Request>
+OrchestrationWithRules;<Request ID="2,406" Action="WRITE"><Connection Source="WSTRING#allLoaded" Destination="PUBL_0_1.ID" /></Request>
+OrchestrationWithRules;<Request ID="2,407" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX" Type="GET_AT_INDEX" /></Request>
+OrchestrationWithRules;<Request ID="2,408" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS" Type="F_STRING_TO_WSTRING" /></Request>
+OrchestrationWithRules;<Request ID="2,409" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS" Type="WSTRING2WSTRING" /></Request>
+OrchestrationWithRules;<Request ID="2,410" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.DI2S" Type="F_DINT_TO_STRING" /></Request>
+OrchestrationWithRules;<Request ID="2,411" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress" Type="GET_STRUCT_VALUE" /></Request>
+OrchestrationWithRules;<Request ID="2,412" Action="WRITE"><Connection Source="STRING#provider.address" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress.member" /></Request>
+OrchestrationWithRules;<Request ID="2,413" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort" Type="GET_STRUCT_VALUE" /></Request>
+OrchestrationWithRules;<Request ID="2,414" Action="WRITE"><Connection Source="STRING#provider.port" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort.member" /></Request>
+OrchestrationWithRules;<Request ID="2,415" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI" Type="GET_STRUCT_VALUE" /></Request>
+OrchestrationWithRules;<Request ID="2,416" Action="WRITE"><Connection Source="STRING#serviceURI" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI.member" /></Request>
+OrchestrationWithRules;<Request ID="2,417" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort" Type="APPEND_STRING_3" /></Request>
+OrchestrationWithRules;<Request ID="2,418" Action="WRITE"><Connection Source="STRING#:" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.IN_2" /></Request>
+OrchestrationWithRules;<Request ID="2,419" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm" Type="OrchestrationForm2OrchestrationForm" /></Request>
+OrchestrationWithRules;<Request ID="2,420" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS_1" Type="WSTRING2WSTRING" /></Request>
+OrchestrationWithRules;<Request ID="2,421" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI" Type="APPEND_STRING_2" /></Request>
+OrchestrationWithRules;<Request ID="2,422" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadCloud" Type="FieldsToArrowheadCloud" /></Request>
+OrchestrationWithRules;<Request ID="2,423" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem" Type="FieldsToArrowheadSystem" /></Request>
+OrchestrationWithRules;<Request ID="2,424" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationHTTP" Type="RequestOrchestrationHTTP" /></Request>
+OrchestrationWithRules;<Request ID="2,425" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm" Type="FieldsToServiceRequestForm" /></Request>
+OrchestrationWithRules;<Request ID="2,426" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService" Type="FieldsToArrowheadService" /></Request>
+OrchestrationWithRules;<Request ID="2,427" Action="CREATE"><FB Name="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm" Type="RequestOrchestrationForm" /></Request>
+OrchestrationWithRules;<Request ID="2,428" Action="WRITE"><Connection Source="/serviceTest/start" Destination="RegisterService2.FieldsToServiceRegistryEntry.serviceURI" /></Request>
+OrchestrationWithRules;<Request ID="2,429" Action="WRITE"><Connection Source="1" Destination="RegisterService2.FieldsToServiceRegistryEntry.version" /></Request>
+OrchestrationWithRules;<Request ID="2,430" Action="WRITE"><Connection Source="false" Destination="RegisterService2.FieldsToServiceRegistryEntry.udp" /></Request>
+OrchestrationWithRules;<Request ID="2,431" Action="WRITE"><Connection Source=""key1=value1, key2=value2"" Destination="RegisterService2.FieldsToServiceRegistryEntry.metadata" /></Request>
+OrchestrationWithRules;<Request ID="2,432" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8442/serviceregistry" Destination="RegisterService2.RegisterService.endpoint" /></Request>
+OrchestrationWithRules;<Request ID="2,433" Action="WRITE"><Connection Source="WSTRING#systemTestName" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.systemName" /></Request>
+OrchestrationWithRules;<Request ID="2,434" Action="WRITE"><Connection Source="localhost" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.address" /></Request>
+OrchestrationWithRules;<Request ID="2,435" Action="WRITE"><Connection Source="8090" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.port" /></Request>
+OrchestrationWithRules;<Request ID="2,436" Action="WRITE"><Connection Source="WSTRING#serviceTest" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.serviceDefinition" /></Request>
+OrchestrationWithRules;<Request ID="2,437" Action="WRITE"><Connection Source="["JSON", "XML"]" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.interfaces" /></Request>
+OrchestrationWithRules;<Request ID="2,438" Action="WRITE"><Connection Source="["key1=value1", "key2=value2"]" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.serviceMetadata" /></Request>
+OrchestrationWithRules;<Request ID="2,439" Action="WRITE"><Connection Source="WSTRING#127.0.0.1:8440/orchestrator" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.endpoint" /></Request>
+OrchestrationWithRules;<Request ID="2,440" Action="WRITE"><Connection Source="0" Destination="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX.INDEX" /></Request>
+OrchestrationWithRules;<Request ID="2,441" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneRegister" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,442" Action="CREATE"><Connection Source="RegisterService2.RegisterService.doneUnregister" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,443" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO1" Destination="RegisterService2.RegisterService.register" /></Request>
+OrchestrationWithRules;<Request ID="2,444" Action="CREATE"><Connection Source="RegisterService2.E_SWITCH.EO0" Destination="RegisterService2.RegisterService.unregister" /></Request>
+OrchestrationWithRules;<Request ID="2,445" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.CNF" Destination="RegisterService2.E_REND.EI2" /></Request>
+OrchestrationWithRules;<Request ID="2,446" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_SWITCH.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,447" Action="CREATE"><Connection Source="RegisterService2.E_REND.EO" Destination="RegisterService2.E_REND.R" /></Request>
+OrchestrationWithRules;<Request ID="2,448" Action="CREATE"><Connection Source="RegisterService2.FieldsToServiceRegistryEntry.serviceRegistryEntry" Destination="RegisterService2.RegisterService.serviceRegistryEntry" /></Request>
+OrchestrationWithRules;<Request ID="2,449" Action="CREATE"><Connection Source="RegisterService2.E_SR.Q" Destination="RegisterService2.E_SWITCH.G" /></Request>
+OrchestrationWithRules;<Request ID="2,450" Action="CREATE"><Connection Source="RegisterService2.RegisterService.registerService" Destination="RegisterService2.RegisterServiceHTTP_1.registerService" /></Request>
+OrchestrationWithRules;<Request ID="2,451" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO0" Destination="CLIENT_1_2.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,452" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,453" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="RegisterService2.E_SR.S" /></Request>
+OrchestrationWithRules;<Request ID="2,454" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,455" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="RegisterService2.E_REND.EI1" /></Request>
+OrchestrationWithRules;<Request ID="2,456" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO3" Destination="E_SR_1.S" /></Request>
+OrchestrationWithRules;<Request ID="2,457" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO0" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,458" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO1" Destination="E_SR.S" /></Request>
+OrchestrationWithRules;<Request ID="2,459" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO2" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,460" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="RegisterService2.E_SR.R" /></Request>
+OrchestrationWithRules;<Request ID="2,461" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="RegisterService2.FieldsToServiceRegistryEntry.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,462" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="RegisterService2.E_REND.EI1" /></Request>
+OrchestrationWithRules;<Request ID="2,463" Action="CREATE"><Connection Source="Sequencer_1.F_GT.CNF" Destination="Sequencer_1.E_SWITCH.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,464" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH.EO0" Destination="Sequencer_1.E_DEMUX.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,465" Action="CREATE"><Connection Source="Sequencer_1.F_SUB.CNF" Destination="Sequencer_1.E_DEMUX_1.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,466" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH.EO1" Destination="Sequencer_1.F_GT_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,467" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1.CNF" Destination="Sequencer_1.E_SWITCH_1.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,468" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1.EO0" Destination="Sequencer_1.F_SUB.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,469" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1.CNF" Destination="Sequencer_1.E_DEMUX_1_1.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,470" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="E_SR_1.R" /></Request>
+OrchestrationWithRules;<Request ID="2,471" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO1" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,472" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO2" Destination="E_SR.R" /></Request>
+OrchestrationWithRules;<Request ID="2,473" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,474" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,475" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,476" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,477" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,478" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,479" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,480" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,481" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,482" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,483" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,484" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1_1.CNF" Destination="Sequencer_1.E_SWITCH_1_1.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,485" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1_1.CNF" Destination="Sequencer_1.E_DEMUX_1_1_1.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,486" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO0" Destination="PUBL_0.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,487" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1.EO1" Destination="Sequencer_1.F_GT_1_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,488" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1_1.EO0" Destination="Sequencer_1.F_SUB_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,489" Action="CREATE"><Connection Source="Sequencer_1.E_SWITCH_1_1.EO1" Destination="Sequencer_1.F_SUB_1_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,490" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO3" Destination="Sequencer_1.E_CTU.R" /></Request>
+OrchestrationWithRules;<Request ID="2,491" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO0" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,492" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO1" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,493" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO2" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,494" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1_1.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,495" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO3" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,496" Action="CREATE"><Connection Source="Sequencer_1.E_DEMUX_1_1.EO3" Destination="Sequencer_1.E_CTU.CU" /></Request>
+OrchestrationWithRules;<Request ID="2,497" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.E_DEMUX.K" /></Request>
+OrchestrationWithRules;<Request ID="2,498" Action="CREATE"><Connection Source="Sequencer_1.F_GT.OUT" Destination="Sequencer_1.E_SWITCH.G" /></Request>
+OrchestrationWithRules;<Request ID="2,499" Action="CREATE"><Connection Source="Sequencer_1.F_SUB.OUT" Destination="Sequencer_1.E_DEMUX_1.K" /></Request>
+OrchestrationWithRules;<Request ID="2,500" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_GT.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,501" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_SUB.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,502" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_SUB_1.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,503" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_GT_1.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,504" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1.OUT" Destination="Sequencer_1.E_SWITCH_1.G" /></Request>
+OrchestrationWithRules;<Request ID="2,505" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1.OUT" Destination="Sequencer_1.E_DEMUX_1_1.K" /></Request>
+OrchestrationWithRules;<Request ID="2,506" Action="CREATE"><Connection Source="Sequencer_1.F_GT_1_1.OUT" Destination="Sequencer_1.E_SWITCH_1_1.G" /></Request>
+OrchestrationWithRules;<Request ID="2,507" Action="CREATE"><Connection Source="Sequencer_1.F_SUB_1_1.OUT" Destination="Sequencer_1.E_DEMUX_1_1_1.K" /></Request>
+OrchestrationWithRules;<Request ID="2,508" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_SUB_1_1.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,509" Action="CREATE"><Connection Source="Sequencer_1.E_CTU.CV" Destination="Sequencer_1.F_GT_1_1.IN1" /></Request>
+OrchestrationWithRules;<Request ID="2,510" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.DI2S.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,511" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,512" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,513" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,514" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS.CNF" Destination="E_SWITCH.EI" /></Request>
+OrchestrationWithRules;<Request ID="2,515" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,516" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,517" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS_1.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.DI2S.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,518" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,519" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,520" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.DI2S.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.IN_3" /></Request>
+OrchestrationWithRules;<Request ID="2,521" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.IN_1" /></Request>
+OrchestrationWithRules;<Request ID="2,522" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort.output" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.DI2S.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,523" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress.output" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,524" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS.OUT" Destination="F_EQ_1.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,525" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS.OUT" Destination="F_EQ.IN2" /></Request>
+OrchestrationWithRules;<Request ID="2,526" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetAddress.in_struct" /></Request>
+OrchestrationWithRules;<Request ID="2,527" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetPort.in_struct" /></Request>
+OrchestrationWithRules;<Request ID="2,528" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI.in_struct" /></Request>
+OrchestrationWithRules;<Request ID="2,529" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.GetURI.output" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS_1.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,530" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPort.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI.IN_1" /></Request>
+OrchestrationWithRules;<Request ID="2,531" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.S2WS.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,532" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.WS2WS_1.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.IpPortURI.IN_2" /></Request>
+OrchestrationWithRules;<Request ID="2,533" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,534" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.requestOrchestator" /></Request>
+OrchestrationWithRules;<Request ID="2,535" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.responseReceived" Destination="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,536" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.arrowheadService" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.requestedService" /></Request>
+OrchestrationWithRules;<Request ID="2,537" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.serviceRequestForm" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.serviceRequestForm" /></Request>
+OrchestrationWithRules;<Request ID="2,538" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.orchestrationResponse" Destination="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX.IN_ARRAY" /></Request>
+OrchestrationWithRules;<Request ID="2,539" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationForm.requestOrchestration" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.RequestOrchestrationHTTP.requestOrchestration" /></Request>
+OrchestrationWithRules;<Request ID="2,540" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadCloud.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,541" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadCloud.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToArrowheadService.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,542" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadSystem.arrowheadSystem" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.requesterSystem" /></Request>
+OrchestrationWithRules;<Request ID="2,543" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.FieldsToArrowheadCloud.arrowheadCloud" Destination="GetEndpointFromOrchestrationHTTPPFull.RequestOrchestrationHTTPPFull.RequestOrchestrationHTTPPartial.FieldsToServiceRequestForm.requesterCloud" /></Request>
+OrchestrationWithRules;<Request ID="2,544" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX.CNF" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,545" Action="CREATE"><Connection Source="GetEndpointFromOrchestrationHTTPPFull.GET_AT_INDEX.OUT" Destination="GetEndpointFromOrchestrationHTTPPFull.GetEndpointFromOrchestrationForm.OrchestrationForm2OrchestrationForm.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,546" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.CNF" Destination="Service1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,547" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="NoServiceAvailable.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,548" Action="CREATE"><Connection Source="E_SR.EO" Destination="SERVER_1.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,549" Action="CREATE"><Connection Source="SUBL_0.IND" Destination="FieldsToArrowheadSystem.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,550" Action="CREATE"><Connection Source="PUBL_0.INITO" Destination="PUBL_0.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,551" Action="CREATE"><Connection Source="NoServiceAvailable.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,552" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="ServiceAvailable.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,553" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="F_EQ.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,554" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="F_EQ_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,555" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,556" Action="CREATE"><Connection Source="START.WARM" Destination="SUBL_0.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,557" Action="CREATE"><Connection Source="SERVER_1.INITO" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,558" Action="CREATE"><Connection Source="CLIENT_1_2.INITO" Destination="CLIENT_1_2.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,559" Action="CREATE"><Connection Source="CLIENT_1_2.CNF" Destination="CLIENT_1_2_1.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,560" Action="CREATE"><Connection Source="CLIENT_1_2_1.INITO" Destination="CLIENT_1_2_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,561" Action="CREATE"><Connection Source="CLIENT_1_2_1.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,562" Action="CREATE"><Connection Source="SERVER_1.IND" Destination="STRING2STRING.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,563" Action="CREATE"><Connection Source="STRING2STRING.CNF" Destination="SERVER_1.RSP" /></Request>
+OrchestrationWithRules;<Request ID="2,564" Action="CREATE"><Connection Source="ServiceAvailable.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,565" Action="CREATE"><Connection Source="START.COLD" Destination="SUBL_0.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,566" Action="CREATE"><Connection Source="Service1.CNF" Destination="Sequencer_1.F_GT.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,567" Action="CREATE"><Connection Source="SUBL_0.INITO" Destination="PUBL_0_1.INIT" /></Request>
+OrchestrationWithRules;<Request ID="2,568" Action="CREATE"><Connection Source="PUBL_0_1.INITO" Destination="PUBL_0_1.REQ" /></Request>
+OrchestrationWithRules;<Request ID="2,569" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="NoServiceAvailable.check" /></Request>
+OrchestrationWithRules;<Request ID="2,570" Action="CREATE"><Connection Source="E_SR.Q" Destination="SERVER_1.QI" /></Request>
+OrchestrationWithRules;<Request ID="2,571" Action="CREATE"><Connection Source="Service1.arrowheadService" Destination="RegisterService2.FieldsToServiceRegistryEntry.providedService" /></Request>
+OrchestrationWithRules;<Request ID="2,572" Action="CREATE"><Connection Source="FieldsToArrowheadSystem.arrowheadSystem" Destination="RegisterService2.FieldsToServiceRegistryEntry.provider" /></Request>
+OrchestrationWithRules;<Request ID="2,573" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="ServiceAvailable.check" /></Request>
+OrchestrationWithRules;<Request ID="2,574" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="E_SWITCH.G" /></Request>
+OrchestrationWithRules;<Request ID="2,575" Action="CREATE"><Connection Source="SERVER_1.RD_1" Destination="STRING2STRING.IN" /></Request>
+OrchestrationWithRules;<Request ID="2,576" Action="CREATE"><Connection Source="STRING2STRING.OUT" Destination="SERVER_1.SD_1" /></Request>
+OrchestrationWithRules;<Request ID="2,577" Action="START"/>
diff --git a/src/modules/arrowhead/SystemTests/CMakeLists.txt b/src/modules/arrowhead/SystemTests/CMakeLists.txt
new file mode 100644
index 0000000..02fac84
--- /dev/null
+++ b/src/modules/arrowhead/SystemTests/CMakeLists.txt
@@ -0,0 +1,25 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+SET(SOURCE_GROUP ${SOURCE_GROUP}\\systemtests)
+
+if(FORTE_SYSTEM_TESTS)
+
+ #test are soft because of the https://github.com/arrowhead-f/core-java/issues/34
+
+ if(FORTE_COM_HTTP)
+ forte_add_systemtest_soft(HTTPTests Arrowhead_HTTPTest.fboot 80)
+ endif(FORTE_COM_HTTP)
+
+ #after compilation, run "make CTEST_OUTPUT_ON_FAILURE=1 test" on the binary folder
+
+endif(FORTE_SYSTEM_TESTS)
\ No newline at end of file
diff --git a/src/modules/arrowhead/SystemTests/cleanIntracloudAndRules.sh b/src/modules/arrowhead/SystemTests/cleanIntracloudAndRules.sh
new file mode 100644
index 0000000..052acfe
--- /dev/null
+++ b/src/modules/arrowhead/SystemTests/cleanIntracloudAndRules.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+IP="127.0.0.1"
+
+if [ "${1}" != "" ]
+then
+ IP=${1}
+fi
+
+echo "Using ip ${IP}"
+
+ids=$(curl -X GET "http://${IP}:8444/authorization/mgmt/intracloud" -s | grep id\" | tr -s ' ' | cut -d ':' -f2 | cut -d ',' -f1)
+
+counter=0
+for i in $ids
+do
+ if ! (( ${counter} % 4 ))
+ then
+ echo "Deleting authorization intracloud entry with id=$i"
+ curl -X DELETE "http://${IP}:8444/authorization/mgmt/intracloud/$i" -H "accept: application/json"
+ fi
+ counter=$(( ${counter} + 1))
+done
+
+
+ids=$(curl -X GET "http://${IP}:8440/orchestrator/mgmt/store/all" -H "accept: application/json" -s | grep id\" | tr -s ' ' | cut -d ':' -f2 | cut -d ',' -f1)
+
+counter=0
+for i in $ids
+do
+
+ if (( ${counter} == 2 ))
+ then
+ echo "Deleting orchestration rule of consumer with id=$i"
+ curl -X DELETE "http://${IP}:8440/orchestrator/mgmt/store/consumerId/$i" -H "accept: application/json"
+ counter=$(( ${counter} + 1))
+ elif (( ${counter} == 3 ))
+ then
+ counter=0
+ else
+ counter=$(( ${counter} + 1))
+ fi
+done
+
diff --git a/src/modules/arrowhead/common/CMakeLists.txt b/src/modules/arrowhead/common/CMakeLists.txt
new file mode 100644
index 0000000..cf339e5
--- /dev/null
+++ b/src/modules/arrowhead/common/CMakeLists.txt
@@ -0,0 +1,26 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Common Arrowhead specific functional blocks
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+#datatype
+forte_add_sourcefile_hcpp(forte_arrowheadservice forte_arrowheadsystem forte_arrowheadcloud)
+
+#helper FBs
+forte_add_sourcefile_hcpp(FieldsToArrowheadService FieldsToArrowheadSystem FieldsToArrowheadCloud)
+
+add_subdirectory(JSON)
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadCloud.cpp b/src/modules/arrowhead/common/FieldsToArrowheadCloud.cpp
new file mode 100644
index 0000000..ffbeffd
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadCloud.cpp
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToArrowheadCloud.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToArrowheadCloud_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToArrowheadCloud, g_nStringIdFieldsToArrowheadCloud)
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anDataInputNames[] = {g_nStringIdOperator, g_nStringIdcloudName, g_nStringIdaddress, g_nStringIdport, g_nStringIdgatekeeperServiceURI, g_nStringIdauthenticationInfo, g_nStringIdsecure};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anDataInputTypeIds[] = {g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdDINT, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdBOOL};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anDataOutputNames[] = {g_nStringIdarrowheadCloud};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anDataOutputTypeIds[] = {g_nStringIdArrowheadCloud};
+
+const TForteInt16 FORTE_FieldsToArrowheadCloud::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToArrowheadCloud::scm_anEIWith[] = {0, 1, 2, 6, 5, 4, 3, 255};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToArrowheadCloud::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToArrowheadCloud::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadCloud::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToArrowheadCloud::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 7, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToArrowheadCloud::alg_REQ(void){
+arrowheadCloud().Operator() = Operator();
+arrowheadCloud().cloudName() = cloudName();
+arrowheadCloud().address() = address();
+arrowheadCloud().port() = port();
+arrowheadCloud().gatekeeperServiceURI() = gatekeeperServiceURI();
+arrowheadCloud().authenticationInfo() = authenticationInfo();
+arrowheadCloud().secure() = secure();
+
+
+
+
+
+}
+
+
+void FORTE_FieldsToArrowheadCloud::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToArrowheadCloud::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToArrowheadCloud::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadCloud.h b/src/modules/arrowhead/common/FieldsToArrowheadCloud.h
new file mode 100644
index 0000000..42438ff
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadCloud.h
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOARROWHEADCLOUD_H_
+#define _FIELDSTOARROWHEADCLOUD_H_
+
+#include <basicfb.h>
+#include <forte_bool.h>
+#include <forte_arrowheadcloud.h>
+#include <forte_dint.h>
+#include <forte_wstring.h>
+
+class FORTE_FieldsToArrowheadCloud: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToArrowheadCloud)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_WSTRING &Operator() {
+ return *static_cast<CIEC_WSTRING*>(getDI(0));
+ };
+
+ CIEC_WSTRING &cloudName() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_WSTRING &address() {
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_DINT &port() {
+ return *static_cast<CIEC_DINT*>(getDI(3));
+ };
+
+ CIEC_WSTRING &gatekeeperServiceURI() {
+ return *static_cast<CIEC_WSTRING*>(getDI(4));
+ };
+
+ CIEC_WSTRING &authenticationInfo() {
+ return *static_cast<CIEC_WSTRING*>(getDI(5));
+ };
+
+ CIEC_BOOL &secure() {
+ return *static_cast<CIEC_BOOL*>(getDI(6));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ArrowheadCloud &arrowheadCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 7, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToArrowheadCloud(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToArrowheadCloud(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadService.cpp b/src/modules/arrowhead/common/FieldsToArrowheadService.cpp
new file mode 100644
index 0000000..0c060f6
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadService.cpp
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToArrowheadService.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToArrowheadService_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToArrowheadService, g_nStringIdFieldsToArrowheadService)
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anDataInputNames[] = {g_nStringIdserviceDefinition, g_nStringIdinterfaces, g_nStringIdserviceMetadata};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anDataInputTypeIds[] = {g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anDataOutputNames[] = {g_nStringIdarrowheadService};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anDataOutputTypeIds[] = {g_nStringIdArrowheadService};
+
+const TForteInt16 FORTE_FieldsToArrowheadService::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToArrowheadService::scm_anEIWith[] = {0, 1, 2, 255};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToArrowheadService::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToArrowheadService::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadService::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToArrowheadService::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 3, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToArrowheadService::alg_REQ(void){
+CIEC_INT i;
+;
+
+i = 0;
+arrowheadService().serviceDefinition() = serviceDefinition();
+
+while((i < 10)){
+// looks like while is faster than FOR when exporting to cpp
+
+arrowheadService().interfaces()[i] = interfaces()[i];
+arrowheadService().serviceMetadata()[i] = serviceMetadata()[i];
+i = i+1;
+}
+
+}
+
+
+void FORTE_FieldsToArrowheadService::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToArrowheadService::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToArrowheadService::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadService.h b/src/modules/arrowhead/common/FieldsToArrowheadService.h
new file mode 100644
index 0000000..f7a3900
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadService.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOARROWHEADSERVICE_H_
+#define _FIELDSTOARROWHEADSERVICE_H_
+
+#include <basicfb.h>
+#include <forte_arrowheadservice.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+
+class FORTE_FieldsToArrowheadService: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToArrowheadService)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_WSTRING &serviceDefinition() {
+ return *static_cast<CIEC_WSTRING*>(getDI(0));
+ };
+
+ CIEC_WSTRING *interfaces() {
+ return (CIEC_WSTRING*)(*static_cast<CIEC_ARRAY *>(getDI(1)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &interfaces_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDI(1));
+ };
+
+ CIEC_WSTRING *serviceMetadata() {
+ return (CIEC_WSTRING*)(*static_cast<CIEC_ARRAY *>(getDI(2)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &serviceMetadata_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDI(2));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ArrowheadService &arrowheadService() {
+ return *static_cast<CIEC_ArrowheadService*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 3, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToArrowheadService(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToArrowheadService(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadSystem.cpp b/src/modules/arrowhead/common/FieldsToArrowheadSystem.cpp
new file mode 100644
index 0000000..d3dea5e
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadSystem.cpp
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToArrowheadSystem.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToArrowheadSystem_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToArrowheadSystem, g_nStringIdFieldsToArrowheadSystem)
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anDataInputNames[] = {g_nStringIdsystemName, g_nStringIdaddress, g_nStringIdport, g_nStringIdauthenticationInfo};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anDataInputTypeIds[] = {g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdDINT, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anDataOutputNames[] = {g_nStringIdarrowheadSystem};
+
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anDataOutputTypeIds[] = {g_nStringIdArrowheadSystem};
+
+const TForteInt16 FORTE_FieldsToArrowheadSystem::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToArrowheadSystem::scm_anEIWith[] = {3, 2, 1, 0, 255};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToArrowheadSystem::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToArrowheadSystem::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToArrowheadSystem::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToArrowheadSystem::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 4, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToArrowheadSystem::alg_REQ(void){
+arrowheadSystem().systemName() = systemName();
+arrowheadSystem().address() = address();
+arrowheadSystem().port() = port();
+arrowheadSystem().authenticationInfo() = authenticationInfo();
+
+}
+
+
+void FORTE_FieldsToArrowheadSystem::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToArrowheadSystem::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToArrowheadSystem::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/common/FieldsToArrowheadSystem.h b/src/modules/arrowhead/common/FieldsToArrowheadSystem.h
new file mode 100644
index 0000000..764c65e
--- /dev/null
+++ b/src/modules/arrowhead/common/FieldsToArrowheadSystem.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOARROWHEADSYSTEM_H_
+#define _FIELDSTOARROWHEADSYSTEM_H_
+
+#include <basicfb.h>
+#include <forte_arrowheadsystem.h>
+#include <forte_dint.h>
+#include <forte_wstring.h>
+
+class FORTE_FieldsToArrowheadSystem: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToArrowheadSystem)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_WSTRING &systemName() {
+ return *static_cast<CIEC_WSTRING*>(getDI(0));
+ };
+
+ CIEC_WSTRING &address() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_DINT &port() {
+ return *static_cast<CIEC_DINT*>(getDI(2));
+ };
+
+ CIEC_WSTRING &authenticationInfo() {
+ return *static_cast<CIEC_WSTRING*>(getDI(3));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ArrowheadSystem &arrowheadSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 4, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToArrowheadSystem(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToArrowheadSystem(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/common/JSON/ANYToJSON.cpp b/src/modules/arrowhead/common/JSON/ANYToJSON.cpp
new file mode 100644
index 0000000..6870907
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/ANYToJSON.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "ANYToJSON.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "ANYToJSON_gen.cpp"
+#endif
+#include "ArrowheadJSONHelper.h"
+
+DEFINE_FIRMWARE_FB(FORTE_ANYToJSON, g_nStringIdANYToJSON)
+
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anDataInputNames[] = {g_nStringIdinput};
+
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anDataInputTypeIds[] = {g_nStringIdANY};
+
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anDataOutputNames[] = {g_nStringIdoutput};
+
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anDataOutputTypeIds[] = {g_nStringIdSTRING};
+
+const TForteInt16 FORTE_ANYToJSON::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_ANYToJSON::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_ANYToJSON::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_ANYToJSON::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_ANYToJSON::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_ANYToJSON::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+
+void FORTE_ANYToJSON::executeEvent(int paEIID) {
+ if(scm_nEventREQID == paEIID) {
+ output() = "";
+ ArrowheadJSONHelper::transformANYToJSON(input(), output());
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
+
+
diff --git a/src/modules/arrowhead/common/JSON/ANYToJSON.h b/src/modules/arrowhead/common/JSON/ANYToJSON.h
new file mode 100644
index 0000000..43249ee
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/ANYToJSON.h
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _ANYTOJSON_H_
+#define _ANYTOJSON_H_
+
+#include <funcbloc.h>
+#include <forte_string.h>
+#include <forte_any.h>
+
+class FORTE_ANYToJSON: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_ANYToJSON)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ANY &input() {
+ return *static_cast<CIEC_ANY*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_STRING &output() {
+ return *static_cast<CIEC_STRING*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+
+ void executeEvent(int pa_nEIID);
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_ANYToJSON){
+ };
+
+ virtual ~FORTE_ANYToJSON(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.cpp b/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.cpp
new file mode 100644
index 0000000..bb52914
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.cpp
@@ -0,0 +1,343 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "ArrowheadJSONHelper.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "ArrowheadJSONHelper_gen.cpp"
+#endif
+#include <forte_bool.h>
+#include <parameterParser.h>
+#include <devlog.h>
+
+void ArrowheadJSONHelper::transformANYToJSON(const CIEC_ANY& paSource, CIEC_STRING& paResult) {
+ switch(paSource.getDataTypeID()){
+ case CIEC_ANY::e_STRUCT:
+ if(g_nStringIdArrowheadService == static_cast<const CIEC_STRUCT&>(paSource).getStructTypeNameID()) {
+ transformServiceToJSON(const_cast<CIEC_ArrowheadService&>(static_cast<const CIEC_ArrowheadService&>(paSource)), paResult);
+ } else if(g_nStringIdServiceRequestForm == static_cast<const CIEC_STRUCT&>(paSource).getStructTypeNameID()) {
+ transformOrchServciceRequestFormToJSON(const_cast<CIEC_ServiceRequestForm&>(static_cast<const CIEC_ServiceRequestForm&>(paSource)), paResult);
+ } else {
+ transformStructToJSON(static_cast<const CIEC_STRUCT&>(paSource), paResult);
+ }
+ break;
+ case CIEC_ANY::e_ARRAY:
+ transformArrayToJSON(static_cast<const CIEC_ARRAY&>(paSource), paResult);
+ break;
+ case CIEC_ANY::e_BOOL:
+ paResult.append(static_cast<bool>(static_cast<const CIEC_BOOL&>(paSource)) ? "true" : "false");
+ break;
+ default: {
+ unsigned int size = paSource.getToStringBufferSize();
+ char *toStore = new char[size];
+ paSource.toString(toStore, size);
+ paResult.append(toStore);
+ delete[] toStore;
+ break;
+ }
+ }
+
+ //change ' from STRING to " in JSON
+ char* resultString = paResult.getValue();
+ for(unsigned int i = 0; i < paResult.length(); i++) {
+ if('\'' == resultString[i]) {
+ resultString[i] = '"';
+ }
+ }
+}
+
+void ArrowheadJSONHelper::transformJSONToStruct(char* paToChange) {
+ transformServiceMetadata(paToChange);
+ removeIds(paToChange);
+ char* runner = paToChange;
+ changeKeys(&runner);
+ changeToStruct(paToChange);
+}
+
+void ArrowheadJSONHelper::transformStructToJSON(const CIEC_STRUCT& paSource, CIEC_STRING& paResult) {
+
+ TForteUInt16 unSize = paSource.getStructSize();
+ const CStringDictionary::TStringId *punMemberNameIds = paSource.elementNames();
+ const CIEC_ANY *poMembers = paSource.getMembers();
+
+ paResult.append("{");
+
+ for(unsigned int i = 0; i < unSize; ++i) {
+ const char *acMemberName = CStringDictionary::getInstance().get(punMemberNameIds[i]);
+
+ paResult.append("\"");
+ paResult.append(acMemberName);
+ paResult.append("\":");
+
+ transformANYToJSON(poMembers[i], paResult);
+
+ if(i != static_cast<unsigned int>(unSize - 1)) {
+ paResult.append(",");
+ }
+ }
+ paResult.append("}");
+}
+
+void ArrowheadJSONHelper::transformServiceToJSON(CIEC_ArrowheadService& paSource, CIEC_STRING& paResult) {
+
+ paResult.append("{\"serviceDefinition\":\"");
+ paResult.append(paSource.serviceDefinition().getValue());
+ paResult.append("\",\"interfaces\":");
+ transformANYToJSON(*paSource.interfaces_array(), paResult);
+ paResult.append(",\"serviceMetadata\":{");
+
+ bool first = true;
+ for(size_t i = 0; i < 10; i++) {
+ if(0 != strcmp(paSource.serviceMetadata()[i].getValue(), "")) { //if a service is empty, keep looking for others, just in case
+ if(!first) {
+ paResult.append(",");
+ } else {
+ first = false;
+ }
+
+ CParameterParser parser(paSource.serviceMetadata()[i].getValue(), '=', 2);
+ if(2 != parser.parseParameters()) {
+ DEVLOG_ERROR("[ArrowheadJSONHelper]: wrong metadata %s. Each metadata should be in the form of key=value\n", paSource.serviceMetadata()[i].getValue());
+ break;
+ }
+
+ paResult.append("\"");
+ paResult.append(parser[0]);
+ paResult.append("\":\"");
+ paResult.append(parser[1]);
+ paResult.append("\"");
+ }
+ }
+ paResult.append("}}");
+}
+
+void ArrowheadJSONHelper::transformOrchServciceRequestFormToJSON(CIEC_ServiceRequestForm& paSource, CIEC_STRING& paResult) {
+
+ paResult.append("{\"requesterSystem\":");
+ transformANYToJSON(paSource.requesterSystem(), paResult);
+
+ //Cloud shoudn't be sent by applications
+
+ paResult.append(",\"requestedService\":");
+ transformANYToJSON(paSource.requestedService(), paResult);
+
+ paResult.append(",\"orchestrationFlags\":{");
+ bool first = true;
+ for(size_t i = 0; i < 10; i++) {
+ if(0 != strcmp(paSource.orchestrationFlags()[i].getValue(), "")) {
+ if(!first) {
+ paResult.append(",");
+ } else {
+ first = false;
+ }
+
+ paResult.append("\"");
+ paResult.append(paSource.orchestrationFlags()[i].getValue());
+ paResult.append("\":true");
+ } else {
+ break;
+ }
+ }
+
+ paResult.append("},\"preferredProviders\":[");
+ first = true;
+ for(size_t i = 0; i < 10; i++) {
+ if(0 != strcmp(paSource.preferredProviders()[i].providerSystem().systemName().getValue(), "")) {
+ if(!first) {
+ paResult.append(",");
+ } else {
+ first = false;
+ }
+ transformANYToJSON(paSource.preferredProviders()[i], paResult);
+ } else {
+ break;
+ }
+ }
+
+ paResult.append("],\"requestedQoS\":{}}"); //requestedQoS not implemented yet in the arrowhead definition
+}
+
+void ArrowheadJSONHelper::transformArrayToJSON(const CIEC_ARRAY& paSource, CIEC_STRING& paResult) {
+ TForteUInt16 unSize = paSource.size();
+ paResult.append("[");
+
+ bool first = true;
+ for(unsigned int i = 0; i < unSize; ++i) {
+ if((CIEC_ANY::e_STRING == paSource.getElementDataTypeID() || CIEC_ANY::e_WSTRING == paSource.getElementDataTypeID())
+ && 0 == strcmp(static_cast<const CIEC_WSTRING*>(paSource[i])->getValue(), "")) {
+ break;
+ }
+
+ if(!first) {
+ paResult.append(",");
+ } else {
+ first = false;
+ }
+ transformANYToJSON(*paSource[i], paResult);
+ }
+ paResult.append("]");
+}
+
+void ArrowheadJSONHelper::transformServiceMetadata(char* paText) {
+ char* helper = strstr(paText, "\"serviceMetadata\"");
+ while(0 != helper) {
+ helper = strchr(helper, '{');
+ if(0 != helper) {
+ *helper = '[';
+
+ do {
+ while('"' != *helper && '}' != *helper) { //look for start of key
+ helper++;
+ }
+ if('}' == *helper) { //end of metadata
+ break;
+ }
+ char *startOfKey = helper;
+ helper++;
+ while('"' != *helper) { //look for end of key
+ helper++;
+ }
+ char *endOfKey = helper - 1;
+ helper++;
+ while('"' != *helper) { //look for start of value
+ helper++;
+ }
+
+ char* startOfValue = helper;
+ *startOfValue = '=';
+ startOfValue--;
+ while(endOfKey != startOfKey) {
+ *startOfValue-- = *endOfKey--;
+ }
+ *startOfValue = '"';
+ while(startOfKey != startOfValue) {
+ *startOfKey++ = ' ';
+ }
+ helper = strchr(startOfValue + 1, '"');
+ helper++;
+ } while('}' != *helper);
+
+ *helper = ']';
+ helper = strstr(helper, "\"serviceMetadata\"");
+ } else {
+ DEVLOG_ERROR("[ArrowheadJSONHelper]: when transforming serviceMetadata, no { char was found\n");
+ }
+ }
+}
+
+void ArrowheadJSONHelper::removeIds(char* paText) {
+ do {
+ paText = strstr(paText, "\"id\"");
+ if(0 != paText) {
+ while(',' != *paText) {
+ *paText = ' ';
+ paText++;
+ }
+ *paText = ' '; //for the last comma
+ paText++;
+ }
+ } while(0 != paText);
+}
+
+void ArrowheadJSONHelper::changeKeysArray(char** paText) {
+
+ do {
+ while(' ' == **paText || '\r' == **paText || '\n' == **paText) {
+ (*paText)++;
+ }
+
+ if('\0' == **paText) {
+ return;
+ } else if(']' == **paText) {
+ (*paText)++;
+ return;
+ } else if('[' == **paText) {
+ (*paText)++;
+ changeKeysArray(paText);
+ } else if('{' == **paText) {
+ (*paText)++;
+ changeKeys(paText);
+ }
+ (*paText)++;
+ } while('\0' != **paText);
+
+}
+
+void ArrowheadJSONHelper::changeKeys(char** paText) {
+
+ bool isKey = true;
+ do {
+ while(' ' == **paText || '\r' == **paText || '\n' == **paText) {
+ (*paText)++;
+ }
+
+ if('\0' == **paText) {
+ return;
+ } else if('}' == **paText) {
+ (*paText)++;
+ return;
+ } else if('[' == **paText) {
+ (*paText)++;
+ changeKeysArray(paText);
+ } else if('{' == **paText) {
+ (*paText)++;
+ changeKeys(paText);
+ }
+
+ if('\0' == **paText) {
+ return;
+ }
+
+ if(!isKey) {
+ if('"' == **paText) {
+ *paText = strchr((*paText) + 1, '"');
+ (*paText)++;
+ } else {
+ while(',' != **paText && '}' != **paText) {
+ (*paText)++;
+ }
+ }
+ isKey = true;
+ continue;
+ }
+
+ char *startOfKey = strchr(*paText, '"');
+ (*paText) = strchr(startOfKey + 1, '"');
+ char *startOfValue = strchr((*paText) + 1, ':') + 1;
+
+ *startOfKey = ' ';
+ **paText = ':';
+ (*paText)++;
+ **paText = '=';
+ (*paText)++;
+ while(*paText != startOfValue) {
+ **paText = ' ';
+ (*paText)++;
+ }
+
+ isKey = false;
+
+ } while('\0' != **paText);
+
+}
+
+void ArrowheadJSONHelper::changeToStruct(char* paText) {
+ while('\0' != *paText) {
+ if('{' == *paText) {
+ *paText = '(';
+ } else if('}' == *paText) {
+ *paText = ')';
+ } else if('\n' == *paText || '\r' == *paText) {
+ *paText = ' ';
+ }
+ paText++;
+ }
+}
diff --git a/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.h b/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.h
new file mode 100644
index 0000000..735ef96
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/ArrowheadJSONHelper.h
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef FORDIAC_RTE_MODULES_ARROWHEAD_COMMON_HTTP_ARROWHEADJSONHELPER_H_
+#define FORDIAC_RTE_MODULES_ARROWHEAD_COMMON_HTTP_ARROWHEADJSONHELPER_H_
+
+#include <forte_struct.h>
+#include <forte_string.h>
+#include <forte_array.h>
+#include "../forte_arrowheadservice.h"
+#include "../../orchestrator/forte_servicerequestform.h"
+
+class ArrowheadJSONHelper {
+ public:
+ static void transformANYToJSON(const CIEC_ANY &paSource, CIEC_STRING &paResult);
+
+ static void transformJSONToStruct(char* paToChange);
+
+ private:
+ ArrowheadJSONHelper() {
+ }
+ virtual ~ArrowheadJSONHelper() {
+ }
+
+ static void transformStructToJSON(const CIEC_STRUCT &paSource, CIEC_STRING &paResult);
+
+ static void transformArrayToJSON(const CIEC_ARRAY &paSource, CIEC_STRING &paResult);
+
+ static void transformServiceToJSON(CIEC_ArrowheadService &paSource, CIEC_STRING &paResult);
+
+ static void transformOrchServciceRequestFormToJSON(CIEC_ServiceRequestForm& paSource, CIEC_STRING& paResult);
+
+ static void transformServiceMetadata(char* paText);
+
+ static void removeIds(char* paText);
+
+ static void changeKeys(char** paText);
+
+ static void changeKeysArray(char** paText);
+
+ static void changeToStruct(char* paText);
+};
+
+#endif /* FORDIAC_RTE_MODULES_ARROWHEAD_COMMON_HTTP_ARROWHEADJSONHELPER_H_ */
diff --git a/src/modules/arrowhead/common/JSON/CMakeLists.txt b/src/modules/arrowhead/common/JSON/CMakeLists.txt
new file mode 100644
index 0000000..8af6a5e
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/CMakeLists.txt
@@ -0,0 +1,21 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Common Arrowhead specific functional blocks
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(ANYToJSON ArrowheadJSONHelper GetArrayResponseFromJSON)
+
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.cpp b/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.cpp
new file mode 100644
index 0000000..28d8c2f
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.cpp
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "GetArrayResponseFromJSON.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "GetArrayResponseFromJSON_gen.cpp"
+#endif
+
+#include "ArrowheadJSONHelper.h"
+
+DEFINE_FIRMWARE_FB(FORTE_GetArrayResponseFromJSON, g_nStringIdGetArrayResponseFromJSON)
+
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anDataInputNames[] = {g_nStringIdresponse};
+
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anDataInputTypeIds[] = {g_nStringIdSTRING};
+
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anDataOutputNames[] = {g_nStringIdoutput};
+
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anDataOutputTypeIds[] = {g_nStringIdANY};
+
+const TForteInt16 FORTE_GetArrayResponseFromJSON::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_GetArrayResponseFromJSON::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_GetArrayResponseFromJSON::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_GetArrayResponseFromJSON::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_GetArrayResponseFromJSON::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_GetArrayResponseFromJSON::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+
+bool FORTE_GetArrayResponseFromJSON::isResponseEmpty(char* paText) {
+ while(']' != *paText) {
+ if(' ' != *paText) {
+ return false;
+ }
+ paText++;
+ }
+ return true;
+}
+
+void FORTE_GetArrayResponseFromJSON::executeEvent(int paEIID) {
+ if(scm_nEventREQID == paEIID && CIEC_ANY::e_ARRAY == output().getDataTypeID() && CIEC_ANY::e_STRUCT == output_Array()[0]->getDataTypeID()) {
+ //clean the output first
+ output_Array().setup(output_Array().size(), static_cast<CIEC_STRUCT*>(output_Array()[0])->getStructTypeNameID());
+
+ DEVLOG_DEBUG("[Arrowhead GetResponseFromHTTP]: Response received: %s\n", response().getValue());
+ char* helper = strrchr(response().getValue(), ']');
+ if(0 != helper) {
+
+ *(helper + 1) = '\0';
+
+ helper = strchr(response().getValue(), '[');
+ if(0 != helper) {
+ if(!isResponseEmpty(helper + 1)) {
+ ArrowheadJSONHelper::transformJSONToStruct(helper);
+ output().fromString(helper);
+ } //if response is empty, don't do anything.
+ } else {
+ DEVLOG_ERROR("[Arrowhead GetResponseFromHTTP]: Invalid response, ] was found but not [: \n", response().getValue());
+ }
+ } else {
+ DEVLOG_ERROR("[Arrowhead GetResponseFromHTTP]: Invalid response, no ] was found: %s\n", response().getValue());
+ }
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
+
+
+
diff --git a/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.h b/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.h
new file mode 100644
index 0000000..6ae910c
--- /dev/null
+++ b/src/modules/arrowhead/common/JSON/GetArrayResponseFromJSON.h
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _GETARRAYRESPONSEFROMJSON_H_
+#define _GETARRAYRESPONSEFROMJSON_H_
+
+#include <funcbloc.h>
+#include <forte_string.h>
+#include <forte_any.h>
+
+class FORTE_GetArrayResponseFromJSON: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_GetArrayResponseFromJSON)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_STRING &response() {
+ return *static_cast<CIEC_STRING*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ANY &output() {
+ return *static_cast<CIEC_ANY*>(getDO(0));
+ };
+
+ CIEC_ARRAY &output_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDO(0));
+ }
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+
+ void executeEvent(int pa_nEIID);
+
+ bool isResponseEmpty(char* paText);
+
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_GetArrayResponseFromJSON){
+ };
+
+ virtual ~FORTE_GetArrayResponseFromJSON(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/common/forte_arrowheadcloud.cpp b/src/modules/arrowhead/common/forte_arrowheadcloud.cpp
new file mode 100644
index 0000000..becc7c5
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadcloud.cpp
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_arrowheadcloud.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_arrowheadcloud_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ArrowheadCloud, g_nStringIdArrowheadCloud);
+
+CIEC_ArrowheadCloud::CIEC_ArrowheadCloud() :
+ CIEC_STRUCT(g_nStringIdArrowheadCloud, 7, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ArrowheadCloud::scmElementTypes[] = { g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdDINT,
+ g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdBOOL };
+const CStringDictionary::TStringId CIEC_ArrowheadCloud::scmElementNames[] =
+ { g_nStringIdoperator, g_nStringIdcloudName, g_nStringIdaddress, g_nStringIdport,
+ g_nStringIdgatekeeperServiceURI, g_nStringIdauthenticationInfo, g_nStringIdsecure };
diff --git a/src/modules/arrowhead/common/forte_arrowheadcloud.h b/src/modules/arrowhead/common/forte_arrowheadcloud.h
new file mode 100644
index 0000000..fb352ca
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadcloud.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_ARROWHEADSCLOUD_H_
+#define _FORTE_ARROWHEADSCLOUD_H_
+
+#include "forte_struct.h"
+#include "forte_wstring.h"
+#include "forte_dint.h"
+#include "forte_bool.h"
+
+class CIEC_ArrowheadCloud : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ArrowheadCloud)
+
+ public:
+ CIEC_ArrowheadCloud();
+
+ virtual ~CIEC_ArrowheadCloud() {
+ }
+
+ CIEC_WSTRING &Operator() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[0]);
+ }
+
+ CIEC_WSTRING &cloudName() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[1]);
+ }
+
+ CIEC_WSTRING &address() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[2]);
+ }
+
+ CIEC_DINT &port() {
+ return *static_cast<CIEC_DINT*>(&getMembers()[3]);
+ }
+
+ CIEC_WSTRING &gatekeeperServiceURI() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[4]);
+ }
+
+ CIEC_WSTRING &authenticationInfo() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[5]);
+ }
+
+ CIEC_BOOL &secure() {
+ return *static_cast<CIEC_BOOL*>(&getMembers()[6]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_ARROWHEADSCLOUD_H_
diff --git a/src/modules/arrowhead/common/forte_arrowheadservice.cpp b/src/modules/arrowhead/common/forte_arrowheadservice.cpp
new file mode 100644
index 0000000..6114854
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadservice.cpp
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_arrowheadservice.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_arrowheadservice_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ArrowheadService, g_nStringIdArrowheadService);
+
+CIEC_ArrowheadService::CIEC_ArrowheadService() :
+ CIEC_STRUCT(g_nStringIdArrowheadService, 3, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ArrowheadService::scmElementTypes[] = { g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdWSTRING, g_nStringIdARRAY,
+ 10, g_nStringIdWSTRING };
+const CStringDictionary::TStringId CIEC_ArrowheadService::scmElementNames[] =
+ { g_nStringIdserviceDefinition, g_nStringIdinterfaces, g_nStringIdserviceMetadata };
diff --git a/src/modules/arrowhead/common/forte_arrowheadservice.h b/src/modules/arrowhead/common/forte_arrowheadservice.h
new file mode 100644
index 0000000..205386c
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadservice.h
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_ARROWHEADSERVICE_H_
+#define _FORTE_ARROWHEADSERVICE_H_
+
+#include "forte_struct.h"
+#include "forte_wstring.h"
+#include "forte_dint.h"
+#include "forte_array.h"
+
+class CIEC_ArrowheadService : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ArrowheadService)
+
+ public:
+ CIEC_ArrowheadService();
+
+ virtual ~CIEC_ArrowheadService() {
+ }
+
+ CIEC_WSTRING &serviceDefinition() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[0]);
+ }
+
+ CIEC_ARRAY *interfaces_array() {
+ return static_cast<CIEC_ARRAY *>(&getMembers()[1]); //the first element marks the start of the array
+ }
+
+ CIEC_WSTRING *interfaces() {
+ return static_cast<CIEC_WSTRING*>((*static_cast<CIEC_ARRAY *>(&getMembers()[1]))[0]); //the first element marks the start of the array
+ }
+
+ CIEC_WSTRING *serviceMetadata() {
+ return static_cast<CIEC_WSTRING*>((*static_cast<CIEC_ARRAY *>(&getMembers()[2]))[0]); //the first element marks the start of the array
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_ARROWHEADSERVICE_H_
diff --git a/src/modules/arrowhead/common/forte_arrowheadsystem.cpp b/src/modules/arrowhead/common/forte_arrowheadsystem.cpp
new file mode 100644
index 0000000..eabb8ef
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadsystem.cpp
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_arrowheadsystem.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_arrowheadsystem_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ArrowheadSystem, g_nStringIdArrowheadSystem);
+
+CIEC_ArrowheadSystem::CIEC_ArrowheadSystem() :
+ CIEC_STRUCT(g_nStringIdArrowheadSystem, 4, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ArrowheadSystem::scmElementTypes[] = { g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdDINT, g_nStringIdWSTRING };
+const CStringDictionary::TStringId CIEC_ArrowheadSystem::scmElementNames[] = { g_nStringIdsystemName, g_nStringIdaddress, g_nStringIdport,
+ g_nStringIdauthenticationInfo };
diff --git a/src/modules/arrowhead/common/forte_arrowheadsystem.h b/src/modules/arrowhead/common/forte_arrowheadsystem.h
new file mode 100644
index 0000000..8c0463e
--- /dev/null
+++ b/src/modules/arrowhead/common/forte_arrowheadsystem.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_ARROWHEADSYSTEM_H_
+#define _FORTE_ARROWHEADSYSTEM_H_
+
+#include "forte_struct.h"
+#include "forte_wstring.h"
+#include "forte_dint.h"
+
+class CIEC_ArrowheadSystem : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ArrowheadSystem)
+
+ public:
+ CIEC_ArrowheadSystem();
+
+ virtual ~CIEC_ArrowheadSystem() {
+ }
+
+ CIEC_WSTRING &systemName() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[0]);
+ }
+
+ CIEC_WSTRING &address() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[1]);
+ }
+
+ CIEC_DINT &port() {
+ return *static_cast<CIEC_DINT*>(&getMembers()[2]);
+ }
+
+ CIEC_WSTRING &authenticationInfo() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[3]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_ARROWHEADSYSTEM_H_
diff --git a/src/modules/arrowhead/orchestrator/CMakeLists.txt b/src/modules/arrowhead/orchestrator/CMakeLists.txt
new file mode 100644
index 0000000..37a1b7e
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/CMakeLists.txt
@@ -0,0 +1,29 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Arrowhead specific functional blocks for the orchestrator
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+#datatype
+forte_add_sourcefile_hcpp(forte_orchestrationform forte_preferredprovider forte_servicerequestform)
+
+#Orchestrator
+forte_add_sourcefile_hcpp(FieldsToPreferredProvider FieldsToServiceRequestForm OrchestratorRequestAdp RequestOrchestrationForm OrchestrationForm2OrchestrationForm)
+
+if(FORTE_COM_HTTP)
+ add_subdirectory(HTTP)
+endif(FORTE_COM_HTTP)
+
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.cpp b/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.cpp
new file mode 100644
index 0000000..34e4be8
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.cpp
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsPreferredProvider.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsPreferredProvider_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsPreferredProvider, g_nStringIdFieldsPreferredProvider)
+
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anDataInputNames[] = {g_nStringIdproviderSystem, g_nStringIdproviderCloud};
+
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anDataInputTypeIds[] = {g_nStringIdArrowheadSystem, g_nStringIdArrowheadCloud};
+
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anDataOutputNames[] = {g_nStringIdpreferredProvider};
+
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anDataOutputTypeIds[] = {g_nStringIdPreferredProvider};
+
+const TForteInt16 FORTE_FieldsPreferredProvider::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsPreferredProvider::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsPreferredProvider::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsPreferredProvider::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsPreferredProvider::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsPreferredProvider::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsPreferredProvider::alg_REQ(void){
+preferredProvider().providerSystem() = providerSystem();
+preferredProvider().providerCloud() = providerCloud();
+
+}
+
+
+void FORTE_FieldsPreferredProvider::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsPreferredProvider::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsPreferredProvider::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.h b/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.h
new file mode 100644
index 0000000..655dcd6
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsPreferredProvider.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSPREFERREDPROVIDER_H_
+#define _FIELDSPREFERREDPROVIDER_H_
+
+#include <basicfb.h>
+#include <forte_preferredprovider.h>
+#include <forte_arrowheadcloud.h>
+#include <forte_arrowheadsystem.h>
+
+class FORTE_FieldsPreferredProvider: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsPreferredProvider)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ArrowheadSystem &providerSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(getDI(0));
+ };
+
+ CIEC_ArrowheadCloud &providerCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(getDI(1));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_PreferredProvider &preferredProvider() {
+ return *static_cast<CIEC_PreferredProvider*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 2, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsPreferredProvider(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsPreferredProvider(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.cpp b/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.cpp
new file mode 100644
index 0000000..68fe4a9
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.cpp
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToPreferredProvider.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToPreferredProvider_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToPreferredProvider, g_nStringIdFieldsToPreferredProvider)
+
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anDataInputNames[] = {g_nStringIdproviderSystem, g_nStringIdproviderCloud};
+
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anDataInputTypeIds[] = {g_nStringIdArrowheadSystem, g_nStringIdArrowheadCloud};
+
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anDataOutputNames[] = {g_nStringIdpreferredProvider};
+
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anDataOutputTypeIds[] = {g_nStringIdPreferredProvider};
+
+const TForteInt16 FORTE_FieldsToPreferredProvider::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToPreferredProvider::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToPreferredProvider::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToPreferredProvider::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToPreferredProvider::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToPreferredProvider::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToPreferredProvider::alg_REQ(void){
+preferredProvider().providerSystem() = providerSystem();
+preferredProvider().providerCloud() = providerCloud();
+
+
+
+
+
+}
+
+
+void FORTE_FieldsToPreferredProvider::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToPreferredProvider::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToPreferredProvider::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.h b/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.h
new file mode 100644
index 0000000..0bf0068
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsToPreferredProvider.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOPREFERREDPROVIDER_H_
+#define _FIELDSTOPREFERREDPROVIDER_H_
+
+#include <basicfb.h>
+#include <forte_preferredprovider.h>
+#include <forte_arrowheadcloud.h>
+#include <forte_arrowheadsystem.h>
+
+class FORTE_FieldsToPreferredProvider: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToPreferredProvider)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ArrowheadSystem &providerSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(getDI(0));
+ };
+
+ CIEC_ArrowheadCloud &providerCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(getDI(1));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_PreferredProvider &preferredProvider() {
+ return *static_cast<CIEC_PreferredProvider*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 2, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToPreferredProvider(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToPreferredProvider(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.cpp b/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.cpp
new file mode 100644
index 0000000..765b1ee
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.cpp
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToServiceRequestForm.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToServiceRequestForm_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToServiceRequestForm, g_nStringIdFieldsToServiceRequestForm)
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anDataInputNames[] = {g_nStringIdrequesterSystem, g_nStringIdrequesterCloud, g_nStringIdrequestedService, g_nStringIdorchestrationFlags, g_nStringIdpreferredProviders, g_nStringIdrequestedQoS};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anDataInputTypeIds[] = {g_nStringIdArrowheadSystem, g_nStringIdArrowheadCloud, g_nStringIdArrowheadService, g_nStringIdARRAY, 10, g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdPreferredProvider, g_nStringIdARRAY, 10, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anDataOutputNames[] = {g_nStringIdserviceRequestForm};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anDataOutputTypeIds[] = {g_nStringIdServiceRequestForm};
+
+const TForteInt16 FORTE_FieldsToServiceRequestForm::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToServiceRequestForm::scm_anEIWith[] = {0, 1, 5, 4, 3, 2, 255};
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToServiceRequestForm::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToServiceRequestForm::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToServiceRequestForm::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToServiceRequestForm::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 6, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToServiceRequestForm::alg_REQ(void){
+CIEC_INT i;
+;
+
+serviceRequestForm().requesterSystem() = requesterSystem();
+serviceRequestForm().requesterCloud() = requesterCloud();
+serviceRequestForm().requestedService() = requestedService();
+
+
+i = 0;
+while((i < 10)){
+// looks like while is faster than FOR when exporting to cpp
+
+serviceRequestForm().orchestrationFlags()[i] = orchestrationFlags()[i];
+serviceRequestForm().preferredProviders()[i] = preferredProviders()[i];
+serviceRequestForm().requestedQoS()[i] = requestedQoS()[i];
+i = i+1;
+}
+
+
+
+
+
+
+}
+
+
+void FORTE_FieldsToServiceRequestForm::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToServiceRequestForm::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToServiceRequestForm::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.h b/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.h
new file mode 100644
index 0000000..a711d67
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/FieldsToServiceRequestForm.h
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOSERVICEREQUESTFORM_H_
+#define _FIELDSTOSERVICEREQUESTFORM_H_
+
+#include <basicfb.h>
+#include <forte_preferredprovider.h>
+#include <forte_arrowheadservice.h>
+#include <forte_arrowheadcloud.h>
+#include <forte_arrowheadsystem.h>
+#include <forte_servicerequestform.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+
+class FORTE_FieldsToServiceRequestForm: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToServiceRequestForm)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ArrowheadSystem &requesterSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(getDI(0));
+ };
+
+ CIEC_ArrowheadCloud &requesterCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(getDI(1));
+ };
+
+ CIEC_ArrowheadService &requestedService() {
+ return *static_cast<CIEC_ArrowheadService*>(getDI(2));
+ };
+
+ CIEC_WSTRING *orchestrationFlags() {
+ return (CIEC_WSTRING*)(*static_cast<CIEC_ARRAY *>(getDI(3)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &orchestrationFlags_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDI(3));
+ };
+
+ CIEC_PreferredProvider *preferredProviders() {
+ return (CIEC_PreferredProvider*)(*static_cast<CIEC_ARRAY *>(getDI(4)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &preferredProviders_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDI(4));
+ };
+
+ CIEC_WSTRING *requestedQoS() {
+ return (CIEC_WSTRING*)(*static_cast<CIEC_ARRAY *>(getDI(5)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &requestedQoS_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDI(5));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ServiceRequestForm &serviceRequestForm() {
+ return *static_cast<CIEC_ServiceRequestForm*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 6, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToServiceRequestForm(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToServiceRequestForm(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/HTTP/CMakeLists.txt b/src/modules/arrowhead/orchestrator/HTTP/CMakeLists.txt
new file mode 100644
index 0000000..f72f740
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/HTTP/CMakeLists.txt
@@ -0,0 +1,21 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Arrowhead specific functional blocks for HTTP for the orchestrator
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(RequestOrchestrationHTTP)
+
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.cpp b/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.cpp
new file mode 100644
index 0000000..12a8db5
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.cpp
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "RequestOrchestrationHTTP.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "RequestOrchestrationHTTP_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_RequestOrchestrationHTTP, g_nStringIdRequestOrchestrationHTTP)
+
+const TForteInt16 FORTE_RequestOrchestrationHTTP::scm_anEOWithIndexes[] = {-1};
+const SAdapterInstanceDef FORTE_RequestOrchestrationHTTP::scm_astAdapterInstances[] = {
+{g_nStringIdOrchestratorRequestAdp, g_nStringIdrequestOrchestration, false }};
+
+const SFBInterfaceSpec FORTE_RequestOrchestrationHTTP::scm_stFBInterfaceSpec = {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBInstanceData FORTE_RequestOrchestrationHTTP::scm_astInternalFBs[] = {
+ {g_nStringIdAPPEND_STRING_3, g_nStringIdAPPEND_STRING_3},
+ {g_nStringIdRequest, g_nStringIdCLIENT_1_2},
+ {g_nStringIdInitFlag, g_nStringIdE_SR},
+ {g_nStringIdE_PERMIT, g_nStringIdE_PERMIT},
+ {g_nStringIdF_STRING_TO_WSTRING, g_nStringIdF_STRING_TO_WSTRING},
+ {g_nStringIdANYToJSON, g_nStringIdANYToJSON},
+ {g_nStringIdGetHTTPOrchestrationForm, g_nStringIdGetArrayResponseFromJSON},
+};
+
+const SCFB_FBParameter FORTE_RequestOrchestrationHTTP::scm_astParamters[] = {
+ {0, g_nStringIdIN_1, "STRING#http["},
+ {0, g_nStringIdIN_3, "STRING#/orchestration; POST; application/json]"},
+};
+
+const SCFB_FBConnectionData FORTE_RequestOrchestrationHTTP::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdCNF), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdREQ), 4},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdCNF), 4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdS), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdEO), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdINIT), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEO), 3, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdREQ), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdCNF), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdREQ), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdCNF), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdR), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdINITO), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEI), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdrequestOrchestator), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdREQ), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPOrchestrationForm, g_nStringIdCNF), 6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdresponseReceived), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_RequestOrchestrationHTTP::scm_astFannedOutEventConnections[] = {
+ {5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPOrchestrationForm, g_nStringIdREQ), 6},
+};
+
+const SCFB_FBConnectionData FORTE_RequestOrchestrationHTTP::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdOUT), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdIN), 4},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdOUT), 4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdID), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdQ), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdPERMIT), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdoutput), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdSD_1), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdserviceRequestForm), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdinput), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdIN_2), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdRD_2), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPOrchestrationForm, g_nStringIdresponse), 6},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPOrchestrationForm, g_nStringIdoutput), 6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdorchestrationResponse), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_RequestOrchestrationHTTP::scm_astFannedOutDataConnections[] = {
+ {2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRequest, g_nStringIdQI), 1},
+};
+
+const SCFB_FBNData FORTE_RequestOrchestrationHTTP::scm_stFBNData = {
+ 7, scm_astInternalFBs,
+ 9, scm_astEventConnections,
+ 1, scm_astFannedOutEventConnections,
+ 8, scm_astDataConnections,
+ 1, scm_astFannedOutDataConnections,
+ 2, scm_astParamters
+};
+
+
diff --git a/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.h b/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.h
new file mode 100644
index 0000000..6cfb879
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/HTTP/RequestOrchestrationHTTP.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _REQUESTORCHESTRATIONHTTP_H_
+#define _REQUESTORCHESTRATIONHTTP_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include "OrchestratorRequestAdp.h"
+
+class FORTE_RequestOrchestrationHTTP: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_RequestOrchestrationHTTP)
+
+private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_OrchestratorRequestAdp& requestOrchestration() {
+ return (*static_cast<FORTE_OrchestratorRequestAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nrequestOrchestrationAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(0, 0, 0, 1);
+
+ static const SCFB_FBInstanceData scm_astInternalFBs[];
+
+ static const SCFB_FBParameter scm_astParamters[];
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_RequestOrchestrationHTTP){
+ };
+
+ virtual ~FORTE_RequestOrchestrationHTTP(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.cpp b/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.cpp
new file mode 100644
index 0000000..60da0e8
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.cpp
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "OrchestrationForm2OrchestrationForm.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "OrchestrationForm2OrchestrationForm_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_OrchestrationForm2OrchestrationForm, g_nStringIdOrchestrationForm2OrchestrationForm)
+
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anDataInputTypeIds[] = {g_nStringIdOrchestrationForm};
+
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anDataOutputTypeIds[] = {g_nStringIdOrchestrationForm};
+
+const TForteInt16 FORTE_OrchestrationForm2OrchestrationForm::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_OrchestrationForm2OrchestrationForm::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_OrchestrationForm2OrchestrationForm::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_OrchestrationForm2OrchestrationForm::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_OrchestrationForm2OrchestrationForm::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_OrchestrationForm2OrchestrationForm::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+
+void FORTE_OrchestrationForm2OrchestrationForm::executeEvent(int pa_nEIID){
+ if(scm_nEventREQID == pa_nEIID) {
+ OUT() = IN();
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
+
+
diff --git a/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.h b/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.h
new file mode 100644
index 0000000..1188e17
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/OrchestrationForm2OrchestrationForm.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _ORCHESTRATIONFORM2ORCHESTRATIONFORM_H_
+#define _ORCHESTRATIONFORM2ORCHESTRATIONFORM_H_
+
+#include <funcbloc.h>
+#include <forte_orchestrationform.h>
+
+class FORTE_OrchestrationForm2OrchestrationForm: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_OrchestrationForm2OrchestrationForm)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_OrchestrationForm &IN() {
+ return *static_cast<CIEC_OrchestrationForm*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_OrchestrationForm &OUT() {
+ return *static_cast<CIEC_OrchestrationForm*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+
+ void executeEvent(int pa_nEIID);
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_OrchestrationForm2OrchestrationForm){
+ };
+
+ virtual ~FORTE_OrchestrationForm2OrchestrationForm(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.cpp b/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.cpp
new file mode 100644
index 0000000..270b3c1
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.cpp
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "OrchestratorRequestAdp.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "OrchestratorRequestAdp_gen.cpp"
+#endif
+
+DEFINE_ADAPTER_TYPE(FORTE_OrchestratorRequestAdp, g_nStringIdOrchestratorRequestAdp)
+
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anDataInputNames[] = {g_nStringIdorchestrationResponse};
+
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anDataInputTypeIds[] = {g_nStringIdARRAY, 10, g_nStringIdOrchestrationForm};
+
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anDataOutputNames[] = {g_nStringIdserviceRequestForm, g_nStringIdendpoint};
+
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anDataOutputTypeIds[] = {g_nStringIdServiceRequestForm, g_nStringIdWSTRING};
+
+const TDataIOID FORTE_OrchestratorRequestAdp::scm_anEIWith[] = {0, 255};
+const TForteInt16 FORTE_OrchestratorRequestAdp::scm_anEIWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anEventInputNames[] = {g_nStringIdresponseReceived};
+
+const TDataIOID FORTE_OrchestratorRequestAdp::scm_anEOWith[] = {0, 1, 255};
+const TForteInt16 FORTE_OrchestratorRequestAdp::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_OrchestratorRequestAdp::scm_anEventOutputNames[] = {g_nStringIdrequestOrchestator};
+
+const SFBInterfaceSpec FORTE_OrchestratorRequestAdp::scm_stFBInterfaceSpecSocket = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+const SFBInterfaceSpec FORTE_OrchestratorRequestAdp::scm_stFBInterfaceSpecPlug = {
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes,
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes, 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 0, 0
+};
+
+
+
diff --git a/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.h b/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.h
new file mode 100644
index 0000000..620458f
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/OrchestratorRequestAdp.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _ORCHESTRATORREQUESTADP_H_
+#define _ORCHESTRATORREQUESTADP_H_
+
+#include <adapter.h>
+#include <typelib.h>
+#include <forte_orchestrationform.h>
+#include <forte_servicerequestform.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+
+class FORTE_OrchestratorRequestAdp: public CAdapter{
+ DECLARE_ADAPTER_TYPE(FORTE_OrchestratorRequestAdp)
+
+private:
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ public:
+ CIEC_OrchestrationForm *orchestrationResponse() {
+ return (CIEC_OrchestrationForm*)(*static_cast<CIEC_ARRAY *>((isSocket()) ? getDI(0) : getDO(0)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &orchestrationResponse_Array() {
+ return *static_cast<CIEC_ARRAY*>((isSocket()) ? getDI(0) : getDO(0));
+ };
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ public:
+ CIEC_ServiceRequestForm &serviceRequestForm() {
+ return *static_cast<CIEC_ServiceRequestForm*>((isSocket()) ? getDO(0) : getDI(0));
+ };
+
+ CIEC_WSTRING &endpoint() {
+ return *static_cast<CIEC_WSTRING*>((isSocket()) ? getDO(1) : getDI(1));
+ };
+
+ public:
+ static const TEventID scm_nEventresponseReceivedID = 0;
+ int responseReceived() {
+ return m_nParentAdapterListEventID + scm_nEventresponseReceivedID;
+ }
+ private:
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ public:
+ static const TEventID scm_nEventrequestOrchestatorID = 0;
+ int requestOrchestator() {
+ return m_nParentAdapterListEventID + scm_nEventrequestOrchestatorID;
+ }
+ private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecSocket;
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecPlug;
+
+ FORTE_ADAPTER_DATA_ARRAY(1, 1, 1, 2, 0);
+
+public:
+ ADAPTER_CTOR(FORTE_OrchestratorRequestAdp){
+ };
+
+ virtual ~FORTE_OrchestratorRequestAdp(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.cpp b/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.cpp
new file mode 100644
index 0000000..ab30a75
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.cpp
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "RequestOrchestrationForm.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "RequestOrchestrationForm_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_RequestOrchestrationForm, g_nStringIdRequestOrchestrationForm)
+
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anDataInputNames[] = {g_nStringIdserviceRequestForm, g_nStringIdendpoint};
+
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anDataInputTypeIds[] = {g_nStringIdServiceRequestForm, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anDataOutputNames[] = {g_nStringIdorchestrationResponse};
+
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anDataOutputTypeIds[] = {g_nStringIdARRAY, 10, g_nStringIdOrchestrationForm};
+
+const TForteInt16 FORTE_RequestOrchestrationForm::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_RequestOrchestrationForm::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anEventInputNames[] = {g_nStringIdrequestOrchestator};
+
+const TDataIOID FORTE_RequestOrchestrationForm::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_RequestOrchestrationForm::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_RequestOrchestrationForm::scm_anEventOutputNames[] = {g_nStringIdresponseReceived};
+
+const SAdapterInstanceDef FORTE_RequestOrchestrationForm::scm_astAdapterInstances[] = {
+{g_nStringIdOrchestratorRequestAdp, g_nStringIdrequestOrchestration, true }};
+
+const SFBInterfaceSpec FORTE_RequestOrchestrationForm::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBConnectionData FORTE_RequestOrchestrationForm::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdrequestOrchestator), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdrequestOrchestator), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdresponseReceived), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdresponseReceived), -1},
+};
+
+const SCFB_FBConnectionData FORTE_RequestOrchestrationForm::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdserviceRequestForm), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdserviceRequestForm), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdorchestrationResponse), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdorchestrationResponse), -1},
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdendpoint), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdrequestOrchestration, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBNData FORTE_RequestOrchestrationForm::scm_stFBNData = {
+ 0, 0,
+ 2, scm_astEventConnections,
+ 0, 0,
+ 3, scm_astDataConnections,
+ 0, 0,
+ 0, 0
+};
+
+
diff --git a/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.h b/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.h
new file mode 100644
index 0000000..9aef5da
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/RequestOrchestrationForm.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _REQUESTORCHESTRATIONFORM_H_
+#define _REQUESTORCHESTRATIONFORM_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include <forte_orchestrationform.h>
+#include <forte_servicerequestform.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+#include "OrchestratorRequestAdp.h"
+
+class FORTE_RequestOrchestrationForm: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_RequestOrchestrationForm)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ServiceRequestForm &serviceRequestForm() {
+ return *static_cast<CIEC_ServiceRequestForm*>(getDI(0));
+ };
+
+ CIEC_WSTRING &endpoint() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_OrchestrationForm *orchestrationResponse() {
+ return (CIEC_OrchestrationForm*)(*static_cast<CIEC_ARRAY *>(getDO(0)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &orchestrationResponse_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventrequestOrchestatorID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventresponseReceivedID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_OrchestratorRequestAdp& requestOrchestration() {
+ return (*static_cast<FORTE_OrchestratorRequestAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nrequestOrchestrationAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 2, 1, 1);
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_RequestOrchestrationForm){
+ };
+
+ virtual ~FORTE_RequestOrchestrationForm(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/orchestrator/forte_orchestrationform.cpp b/src/modules/arrowhead/orchestrator/forte_orchestrationform.cpp
new file mode 100644
index 0000000..2ba16f4
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_orchestrationform.cpp
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_orchestrationform.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_orchestrationform_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(OrchestrationForm, g_nStringIdOrchestrationForm);
+
+CIEC_OrchestrationForm::CIEC_OrchestrationForm() :
+ CIEC_STRUCT(g_nStringIdOrchestrationForm, 7, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_OrchestrationForm::scmElementTypes[] = { g_nStringIdArrowheadService, g_nStringIdArrowheadSystem, g_nStringIdWSTRING,
+ g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdWSTRING };
+const CStringDictionary::TStringId CIEC_OrchestrationForm::scmElementNames[] = { g_nStringIdservice, g_nStringIdprovider, g_nStringIdserviceURI,
+ g_nStringIdinstruction, g_nStringIdauthorizationToken, g_nStringIdsignature, g_nStringIdwarnings };
diff --git a/src/modules/arrowhead/orchestrator/forte_orchestrationform.h b/src/modules/arrowhead/orchestrator/forte_orchestrationform.h
new file mode 100644
index 0000000..4c98fb5
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_orchestrationform.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_ORCHESTRATIONFORM_H_
+#define _FORTE_ORCHESTRATIONFORM_H_
+
+#include "forte_struct.h"
+#include "forte_arrowheadsystem.h"
+#include "forte_arrowheadservice.h"
+#include "forte_wstring.h"
+#include "forte_array.h"
+
+class CIEC_OrchestrationForm : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(OrchestrationForm)
+
+ public:
+ CIEC_OrchestrationForm();
+
+ virtual ~CIEC_OrchestrationForm() {
+ }
+
+ CIEC_ArrowheadService &service() {
+ return *static_cast<CIEC_ArrowheadService*>(&getMembers()[0]);
+ }
+
+ CIEC_ArrowheadSystem &provider() {
+ return *static_cast<CIEC_ArrowheadSystem*>(&getMembers()[1]);
+ }
+
+ CIEC_WSTRING &serviceURI() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[2]);
+ }
+
+ CIEC_WSTRING &instruction() {
+ return *static_cast<CIEC_WSTRING *>(&getMembers()[3]);
+ }
+
+ CIEC_WSTRING &authorizationToken() {
+ return *static_cast<CIEC_WSTRING *>(&getMembers()[4]);
+ }
+
+ CIEC_WSTRING &signature() {
+ return *static_cast<CIEC_WSTRING *>(&getMembers()[5]);
+ }
+
+ CIEC_WSTRING *warnings() {
+ return static_cast<CIEC_WSTRING*>((*static_cast<CIEC_ARRAY *>(&getMembers()[6]))[0]); //the first element marks the start of the array
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_ORCHESTRATIONFORM_H_
+
diff --git a/src/modules/arrowhead/orchestrator/forte_preferredprovider.cpp b/src/modules/arrowhead/orchestrator/forte_preferredprovider.cpp
new file mode 100644
index 0000000..3b441dc
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_preferredprovider.cpp
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_preferredprovider.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_preferredprovider_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(PreferredProvider, g_nStringIdPreferredProvider);
+
+CIEC_PreferredProvider::CIEC_PreferredProvider() :
+ CIEC_STRUCT(g_nStringIdPreferredProvider, 2, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_PreferredProvider::scmElementTypes[] = { g_nStringIdArrowheadSystem, g_nStringIdArrowheadCloud };
+const CStringDictionary::TStringId CIEC_PreferredProvider::scmElementNames[] = { g_nStringIdproviderSystem, g_nStringIdproviderCloud };
diff --git a/src/modules/arrowhead/orchestrator/forte_preferredprovider.h b/src/modules/arrowhead/orchestrator/forte_preferredprovider.h
new file mode 100644
index 0000000..29dff4d
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_preferredprovider.h
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_PREFEREDPROVIDER_H_
+#define _FORTE_PREFEREDPROVIDER_H_
+
+#include "forte_struct.h"
+#include "forte_arrowheadsystem.h"
+#include "forte_arrowheadcloud.h"
+
+class CIEC_PreferredProvider : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(PreferredProvider)
+
+ public:
+ CIEC_PreferredProvider();
+
+ virtual ~CIEC_PreferredProvider() {
+ }
+
+ CIEC_ArrowheadSystem &providerSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(&getMembers()[0]);
+ }
+
+ CIEC_ArrowheadCloud &providerCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(&getMembers()[1]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_PREFEREDPROVIDER_H_
diff --git a/src/modules/arrowhead/orchestrator/forte_servicerequestform.cpp b/src/modules/arrowhead/orchestrator/forte_servicerequestform.cpp
new file mode 100644
index 0000000..27dac61
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_servicerequestform.cpp
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_servicerequestform.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_servicerequestform_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ServiceRequestForm, g_nStringIdServiceRequestForm);
+
+CIEC_ServiceRequestForm::CIEC_ServiceRequestForm() :
+ CIEC_STRUCT(g_nStringIdServiceRequestForm, 6, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ServiceRequestForm::scmElementTypes[] = { g_nStringIdArrowheadSystem, g_nStringIdArrowheadCloud,
+ g_nStringIdArrowheadService, g_nStringIdARRAY, 10, g_nStringIdWSTRING, g_nStringIdARRAY, 10, g_nStringIdPreferredProvider, g_nStringIdARRAY, 10,
+ g_nStringIdWSTRING };
+const CStringDictionary::TStringId CIEC_ServiceRequestForm::scmElementNames[] = { g_nStringIdrequesterSystem, g_nStringIdrequesterCloud,
+ g_nStringIdrequestedService, g_nStringIdorchestrationFlags, g_nStringIdpreferredProviders, g_nStringIdrequestedQoS };
diff --git a/src/modules/arrowhead/orchestrator/forte_servicerequestform.h b/src/modules/arrowhead/orchestrator/forte_servicerequestform.h
new file mode 100644
index 0000000..69f289d
--- /dev/null
+++ b/src/modules/arrowhead/orchestrator/forte_servicerequestform.h
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_SERVICEREQUESTFORM_H_
+#define _FORTE_SERVICEREQUESTFORM_H_
+
+#include "forte_struct.h"
+#include "forte_arrowheadsystem.h"
+#include "forte_arrowheadcloud.h"
+#include "forte_arrowheadservice.h"
+#include "forte_wstring.h"
+#include "forte_dint.h"
+#include "forte_array.h"
+#include "forte_preferredprovider.h"
+
+class CIEC_ServiceRequestForm : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ServiceRequestForm)
+
+ public:
+ CIEC_ServiceRequestForm();
+
+ virtual ~CIEC_ServiceRequestForm() {
+ }
+
+ CIEC_ArrowheadSystem &requesterSystem() {
+ return *static_cast<CIEC_ArrowheadSystem*>(&getMembers()[0]);
+ }
+
+ CIEC_ArrowheadCloud &requesterCloud() {
+ return *static_cast<CIEC_ArrowheadCloud*>(&getMembers()[1]);
+ }
+
+ CIEC_ArrowheadService &requestedService() {
+ return *static_cast<CIEC_ArrowheadService*>(&getMembers()[2]);
+ }
+
+ CIEC_WSTRING *orchestrationFlags() {
+ return static_cast<CIEC_WSTRING*>((*static_cast<CIEC_ARRAY *>(&getMembers()[3]))[0]); //the first element marks the start of the array
+ }
+
+ CIEC_PreferredProvider *preferredProviders() {
+ return static_cast<CIEC_PreferredProvider*>((*static_cast<CIEC_ARRAY *>(&getMembers()[4]))[0]); //the first element marks the start of the array
+ }
+
+ CIEC_WSTRING *requestedQoS() {
+ return static_cast<CIEC_WSTRING*>((*static_cast<CIEC_ARRAY *>(&getMembers()[5]))[0]); //the first element marks the start of the array
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_SERVICEREQUESTFORM_H_
+
diff --git a/src/modules/arrowhead/serviceRegistry/CMakeLists.txt b/src/modules/arrowhead/serviceRegistry/CMakeLists.txt
new file mode 100644
index 0000000..7aa8380
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/CMakeLists.txt
@@ -0,0 +1,28 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Arrowhead specific functional blocks for service registry
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+#datatype
+forte_add_sourcefile_hcpp(forte_serviceregistryentry forte_servicequeryform)
+
+#Service Registry
+forte_add_sourcefile_hcpp(FieldsToServiceQueryForm FieldsToServiceRegistryEntry QueryService QueryServicesAdp RegisterService RegisterServiceAdp ServiceRegistryEntry2ServiceRegistryEntry)
+
+if(FORTE_COM_HTTP)
+ add_subdirectory(HTTP)
+endif(FORTE_COM_HTTP)
+
diff --git a/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.cpp b/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.cpp
new file mode 100644
index 0000000..289c746
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.cpp
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToServiceQueryForm.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToServiceQueryForm_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToServiceQueryForm, g_nStringIdFieldsToServiceQueryForm)
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anDataInputNames[] = {g_nStringIdservice, g_nStringIdmetadataSearch, g_nStringIdpingProviders, g_nStringIdversion};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anDataInputTypeIds[] = {g_nStringIdArrowheadService, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdDINT};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anDataOutputNames[] = {g_nStringIdserviceQueryForm};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anDataOutputTypeIds[] = {g_nStringIdServiceQueryForm};
+
+const TForteInt16 FORTE_FieldsToServiceQueryForm::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToServiceQueryForm::scm_anEIWith[] = {0, 3, 2, 1, 255};
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToServiceQueryForm::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToServiceQueryForm::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToServiceQueryForm::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToServiceQueryForm::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 4, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToServiceQueryForm::alg_REQ(void){
+serviceQueryForm().service() = service();
+serviceQueryForm().metadataSearch() = metadataSearch();
+serviceQueryForm().pingProviders() = pingProviders();
+serviceQueryForm().version() = version();
+
+}
+
+
+void FORTE_FieldsToServiceQueryForm::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToServiceQueryForm::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToServiceQueryForm::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.h b/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.h
new file mode 100644
index 0000000..2a9080c
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/FieldsToServiceQueryForm.h
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOSERVICEQUERYFORM_H_
+#define _FIELDSTOSERVICEQUERYFORM_H_
+
+#include <basicfb.h>
+#include <forte_servicequeryform.h>
+#include <forte_arrowheadservice.h>
+#include <forte_bool.h>
+#include <forte_dint.h>
+
+class FORTE_FieldsToServiceQueryForm: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToServiceQueryForm)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ArrowheadService &service() {
+ return *static_cast<CIEC_ArrowheadService*>(getDI(0));
+ };
+
+ CIEC_BOOL &metadataSearch() {
+ return *static_cast<CIEC_BOOL*>(getDI(1));
+ };
+
+ CIEC_BOOL &pingProviders() {
+ return *static_cast<CIEC_BOOL*>(getDI(2));
+ };
+
+ CIEC_DINT &version() {
+ return *static_cast<CIEC_DINT*>(getDI(3));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ServiceQueryForm &serviceQueryForm() {
+ return *static_cast<CIEC_ServiceQueryForm*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 4, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToServiceQueryForm(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToServiceQueryForm(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.cpp b/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.cpp
new file mode 100644
index 0000000..40f95e7
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.cpp
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "FieldsToServiceRegistryEntry.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "FieldsToServiceRegistryEntry_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_FieldsToServiceRegistryEntry, g_nStringIdFieldsToServiceRegistryEntry)
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anDataInputNames[] = {g_nStringIdprovidedService, g_nStringIdprovider, g_nStringIdserviceURI, g_nStringIdversion, g_nStringIdudp, g_nStringIdttl, g_nStringIdmetadata};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anDataInputTypeIds[] = {g_nStringIdArrowheadService, g_nStringIdArrowheadSystem, g_nStringIdWSTRING, g_nStringIdDINT, g_nStringIdBOOL, g_nStringIdDINT, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anDataOutputNames[] = {g_nStringIdserviceRegistryEntry};
+
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anDataOutputTypeIds[] = {g_nStringIdServiceRegistryEntry};
+
+const TForteInt16 FORTE_FieldsToServiceRegistryEntry::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_FieldsToServiceRegistryEntry::scm_anEIWith[] = {6, 5, 4, 3, 2, 1, 0, 255};
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_FieldsToServiceRegistryEntry::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_FieldsToServiceRegistryEntry::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_FieldsToServiceRegistryEntry::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_FieldsToServiceRegistryEntry::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 7, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_FieldsToServiceRegistryEntry::alg_REQ(void){
+serviceRegistryEntry().providedService() = providedService();
+serviceRegistryEntry().provider() = provider();
+serviceRegistryEntry().serviceURI() = serviceURI();
+serviceRegistryEntry().version() = version();
+serviceRegistryEntry().udp() = udp();
+serviceRegistryEntry().ttl() = ttl();
+serviceRegistryEntry().metadata() = metadata();
+
+}
+
+
+void FORTE_FieldsToServiceRegistryEntry::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_FieldsToServiceRegistryEntry::enterStateREQ(void){
+ m_nECCState = scm_nStateREQ;
+ alg_REQ();
+ sendOutputEvent( scm_nEventCNFID);
+}
+
+void FORTE_FieldsToServiceRegistryEntry::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventREQID == pa_nEIID)
+ enterStateREQ();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateREQ:
+ if(1)
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.h b/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.h
new file mode 100644
index 0000000..19f9cc6
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/FieldsToServiceRegistryEntry.h
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FIELDSTOSERVICEREGISTRYENTRY_H_
+#define _FIELDSTOSERVICEREGISTRYENTRY_H_
+
+#include <basicfb.h>
+#include <forte_arrowheadservice.h>
+#include <forte_bool.h>
+#include <forte_arrowheadsystem.h>
+#include <forte_dint.h>
+#include <forte_serviceregistryentry.h>
+#include <forte_wstring.h>
+
+class FORTE_FieldsToServiceRegistryEntry: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_FieldsToServiceRegistryEntry)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ArrowheadService &providedService() {
+ return *static_cast<CIEC_ArrowheadService*>(getDI(0));
+ };
+
+ CIEC_ArrowheadSystem &provider() {
+ return *static_cast<CIEC_ArrowheadSystem*>(getDI(1));
+ };
+
+ CIEC_WSTRING &serviceURI() {
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_DINT &version() {
+ return *static_cast<CIEC_DINT*>(getDI(3));
+ };
+
+ CIEC_BOOL &udp() {
+ return *static_cast<CIEC_BOOL*>(getDI(4));
+ };
+
+ CIEC_DINT &ttl() {
+ return *static_cast<CIEC_DINT*>(getDI(5));
+ };
+
+ CIEC_WSTRING &metadata() {
+ return *static_cast<CIEC_WSTRING*>(getDI(6));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ServiceRegistryEntry &serviceRegistryEntry() {
+ return *static_cast<CIEC_ServiceRegistryEntry*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 7, 1, 0, 0);
+ void alg_REQ(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateREQ = 1;
+
+ void enterStateSTART(void);
+ void enterStateREQ(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_FieldsToServiceRegistryEntry(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_FieldsToServiceRegistryEntry(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/HTTP/CMakeLists.txt b/src/modules/arrowhead/serviceRegistry/HTTP/CMakeLists.txt
new file mode 100644
index 0000000..5a926ae
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/HTTP/CMakeLists.txt
@@ -0,0 +1,21 @@
+# *******************************************************************************
+# Copyright (c) 2018, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# *******************************************************************************
+
+#############################################################################
+# Arrowhead specific functional blocks for HTTP for service registry
+#############################################################################
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(QueryServiceHTTP RegisterServiceHTTP)
+
+
\ No newline at end of file
diff --git a/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.cpp b/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.cpp
new file mode 100644
index 0000000..4b7e170
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.cpp
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "QueryServiceHTTP.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "QueryServiceHTTP_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_QueryServiceHTTP, g_nStringIdQueryServiceHTTP)
+
+const TForteInt16 FORTE_QueryServiceHTTP::scm_anEOWithIndexes[] = {-1};
+const SAdapterInstanceDef FORTE_QueryServiceHTTP::scm_astAdapterInstances[] = {
+{g_nStringIdQueryServicesAdp, g_nStringIdqueryServices, false }};
+
+const SFBInterfaceSpec FORTE_QueryServiceHTTP::scm_stFBInterfaceSpec = {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBInstanceData FORTE_QueryServiceHTTP::scm_astInternalFBs[] = {
+ {g_nStringIdAPPEND_STRING_3, g_nStringIdAPPEND_STRING_3},
+ {g_nStringIdQuery, g_nStringIdCLIENT_1_2},
+ {g_nStringIdF_STRING_TO_WSTRING, g_nStringIdF_STRING_TO_WSTRING},
+ {g_nStringIdInitFlag, g_nStringIdE_SR},
+ {g_nStringIdE_PERMIT, g_nStringIdE_PERMIT},
+ {g_nStringIdANYToJSON, g_nStringIdANYToJSON},
+ {g_nStringIdGetHTTPResult, g_nStringIdGetArrayResponseFromJSON},
+};
+
+const SCFB_FBParameter FORTE_QueryServiceHTTP::scm_astParamters[] = {
+ {0, g_nStringIdIN_1, "STRING#http["},
+ {0, g_nStringIdIN_3, "STRING#/query; PUT; application/json]"},
+};
+
+const SCFB_FBConnectionData FORTE_QueryServiceHTTP::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdCNF), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdREQ), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdCNF), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdS), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdEO), 3, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdINIT), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdINITO), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEI), 4},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEO), 4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdREQ), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdCNF), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdR), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdCNF), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdREQ), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdquery), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdREQ), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPResult, g_nStringIdCNF), 6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdqueried), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_QueryServiceHTTP::scm_astFannedOutEventConnections[] = {
+ {5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPResult, g_nStringIdREQ), 6},
+};
+
+const SCFB_FBConnectionData FORTE_QueryServiceHTTP::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdOUT), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdIN), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdOUT), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdID), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlag, g_nStringIdQ), 3, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdPERMIT), 4},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdoutput), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdSD_1), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdserviceQueryForm), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdinput), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdAPPEND_STRING_3, g_nStringIdIN_2), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdRD_2), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPResult, g_nStringIdresponse), 6},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdGetHTTPResult, g_nStringIdoutput), 6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdserviceEntries), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_QueryServiceHTTP::scm_astFannedOutDataConnections[] = {
+ {2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdQuery, g_nStringIdQI), 1},
+};
+
+const SCFB_FBNData FORTE_QueryServiceHTTP::scm_stFBNData = {
+ 7, scm_astInternalFBs,
+ 9, scm_astEventConnections,
+ 1, scm_astFannedOutEventConnections,
+ 8, scm_astDataConnections,
+ 1, scm_astFannedOutDataConnections,
+ 2, scm_astParamters
+};
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.h b/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.h
new file mode 100644
index 0000000..0f84a56
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/HTTP/QueryServiceHTTP.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _QUERYSERVICEHTTP_H_
+#define _QUERYSERVICEHTTP_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include "QueryServicesAdp.h"
+
+class FORTE_QueryServiceHTTP: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_QueryServiceHTTP)
+
+private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_QueryServicesAdp& queryServices() {
+ return (*static_cast<FORTE_QueryServicesAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nqueryServicesAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(0, 0, 0, 1);
+
+ static const SCFB_FBInstanceData scm_astInternalFBs[];
+
+ static const SCFB_FBParameter scm_astParamters[];
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_QueryServiceHTTP){
+ };
+
+ virtual ~FORTE_QueryServiceHTTP(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.cpp b/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.cpp
new file mode 100644
index 0000000..e85363c
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.cpp
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "RegisterServiceHTTP.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "RegisterServiceHTTP_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_RegisterServiceHTTP, g_nStringIdRegisterServiceHTTP)
+
+const TForteInt16 FORTE_RegisterServiceHTTP::scm_anEOWithIndexes[] = {-1};
+const SAdapterInstanceDef FORTE_RegisterServiceHTTP::scm_astAdapterInstances[] = {
+{g_nStringIdRegisterServiceAdp, g_nStringIdregisterService, false }};
+
+const SFBInterfaceSpec FORTE_RegisterServiceHTTP::scm_stFBInterfaceSpec = {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBInstanceData FORTE_RegisterServiceHTTP::scm_astInternalFBs[] = {
+ {g_nStringIdRegister, g_nStringIdCLIENT_1_2},
+ {g_nStringIdUnregister, g_nStringIdCLIENT_1_2},
+ {g_nStringIdInitFlagReg, g_nStringIdE_SR},
+ {g_nStringIdE_PERMIT, g_nStringIdE_PERMIT},
+ {g_nStringIdCreateRegisterID, g_nStringIdAPPEND_STRING_3},
+ {g_nStringIdF_STRING_TO_WSTRING, g_nStringIdF_STRING_TO_WSTRING},
+ {g_nStringIdE_PERMIT_1, g_nStringIdE_PERMIT},
+ {g_nStringIdInitFlagUnReg, g_nStringIdE_SR},
+ {g_nStringIdCreateUnRegisterID, g_nStringIdAPPEND_STRING_3},
+ {g_nStringIdF_STRING_TO_WSTRING_1, g_nStringIdF_STRING_TO_WSTRING},
+ {g_nStringIdANYToJSON, g_nStringIdANYToJSON},
+};
+
+const SCFB_FBParameter FORTE_RegisterServiceHTTP::scm_astParamters[] = {
+ {4, g_nStringIdIN_1, "STRING#http["},
+ {4, g_nStringIdIN_3, "STRING#/register; POST; application/json]"},
+ {8, g_nStringIdIN_1, "STRING#http["},
+ {8, g_nStringIdIN_3, "STRING#/remove; PUT; application/json]"},
+};
+
+const SCFB_FBConnectionData FORTE_RegisterServiceHTTP::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateRegisterID, g_nStringIdCNF), 4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdREQ), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdCNF), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagReg, g_nStringIdS), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateUnRegisterID, g_nStringIdCNF), 8, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING_1, g_nStringIdREQ), 9},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING_1, g_nStringIdCNF), 9, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagUnReg, g_nStringIdS), 7},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagUnReg, g_nStringIdEO), 7, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdINIT), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdINITO), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT_1, g_nStringIdEI), 6},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT_1, g_nStringIdEO), 6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdREQ), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdCNF), 1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagUnReg, g_nStringIdR), 7},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagReg, g_nStringIdEO), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdINIT), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEO), 3, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdREQ), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdINITO), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdEI), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdCNF), 0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagReg, g_nStringIdR), 2},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdregisterService), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateRegisterID, g_nStringIdREQ), 4},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdunregisterService), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateUnRegisterID, g_nStringIdREQ), 8},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_RegisterServiceHTTP::scm_astFannedOutEventConnections[] = {
+ {1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdREQ), 10},
+ {3, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdREQ), 10},
+ {7, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIddoneUnregister), CCompositeFB::scm_nAdapterMarker |0},
+ {11, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIddoneRegister), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBConnectionData FORTE_RegisterServiceHTTP::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagReg, g_nStringIdQ), 2, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT, g_nStringIdPERMIT), 3},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateRegisterID, g_nStringIdOUT), 4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdIN), 5},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateUnRegisterID, g_nStringIdOUT), 8, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING_1, g_nStringIdIN), 9},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING_1, g_nStringIdOUT), 9, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdID), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdInitFlagUnReg, g_nStringIdQ), 7, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdQI), 1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdF_STRING_TO_WSTRING, g_nStringIdOUT), 5, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdID), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdoutput), 10, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdSD_1), 0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdserviceRegistryEntry), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdANYToJSON, g_nStringIdinput), 10},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateRegisterID, g_nStringIdIN_2), 4},
+};
+
+const SCFB_FBFannedOutConnectionData FORTE_RegisterServiceHTTP::scm_astFannedOutDataConnections[] = {
+ {0, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdRegister, g_nStringIdQI), 0},
+ {4, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdE_PERMIT_1, g_nStringIdPERMIT), 6},
+ {6, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdUnregister, g_nStringIdSD_1), 1},
+ {8, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdCreateUnRegisterID, g_nStringIdIN_2), 8},
+};
+
+const SCFB_FBNData FORTE_RegisterServiceHTTP::scm_stFBNData = {
+ 11, scm_astInternalFBs,
+ 14, scm_astEventConnections,
+ 4, scm_astFannedOutEventConnections,
+ 9, scm_astDataConnections,
+ 4, scm_astFannedOutDataConnections,
+ 4, scm_astParamters
+};
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.h b/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.h
new file mode 100644
index 0000000..97fcedd
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/HTTP/RegisterServiceHTTP.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _REGISTERSERVICEHTTP_H_
+#define _REGISTERSERVICEHTTP_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include "RegisterServiceAdp.h"
+
+class FORTE_RegisterServiceHTTP: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_RegisterServiceHTTP)
+
+private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_RegisterServiceAdp& registerService() {
+ return (*static_cast<FORTE_RegisterServiceAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nregisterServiceAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(0, 0, 0, 1);
+
+ static const SCFB_FBInstanceData scm_astInternalFBs[];
+
+ static const SCFB_FBParameter scm_astParamters[];
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+
+ static const SCFB_FBFannedOutConnectionData scm_astFannedOutDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_RegisterServiceHTTP){
+ };
+
+ virtual ~FORTE_RegisterServiceHTTP(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/QueryService.cpp b/src/modules/arrowhead/serviceRegistry/QueryService.cpp
new file mode 100644
index 0000000..08a0d81
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/QueryService.cpp
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "QueryService.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "QueryService_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_QueryService, g_nStringIdQueryService)
+
+const CStringDictionary::TStringId FORTE_QueryService::scm_anDataInputNames[] = {g_nStringIdserviceQueryForm, g_nStringIdaddress};
+
+const CStringDictionary::TStringId FORTE_QueryService::scm_anDataInputTypeIds[] = {g_nStringIdServiceQueryForm, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_QueryService::scm_anDataOutputNames[] = {g_nStringIdserviceEntries};
+
+const CStringDictionary::TStringId FORTE_QueryService::scm_anDataOutputTypeIds[] = {g_nStringIdARRAY, 10, g_nStringIdServiceRegistryEntry};
+
+const TForteInt16 FORTE_QueryService::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_QueryService::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId FORTE_QueryService::scm_anEventInputNames[] = {g_nStringIdquery};
+
+const TDataIOID FORTE_QueryService::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_QueryService::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_QueryService::scm_anEventOutputNames[] = {g_nStringIdqueried};
+
+const SAdapterInstanceDef FORTE_QueryService::scm_astAdapterInstances[] = {
+{g_nStringIdQueryServicesAdp, g_nStringIdqueryServices, true }};
+
+const SFBInterfaceSpec FORTE_QueryService::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBConnectionData FORTE_QueryService::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdquery), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdquery), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdqueried), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdqueried), -1},
+};
+
+const SCFB_FBConnectionData FORTE_QueryService::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdserviceQueryForm), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdserviceQueryForm), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdserviceEntries), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdserviceEntries), -1},
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdaddress), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdqueryServices, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBNData FORTE_QueryService::scm_stFBNData = {
+ 0, 0,
+ 2, scm_astEventConnections,
+ 0, 0,
+ 3, scm_astDataConnections,
+ 0, 0,
+ 0, 0
+};
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/QueryService.h b/src/modules/arrowhead/serviceRegistry/QueryService.h
new file mode 100644
index 0000000..14c1fbc
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/QueryService.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _QUERYSERVICE_H_
+#define _QUERYSERVICE_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include <forte_servicequeryform.h>
+#include <forte_serviceregistryentry.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+#include "QueryServicesAdp.h"
+
+class FORTE_QueryService: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_QueryService)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ServiceQueryForm &serviceQueryForm() {
+ return *static_cast<CIEC_ServiceQueryForm*>(getDI(0));
+ };
+
+ CIEC_WSTRING &address() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ServiceRegistryEntry *serviceEntries() {
+ return (CIEC_ServiceRegistryEntry*)(*static_cast<CIEC_ARRAY *>(getDO(0)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &serviceEntries_Array() {
+ return *static_cast<CIEC_ARRAY*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventqueryID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventqueriedID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_QueryServicesAdp& queryServices() {
+ return (*static_cast<FORTE_QueryServicesAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nqueryServicesAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 2, 1, 1);
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_QueryService){
+ };
+
+ virtual ~FORTE_QueryService(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.cpp b/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.cpp
new file mode 100644
index 0000000..7c66eed
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.cpp
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "QueryServicesAdp.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "QueryServicesAdp_gen.cpp"
+#endif
+
+DEFINE_ADAPTER_TYPE(FORTE_QueryServicesAdp, g_nStringIdQueryServicesAdp)
+
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anDataInputNames[] = {g_nStringIdserviceEntries};
+
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anDataInputTypeIds[] = {g_nStringIdARRAY, 10, g_nStringIdServiceRegistryEntry};
+
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anDataOutputNames[] = {g_nStringIdserviceQueryForm, g_nStringIdendpoint};
+
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anDataOutputTypeIds[] = {g_nStringIdServiceQueryForm, g_nStringIdWSTRING};
+
+const TDataIOID FORTE_QueryServicesAdp::scm_anEIWith[] = {0, 255};
+const TForteInt16 FORTE_QueryServicesAdp::scm_anEIWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anEventInputNames[] = {g_nStringIdqueried};
+
+const TDataIOID FORTE_QueryServicesAdp::scm_anEOWith[] = {0, 1, 255};
+const TForteInt16 FORTE_QueryServicesAdp::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_QueryServicesAdp::scm_anEventOutputNames[] = {g_nStringIdquery};
+
+const SFBInterfaceSpec FORTE_QueryServicesAdp::scm_stFBInterfaceSpecSocket = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+const SFBInterfaceSpec FORTE_QueryServicesAdp::scm_stFBInterfaceSpecPlug = {
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes,
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes, 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 0, 0
+};
+
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.h b/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.h
new file mode 100644
index 0000000..e3f4dd6
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/QueryServicesAdp.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _QUERYSERVICESADP_H_
+#define _QUERYSERVICESADP_H_
+
+#include <adapter.h>
+#include <typelib.h>
+#include <forte_servicequeryform.h>
+#include <forte_serviceregistryentry.h>
+#include <forte_wstring.h>
+#include <forte_array.h>
+
+class FORTE_QueryServicesAdp: public CAdapter{
+ DECLARE_ADAPTER_TYPE(FORTE_QueryServicesAdp)
+
+private:
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ public:
+ CIEC_ServiceRegistryEntry *serviceEntries() {
+ return (CIEC_ServiceRegistryEntry*)(*static_cast<CIEC_ARRAY *>((isSocket()) ? getDI(0) : getDO(0)))[0]; //the first element marks the start of the array
+ };
+
+ CIEC_ARRAY &serviceEntries_Array() {
+ return *static_cast<CIEC_ARRAY*>((isSocket()) ? getDI(0) : getDO(0));
+ };
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ public:
+ CIEC_ServiceQueryForm &serviceQueryForm() {
+ return *static_cast<CIEC_ServiceQueryForm*>((isSocket()) ? getDO(0) : getDI(0));
+ };
+
+ CIEC_WSTRING &endpoint() {
+ return *static_cast<CIEC_WSTRING*>((isSocket()) ? getDO(1) : getDI(1));
+ };
+
+ public:
+ static const TEventID scm_nEventqueriedID = 0;
+ int queried() {
+ return m_nParentAdapterListEventID + scm_nEventqueriedID;
+ }
+ private:
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ public:
+ static const TEventID scm_nEventqueryID = 0;
+ int query() {
+ return m_nParentAdapterListEventID + scm_nEventqueryID;
+ }
+ private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecSocket;
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecPlug;
+
+ FORTE_ADAPTER_DATA_ARRAY(1, 1, 1, 2, 0);
+
+public:
+ ADAPTER_CTOR(FORTE_QueryServicesAdp){
+ };
+
+ virtual ~FORTE_QueryServicesAdp(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/RegisterService.cpp b/src/modules/arrowhead/serviceRegistry/RegisterService.cpp
new file mode 100644
index 0000000..bdaa377
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/RegisterService.cpp
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "RegisterService.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "RegisterService_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_RegisterService, g_nStringIdRegisterService)
+
+const CStringDictionary::TStringId FORTE_RegisterService::scm_anDataInputNames[] = {g_nStringIdserviceRegistryEntry, g_nStringIdendpoint};
+
+const CStringDictionary::TStringId FORTE_RegisterService::scm_anDataInputTypeIds[] = {g_nStringIdServiceRegistryEntry, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_RegisterService::scm_anEIWithIndexes[] = {0, 3};
+const TDataIOID FORTE_RegisterService::scm_anEIWith[] = {0, 1, 255, 0, 1, 255};
+const CStringDictionary::TStringId FORTE_RegisterService::scm_anEventInputNames[] = {g_nStringIdregister, g_nStringIdunregister};
+
+const TForteInt16 FORTE_RegisterService::scm_anEOWithIndexes[] = {-1, -1, -1};
+const CStringDictionary::TStringId FORTE_RegisterService::scm_anEventOutputNames[] = {g_nStringIddoneRegister, g_nStringIddoneUnregister};
+
+const SAdapterInstanceDef FORTE_RegisterService::scm_astAdapterInstances[] = {
+{g_nStringIdRegisterServiceAdp, g_nStringIdregisterService, true }};
+
+const SFBInterfaceSpec FORTE_RegisterService::scm_stFBInterfaceSpec = {
+ 2, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, 0, 0, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 0, 0, 0,
+ 1,scm_astAdapterInstances};
+
+
+const SCFB_FBConnectionData FORTE_RegisterService::scm_astEventConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdregister), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdregisterService), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdunregister), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdunregisterService), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIddoneRegister), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIddoneRegister), -1},
+ {GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIddoneUnregister), CCompositeFB::scm_nAdapterMarker |0, GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIddoneUnregister), -1},
+};
+
+const SCFB_FBConnectionData FORTE_RegisterService::scm_astDataConnections[] = {
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdserviceRegistryEntry), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdserviceRegistryEntry), CCompositeFB::scm_nAdapterMarker |0},
+ {GENERATE_CONNECTION_PORT_ID_1_ARG(g_nStringIdendpoint), -1, GENERATE_CONNECTION_PORT_ID_2_ARG(g_nStringIdregisterService, g_nStringIdendpoint), CCompositeFB::scm_nAdapterMarker |0},
+};
+
+const SCFB_FBNData FORTE_RegisterService::scm_stFBNData = {
+ 0, 0,
+ 4, scm_astEventConnections,
+ 0, 0,
+ 2, scm_astDataConnections,
+ 0, 0,
+ 0, 0
+};
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/RegisterService.h b/src/modules/arrowhead/serviceRegistry/RegisterService.h
new file mode 100644
index 0000000..3efb2e6
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/RegisterService.h
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _REGISTERSERVICE_H_
+#define _REGISTERSERVICE_H_
+
+#include <cfb.h>
+#include <typelib.h>
+#include <forte_serviceregistryentry.h>
+#include <forte_wstring.h>
+#include "RegisterServiceAdp.h"
+
+class FORTE_RegisterService: public CCompositeFB{
+ DECLARE_FIRMWARE_FB(FORTE_RegisterService)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ServiceRegistryEntry &serviceRegistryEntry() {
+ return *static_cast<CIEC_ServiceRegistryEntry*>(getDI(0));
+ };
+
+ CIEC_WSTRING &endpoint() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ static const TEventID scm_nEventregisterID = 0;
+ static const TEventID scm_nEventunregisterID = 1;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventdoneRegisterID = 0;
+ static const TEventID scm_nEventdoneUnregisterID = 1;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_RegisterServiceAdp& registerService() {
+ return (*static_cast<FORTE_RegisterServiceAdp*>(m_apoAdapters[0]));
+ };
+ static const int scm_nregisterServiceAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 2, 0, 1);
+
+ static const SCFB_FBConnectionData scm_astEventConnections[];
+
+ static const SCFB_FBConnectionData scm_astDataConnections[];
+ static const SCFB_FBNData scm_stFBNData;
+
+public:
+ COMPOSITE_FUNCTION_BLOCK_CTOR(FORTE_RegisterService){
+ };
+
+ virtual ~FORTE_RegisterService(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.cpp b/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.cpp
new file mode 100644
index 0000000..399820b
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.cpp
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "RegisterServiceAdp.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "RegisterServiceAdp_gen.cpp"
+#endif
+
+DEFINE_ADAPTER_TYPE(FORTE_RegisterServiceAdp, g_nStringIdRegisterServiceAdp)
+
+const CStringDictionary::TStringId FORTE_RegisterServiceAdp::scm_anDataOutputNames[] = {g_nStringIdserviceRegistryEntry, g_nStringIdendpoint};
+
+const CStringDictionary::TStringId FORTE_RegisterServiceAdp::scm_anDataOutputTypeIds[] = {g_nStringIdServiceRegistryEntry, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_RegisterServiceAdp::scm_anEIWithIndexes[] = {-1, -1, -1};
+const CStringDictionary::TStringId FORTE_RegisterServiceAdp::scm_anEventInputNames[] = {g_nStringIddoneRegister, g_nStringIddoneUnregister};
+
+const TDataIOID FORTE_RegisterServiceAdp::scm_anEOWith[] = {0, 1, 255, 0, 1, 255};
+const TForteInt16 FORTE_RegisterServiceAdp::scm_anEOWithIndexes[] = {0, 3, -1};
+const CStringDictionary::TStringId FORTE_RegisterServiceAdp::scm_anEventOutputNames[] = {g_nStringIdregisterService, g_nStringIdunregisterService};
+
+const SFBInterfaceSpec FORTE_RegisterServiceAdp::scm_stFBInterfaceSpecSocket = {
+ 2, scm_anEventInputNames, 0, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 0, 0, 0,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+const SFBInterfaceSpec FORTE_RegisterServiceAdp::scm_stFBInterfaceSpecPlug = {
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes,
+ 2, scm_anEventInputNames, 0, 0, 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0, 0,
+ 0, 0
+};
+
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.h b/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.h
new file mode 100644
index 0000000..344c945
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/RegisterServiceAdp.h
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _REGISTERSERVICEADP_H_
+#define _REGISTERSERVICEADP_H_
+
+#include <adapter.h>
+#include <typelib.h>
+#include <forte_serviceregistryentry.h>
+#include <forte_wstring.h>
+
+class FORTE_RegisterServiceAdp: public CAdapter{
+ DECLARE_ADAPTER_TYPE(FORTE_RegisterServiceAdp)
+
+private:
+ private:
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ public:
+ CIEC_ServiceRegistryEntry &serviceRegistryEntry() {
+ return *static_cast<CIEC_ServiceRegistryEntry*>((isSocket()) ? getDO(0) : getDI(0));
+ };
+
+ CIEC_WSTRING &endpoint() {
+ return *static_cast<CIEC_WSTRING*>((isSocket()) ? getDO(1) : getDI(1));
+ };
+
+ public:
+ static const TEventID scm_nEventdoneRegisterID = 0;
+ int doneRegister() {
+ return m_nParentAdapterListEventID + scm_nEventdoneRegisterID;
+ }
+ static const TEventID scm_nEventdoneUnregisterID = 1;
+ int doneUnregister() {
+ return m_nParentAdapterListEventID + scm_nEventdoneUnregisterID;
+ }
+ private:
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ public:
+ static const TEventID scm_nEventregisterServiceID = 0;
+ int registerService() {
+ return m_nParentAdapterListEventID + scm_nEventregisterServiceID;
+ }
+ static const TEventID scm_nEventunregisterServiceID = 1;
+ int unregisterService() {
+ return m_nParentAdapterListEventID + scm_nEventunregisterServiceID;
+ }
+ private:
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecSocket;
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecPlug;
+
+ FORTE_ADAPTER_DATA_ARRAY(2, 2, 0, 2, 0);
+
+public:
+ ADAPTER_CTOR(FORTE_RegisterServiceAdp){
+ };
+
+ virtual ~FORTE_RegisterServiceAdp(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.cpp b/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.cpp
new file mode 100644
index 0000000..1286998
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.cpp
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "ServiceRegistryEntry2ServiceRegistryEntry.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "ServiceRegistryEntry2ServiceRegistryEntry_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_ServiceRegistryEntry2ServiceRegistryEntry, g_nStringIdServiceRegistryEntry2ServiceRegistryEntry)
+
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anDataInputTypeIds[] = {g_nStringIdServiceRegistryEntry};
+
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anDataOutputTypeIds[] = {g_nStringIdServiceRegistryEntry};
+
+const TForteInt16 FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_ServiceRegistryEntry2ServiceRegistryEntry::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+
+void FORTE_ServiceRegistryEntry2ServiceRegistryEntry::executeEvent(int pa_nEIID){
+ if(scm_nEventREQID == pa_nEIID) {
+ OUT() = IN();
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
+
+
diff --git a/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.h b/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.h
new file mode 100644
index 0000000..315e729
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/ServiceRegistryEntry2ServiceRegistryEntry.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _SERVICEREGISTRYENTRY2SERVICEREGISTRYENTRY_H_
+#define _SERVICEREGISTRYENTRY2SERVICEREGISTRYENTRY_H_
+
+#include <funcbloc.h>
+#include <forte_serviceregistryentry.h>
+
+class FORTE_ServiceRegistryEntry2ServiceRegistryEntry: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_ServiceRegistryEntry2ServiceRegistryEntry)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_ServiceRegistryEntry &IN() {
+ return *static_cast<CIEC_ServiceRegistryEntry*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_ServiceRegistryEntry &OUT() {
+ return *static_cast<CIEC_ServiceRegistryEntry*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+
+ void executeEvent(int pa_nEIID);
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_ServiceRegistryEntry2ServiceRegistryEntry){
+ };
+
+ virtual ~FORTE_ServiceRegistryEntry2ServiceRegistryEntry(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.cpp b/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.cpp
new file mode 100644
index 0000000..8b443e6
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.cpp
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_servicequeryform.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_servicequeryform_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ServiceQueryForm, g_nStringIdServiceQueryForm);
+
+CIEC_ServiceQueryForm::CIEC_ServiceQueryForm() :
+ CIEC_STRUCT(g_nStringIdServiceQueryForm, 4, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ServiceQueryForm::scmElementTypes[] = { g_nStringIdArrowheadService, g_nStringIdBOOL, g_nStringIdBOOL,
+ g_nStringIdDINT };
+const CStringDictionary::TStringId CIEC_ServiceQueryForm::scmElementNames[] = { g_nStringIdservice, g_nStringIdmetadataSearch, g_nStringIdpingProviders,
+ g_nStringIdversion };
diff --git a/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.h b/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.h
new file mode 100644
index 0000000..4dd073f
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/forte_servicequeryform.h
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_SERVICEQUERYFORM_H_
+#define _FORTE_SERVICEQUERYFORM_H_
+
+#include "forte_struct.h"
+#include "forte_arrowheadservice.h"
+#include <forte_bool.h>
+#include "forte_dint.h"
+
+class CIEC_ServiceQueryForm : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ServiceQueryForm)
+
+ public:
+ CIEC_ServiceQueryForm();
+
+ virtual ~CIEC_ServiceQueryForm() {
+ }
+
+ CIEC_ArrowheadService &service() {
+ return *static_cast<CIEC_ArrowheadService*>(&getMembers()[0]);
+ }
+
+ CIEC_BOOL &metadataSearch() {
+ return *static_cast<CIEC_BOOL*>(&getMembers()[1]);
+ }
+
+
+ CIEC_BOOL &pingProviders() {
+ return *static_cast<CIEC_BOOL*>(&getMembers()[2]);
+ }
+
+ CIEC_DINT &version() {
+ return *static_cast<CIEC_DINT*>(&getMembers()[3]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_SERVICEQUERYFORM_H_
diff --git a/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.cpp b/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.cpp
new file mode 100644
index 0000000..f990e72
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.cpp
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_serviceregistryentry.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_serviceregistryentry_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(ServiceRegistryEntry, g_nStringIdServiceRegistryEntry);
+
+CIEC_ServiceRegistryEntry::CIEC_ServiceRegistryEntry() :
+ CIEC_STRUCT(g_nStringIdServiceRegistryEntry, 7, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_ServiceRegistryEntry::scmElementTypes[] = { g_nStringIdArrowheadService, g_nStringIdArrowheadSystem, g_nStringIdWSTRING,
+ g_nStringIdDINT, g_nStringIdBOOL, g_nStringIdDINT, g_nStringIdWSTRING };
+const CStringDictionary::TStringId CIEC_ServiceRegistryEntry::scmElementNames[] = { g_nStringIdprovidedService, g_nStringIdprovider, g_nStringIdserviceURI,
+ g_nStringIdversion, g_nStringIdudp, g_nStringIdttl, g_nStringIdmetadata };
diff --git a/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.h b/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.h
new file mode 100644
index 0000000..994da0a
--- /dev/null
+++ b/src/modules/arrowhead/serviceRegistry/forte_serviceregistryentry.h
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_SERVICEREGISTRYENTRY_H_
+#define _FORTE_SERVICEREGISTRYENTRY_H_
+
+#include "forte_struct.h"
+#include "forte_arrowheadservice.h"
+#include "forte_arrowheadsystem.h"
+#include "forte_dint.h"
+#include "forte_wstring.h"
+#include "forte_bool.h"
+
+class CIEC_ServiceRegistryEntry : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(ServiceRegistryEntry)
+
+ public:
+ CIEC_ServiceRegistryEntry();
+
+ virtual ~CIEC_ServiceRegistryEntry() {
+ }
+
+ CIEC_ArrowheadService &providedService() {
+ return *static_cast<CIEC_ArrowheadService*>(&getMembers()[0]);
+ }
+
+ CIEC_ArrowheadSystem &provider() {
+ return *static_cast<CIEC_ArrowheadSystem*>(&getMembers()[1]);
+ }
+
+ CIEC_WSTRING &serviceURI() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[2]);
+ }
+
+ CIEC_DINT &version() {
+ return *static_cast<CIEC_DINT*>(&getMembers()[3]);
+ }
+
+ CIEC_BOOL &udp() {
+ return *static_cast<CIEC_BOOL*>(&getMembers()[4]);
+ }
+ CIEC_DINT &ttl() {
+ return *static_cast<CIEC_DINT*>(&getMembers()[5]);
+ }
+
+ CIEC_WSTRING &metadata() {
+ return *static_cast<CIEC_WSTRING*>(&getMembers()[6]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_SERVICEREGISTRYENTRY_H_
diff --git a/src/modules/conmeleon_c1/CMakeLists.txt b/src/modules/conmeleon_c1/CMakeLists.txt
index d219c61..0efebf1 100644
--- a/src/modules/conmeleon_c1/CMakeLists.txt
+++ b/src/modules/conmeleon_c1/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH and Herwig Eichler, www.conmeleon.org
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl and Herwig Eichler
+# Copyright (c) 2016 fortiss GmbH and Herwig Eichler, www.conmeleon.org
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl and Herwig Eichler
# *******************************************************************************/
forte_add_module(CONMELEON_C1 "Interacting with the CONMELEON C1 IO board")
diff --git a/src/modules/conmeleon_c1/gpio/gpiopin.cpp b/src/modules/conmeleon_c1/gpio/gpiopin.cpp
index 6ab9377..b5e9b63 100644
--- a/src/modules/conmeleon_c1/gpio/gpiopin.cpp
+++ b/src/modules/conmeleon_c1/gpio/gpiopin.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/gpio/gpiopin.h b/src/modules/conmeleon_c1/gpio/gpiopin.h
index 623e280..960d2b6 100644
--- a/src/modules/conmeleon_c1/gpio/gpiopin.h
+++ b/src/modules/conmeleon_c1/gpio/gpiopin.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/processinterface.cpp b/src/modules/conmeleon_c1/processinterface.cpp
index 77c56df..a826e5b 100644
--- a/src/modules/conmeleon_c1/processinterface.cpp
+++ b/src/modules/conmeleon_c1/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH and Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl and Herwig Eichler
diff --git a/src/modules/conmeleon_c1/processinterface.h b/src/modules/conmeleon_c1/processinterface.h
index 45799b8..7bf3548 100644
--- a/src/modules/conmeleon_c1/processinterface.h
+++ b/src/modules/conmeleon_c1/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH and Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl and Herwig Eichler
diff --git a/src/modules/conmeleon_c1/spi/ads1018.cpp b/src/modules/conmeleon_c1/spi/ads1018.cpp
index 5365d9e..d477be1 100644
--- a/src/modules/conmeleon_c1/spi/ads1018.cpp
+++ b/src/modules/conmeleon_c1/spi/ads1018.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/spi/ads1018.h b/src/modules/conmeleon_c1/spi/ads1018.h
index e90cced..059a828 100644
--- a/src/modules/conmeleon_c1/spi/ads1018.h
+++ b/src/modules/conmeleon_c1/spi/ads1018.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/spi/spidevice.cpp b/src/modules/conmeleon_c1/spi/spidevice.cpp
index 8c8cd84..5d14460 100644
--- a/src/modules/conmeleon_c1/spi/spidevice.cpp
+++ b/src/modules/conmeleon_c1/spi/spidevice.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/spi/spidevice.h b/src/modules/conmeleon_c1/spi/spidevice.h
index 501869a..08cff64 100644
--- a/src/modules/conmeleon_c1/spi/spidevice.h
+++ b/src/modules/conmeleon_c1/spi/spidevice.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/util/fileres.cpp b/src/modules/conmeleon_c1/util/fileres.cpp
index 17cb065..c8b14fd 100644
--- a/src/modules/conmeleon_c1/util/fileres.cpp
+++ b/src/modules/conmeleon_c1/util/fileres.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/util/fileres.h b/src/modules/conmeleon_c1/util/fileres.h
index 8f677fb..b607c84 100644
--- a/src/modules/conmeleon_c1/util/fileres.h
+++ b/src/modules/conmeleon_c1/util/fileres.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/conmeleon_c1/util/uncopyable.h b/src/modules/conmeleon_c1/util/uncopyable.h
index 02d0b1d..a2caa39 100644
--- a/src/modules/conmeleon_c1/util/uncopyable.h
+++ b/src/modules/conmeleon_c1/util/uncopyable.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 Herwig Eichler, www.conmeleon.org
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Herwig Eichler - initial API and implementation and initial documentation
diff --git a/src/modules/convert/BOOL2BOOL.cpp b/src/modules/convert/BOOL2BOOL.cpp
index 1b97dc0..7a1ede8 100644
--- a/src/modules/convert/BOOL2BOOL.cpp
+++ b/src/modules/convert/BOOL2BOOL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/BOOL2BOOL.h b/src/modules/convert/BOOL2BOOL.h
index ebd9712..ef4bd7b 100644
--- a/src/modules/convert/BOOL2BOOL.h
+++ b/src/modules/convert/BOOL2BOOL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/BYTE2BYTE.cpp b/src/modules/convert/BYTE2BYTE.cpp
index 4286aca..d3c1af3 100644
--- a/src/modules/convert/BYTE2BYTE.cpp
+++ b/src/modules/convert/BYTE2BYTE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/BYTE2BYTE.h b/src/modules/convert/BYTE2BYTE.h
index b7e07cb..9c83bd5 100644
--- a/src/modules/convert/BYTE2BYTE.h
+++ b/src/modules/convert/BYTE2BYTE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/CMakeLists.txt b/src/modules/convert/CMakeLists.txt
index 3f847c3..9698b52 100644
--- a/src/modules/convert/CMakeLists.txt
+++ b/src/modules/convert/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010, 2011 Profactor GmbH, ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Micheal Hofmann, Alois Zoitl
+# Copyright (c) 2010, 2011 Profactor GmbH, ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Micheal Hofmann, Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(CONVERT "Convert Function Blocks")
diff --git a/src/modules/convert/DINT2DINT.cpp b/src/modules/convert/DINT2DINT.cpp
index b1a3556..803a5c3 100644
--- a/src/modules/convert/DINT2DINT.cpp
+++ b/src/modules/convert/DINT2DINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/DINT2DINT.h b/src/modules/convert/DINT2DINT.h
index a33e778..306d83f 100644
--- a/src/modules/convert/DINT2DINT.h
+++ b/src/modules/convert/DINT2DINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/DWORD2DWORD.cpp b/src/modules/convert/DWORD2DWORD.cpp
index 5706e32..e374aa7 100644
--- a/src/modules/convert/DWORD2DWORD.cpp
+++ b/src/modules/convert/DWORD2DWORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/DWORD2DWORD.h b/src/modules/convert/DWORD2DWORD.h
index dc58a64..e03ff33 100644
--- a/src/modules/convert/DWORD2DWORD.h
+++ b/src/modules/convert/DWORD2DWORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/INT2INT.cpp b/src/modules/convert/INT2INT.cpp
index cf1cb25..c777d91 100644
--- a/src/modules/convert/INT2INT.cpp
+++ b/src/modules/convert/INT2INT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/INT2INT.h b/src/modules/convert/INT2INT.h
index 7759f47..7bebe6f 100644
--- a/src/modules/convert/INT2INT.h
+++ b/src/modules/convert/INT2INT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/LREAL2LREAL.cpp b/src/modules/convert/LREAL2LREAL.cpp
index db99dc5..9ac6f7f 100644
--- a/src/modules/convert/LREAL2LREAL.cpp
+++ b/src/modules/convert/LREAL2LREAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/LREAL2LREAL.h b/src/modules/convert/LREAL2LREAL.h
index bc28396..76dd8b8 100644
--- a/src/modules/convert/LREAL2LREAL.h
+++ b/src/modules/convert/LREAL2LREAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/REAL2REAL.cpp b/src/modules/convert/REAL2REAL.cpp
index f124d79..cdd5afd 100644
--- a/src/modules/convert/REAL2REAL.cpp
+++ b/src/modules/convert/REAL2REAL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/REAL2REAL.h b/src/modules/convert/REAL2REAL.h
index 80d65d2..eb86595 100644
--- a/src/modules/convert/REAL2REAL.h
+++ b/src/modules/convert/REAL2REAL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/SINT2SINT.cpp b/src/modules/convert/SINT2SINT.cpp
index f9a0cdc..688a081 100644
--- a/src/modules/convert/SINT2SINT.cpp
+++ b/src/modules/convert/SINT2SINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/SINT2SINT.h b/src/modules/convert/SINT2SINT.h
index 4387192..b7d43da 100644
--- a/src/modules/convert/SINT2SINT.h
+++ b/src/modules/convert/SINT2SINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/STRING2STRING.cpp b/src/modules/convert/STRING2STRING.cpp
index 27bc7fa..a216da6 100644
--- a/src/modules/convert/STRING2STRING.cpp
+++ b/src/modules/convert/STRING2STRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/STRING2STRING.h b/src/modules/convert/STRING2STRING.h
index 0f5d7b9..1b7fab3 100644
--- a/src/modules/convert/STRING2STRING.h
+++ b/src/modules/convert/STRING2STRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/TIME2TIME.h b/src/modules/convert/TIME2TIME.h
index bd154f5..1efa138 100644
--- a/src/modules/convert/TIME2TIME.h
+++ b/src/modules/convert/TIME2TIME.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/UDINT2UDINT.cpp b/src/modules/convert/UDINT2UDINT.cpp
index 28cf0b7..df6b6a5 100644
--- a/src/modules/convert/UDINT2UDINT.cpp
+++ b/src/modules/convert/UDINT2UDINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/UDINT2UDINT.h b/src/modules/convert/UDINT2UDINT.h
index af2053d..9a595cb 100644
--- a/src/modules/convert/UDINT2UDINT.h
+++ b/src/modules/convert/UDINT2UDINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/UINT2UINT.cpp b/src/modules/convert/UINT2UINT.cpp
index 7438db4..d987107 100644
--- a/src/modules/convert/UINT2UINT.cpp
+++ b/src/modules/convert/UINT2UINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/UINT2UINT.h b/src/modules/convert/UINT2UINT.h
index 88e239a..329b0a7 100644
--- a/src/modules/convert/UINT2UINT.h
+++ b/src/modules/convert/UINT2UINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/USINT2USINT.cpp b/src/modules/convert/USINT2USINT.cpp
index 7e68878..33ebe7f 100644
--- a/src/modules/convert/USINT2USINT.cpp
+++ b/src/modules/convert/USINT2USINT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/USINT2USINT.h b/src/modules/convert/USINT2USINT.h
index 0134b19..c07283b 100644
--- a/src/modules/convert/USINT2USINT.h
+++ b/src/modules/convert/USINT2USINT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/WORD2WORD.cpp b/src/modules/convert/WORD2WORD.cpp
index ef9152f..ea3d19c 100644
--- a/src/modules/convert/WORD2WORD.cpp
+++ b/src/modules/convert/WORD2WORD.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/WORD2WORD.h b/src/modules/convert/WORD2WORD.h
index 2fe4499..0d5983e 100644
--- a/src/modules/convert/WORD2WORD.h
+++ b/src/modules/convert/WORD2WORD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/WSTRING2WSTRING.cpp b/src/modules/convert/WSTRING2WSTRING.cpp
index c83aea0..d2ff968 100644
--- a/src/modules/convert/WSTRING2WSTRING.cpp
+++ b/src/modules/convert/WSTRING2WSTRING.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/convert/WSTRING2WSTRING.h b/src/modules/convert/WSTRING2WSTRING.h
index 1d9187b..fff1c7e 100644
--- a/src/modules/convert/WSTRING2WSTRING.h
+++ b/src/modules/convert/WSTRING2WSTRING.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 Profactor GmbH, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/modules/eclipseSCADA_SFP/CMakeLists.txt b/src/modules/eclipseSCADA_SFP/CMakeLists.txt
index 79f997e..9b4b977 100644
--- a/src/modules/eclipseSCADA_SFP/CMakeLists.txt
+++ b/src/modules/eclipseSCADA_SFP/CMakeLists.txt
@@ -1,23 +1,27 @@
#*******************************************************************************
-# * Copyright (c) 2014 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2014 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
# Interface to the EclipseSCADA SFP
#############################################################################
-forte_add_network_layer(EclipseSCADA_SFP OFF "sfp" CES_SFP_Layer essfplayer "Layer for providing and receiving data to EclipseSCADA")
+forte_add_network_layer(EclipseSCADA_SFP OFF "sfp" CES_SFP_Layer essfplayer "Layer for providing and receiving data to EclipseSCADA, DEPRECATED: Layer will be removed in 4diac FORTE 1.12.0")
SET(FORTE_ECLIPSE_SCADA_SFP_SERVER_LIB_DIR "" CACHE PATH "Path to EclipseSCADA SFP Server library directory (leave empty for installed source code)")
if(FORTE_COM_EclipseSCADA_SFP)
+
+ message(WARNING, "EclipseSCADA_SFP communication layer is deprecated! It will be removed in the 4diac FORTE 1.12.0 release!")
+
forte_add_sourcefile_hcpp(essfphandler)
forte_add_handler(CEclipseSCADASFPHandler essfphandler)
diff --git a/src/modules/eclipseSCADA_SFP/essfphandler.cpp b/src/modules/eclipseSCADA_SFP/essfphandler.cpp
index 339158a..d7d55bf 100644
--- a/src/modules/eclipseSCADA_SFP/essfphandler.cpp
+++ b/src/modules/eclipseSCADA_SFP/essfphandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/eclipseSCADA_SFP/essfphandler.h b/src/modules/eclipseSCADA_SFP/essfphandler.h
index d0bcf9c..9ca2d71 100644
--- a/src/modules/eclipseSCADA_SFP/essfphandler.h
+++ b/src/modules/eclipseSCADA_SFP/essfphandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/eclipseSCADA_SFP/essfplayer.cpp b/src/modules/eclipseSCADA_SFP/essfplayer.cpp
index a680740..f20ce15 100644
--- a/src/modules/eclipseSCADA_SFP/essfplayer.cpp
+++ b/src/modules/eclipseSCADA_SFP/essfplayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/eclipseSCADA_SFP/essfplayer.h b/src/modules/eclipseSCADA_SFP/essfplayer.h
index 921df78..962d41d 100644
--- a/src/modules/eclipseSCADA_SFP/essfplayer.h
+++ b/src/modules/eclipseSCADA_SFP/essfplayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/embrick/CMakeLists.txt b/src/modules/embrick/CMakeLists.txt
index 982a267..58fdf86 100644
--- a/src/modules/embrick/CMakeLists.txt
+++ b/src/modules/embrick/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Johannes Messmer
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Johannes Messmer
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/modules/embrick/handler/bus.cpp b/src/modules/embrick/handler/bus.cpp
index 78020c7..f4d9941 100644
--- a/src/modules/embrick/handler/bus.cpp
+++ b/src/modules/embrick/handler/bus.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -25,24 +26,24 @@
const char * const EmbrickBusHandler::scmSlaveUpdateFailed = "Update of slave failed.";
const char * const EmbrickBusHandler::scmNoSlavesFound = "No slave modules found.";
-EmbrickBusHandler::EmbrickBusHandler(CDeviceExecution& paDeviceExecution) : forte::core::IO::IODeviceMultiController(paDeviceExecution),
- spi(0), slaveSelect(0), slaves(0), slaveCount(0), mLoopActive(false), sList(0) {
+EmbrickBusHandler::EmbrickBusHandler(CDeviceExecution& paDeviceExecution) : forte::core::io::IODeviceMultiController(paDeviceExecution),
+ mSpi(0), mSlaveSelect(0), mSlaves(0), mSlaveCount(0), mLoopActive(false), mSList(0) {
// Set init time
struct timespec ts;
// TODO Check compile error. Had to to add rt libary to c++ make flags
clock_gettime(CLOCK_MONOTONIC, &ts);
- initTime = ts.tv_sec;
- lastTransfer = micros();
+ mInitTime = ts.tv_sec;
+ mLastTransfer = micros();
// Default config
- config.BusInterface = 1;
- config.BusSelectPin = 49;
- config.BusInitSpeed = EmbrickSPIHandler::DefaultSpiSpeed;
- config.BusLoopSpeed = EmbrickSPIHandler::MaxSpiSpeed;
+ mConfig.mBusInterface = 1;
+ mConfig.mBusSelectPin = 49;
+ mConfig.mBusInitSpeed = EmbrickSPIHandler::scmDefaultSpiSpeed;
+ mConfig.mBusLoopSpeed = EmbrickSPIHandler::scmMaxSpiSpeed;
}
-void EmbrickBusHandler::setConfig(struct forte::core::IO::IODeviceController::Config* config) {
+void EmbrickBusHandler::setConfig(struct forte::core::io::IODeviceController::Config* paConfig) {
// Check if BusHandler is active -> configuration changes are not allowed
if (isAlive()) {
DEVLOG_ERROR(
@@ -50,31 +51,31 @@
return;
}
- this->config = *static_cast<Config*>(config);
+ this->mConfig = *static_cast<Config*>(paConfig);
}
const char* EmbrickBusHandler::init() {
// Start handlers
- spi = new EmbrickSPIHandler(config.BusInterface);
- slaveSelect = new EmbrickPinHandler(config.BusSelectPin);
- slaves = new TSlaveList();
+ mSpi = new EmbrickSPIHandler(mConfig.mBusInterface);
+ mSlaveSelect = new EmbrickPinHandler(mConfig.mBusSelectPin);
+ mSlaves = new TSlaveList();
// Check handlers
if (checkHandlerError()) {
- return error;
+ return mError;
}
// Set SPI sped for initialization
- spi->setSpeed(config.BusInitSpeed);
+ mSpi->setSpeed(mConfig.mBusInitSpeed);
// Disable slave select -> reset all slaves
- slaveSelect->disable();
+ mSlaveSelect->disable();
// Wait for reset
sleep(1);
// Enable slave select -> the first slave waits for initialization
- slaveSelect->enable();
+ mSlaveSelect->enable();
// Wait for init
microsleep(SyncGapDuration * 2);
@@ -87,11 +88,11 @@
EmbrickSlaveHandler *slave = EmbrickSlaveHandler::sendInit(this, slaveCounter);
if (slave != 0) {
- slaves->pushBack(slave);
+ mSlaves->pushBack(slave);
// Activate next slave by sending the 'SelectNextSlave' command to the current slave
// It enables the slave select pin for the next slave on the bus
- transfer(slave->address, SelectNextSlave);
+ transfer(slave->mAddress, SelectNextSlave);
slaveCounter++;
attempts = 0;
@@ -100,46 +101,48 @@
microsleep(SyncGapDuration * 2);
} while (++attempts < 3);
- slaveCount = slaveCounter - 1;
+ mSlaveCount = slaveCounter - 1;
- if (slaveCount == 0) {
+ if (mSlaveCount == 0) {
return scmNoSlavesFound;
}
// Increase the speed of the bus for data transfers
- spi->setSpeed(config.BusLoopSpeed);
+ mSpi->setSpeed(mConfig.mBusLoopSpeed);
return 0;
}
void EmbrickBusHandler::deInit() {
// Free memory -> delete all slave instances and hardware handlers
- TSlaveList::Iterator itEnd(slaves->end());
- for (TSlaveList::Iterator it = slaves->begin(); it != itEnd; ++it)
+ TSlaveList::Iterator itEnd(mSlaves->end());
+ for(TSlaveList::Iterator it = mSlaves->begin(); it != itEnd; ++it) {
delete *it;
- delete slaves;
- slaves = 0;
+ }
+ delete mSlaves;
+ mSlaves = 0;
- delete spi;
- delete slaveSelect;
+ delete mSpi;
+ delete mSlaveSelect;
}
-forte::core::IO::IOHandle* EmbrickBusHandler::initHandle(
- forte::core::IO::IODeviceMultiController::HandleDescriptor *handleDescriptor) {
- HandleDescriptor desc = *static_cast<HandleDescriptor*>(handleDescriptor);
+forte::core::io::IOHandle* EmbrickBusHandler::initHandle(
+ forte::core::io::IODeviceController::HandleDescriptor *paHandleDescriptor) {
+ HandleDescriptor &desc = static_cast<HandleDescriptor&>(*paHandleDescriptor);
- EmbrickSlaveHandler *slave = getSlave(desc.slaveIndex);
- if (slave == 0)
+ EmbrickSlaveHandler *slave = getSlave(desc.mSlaveIndex);
+ if(slave == 0) {
return 0;
+ }
- switch (desc.type) {
+ switch (desc.mType) {
case Bit:
- return new EmbrickBitSlaveHandle(this, desc.direction, desc.offset, desc.position,
+ return new EmbrickBitSlaveHandle(this, desc.mDirection, desc.mOffset, desc.mPosition,
slave);
case Analog:
- return new EmbrickAnalogSlaveHandle(this, desc.direction, desc.offset, slave);
+ return new EmbrickAnalogSlaveHandle(this, desc.mDirection, desc.mOffset, slave);
case Analog10:
- return new EmbrickAnalog10SlaveHandle(this, desc.direction, desc.offset, slave);
+ return new EmbrickAnalog10SlaveHandle(this, desc.mDirection, desc.mOffset, slave);
}
return 0;
@@ -147,24 +150,24 @@
void EmbrickBusHandler::prepareLoop() {
// Get current time
- clock_gettime(CLOCK_MONOTONIC, &nextLoop);
+ clock_gettime(CLOCK_MONOTONIC, &mNextLoop);
// Scheduling
// TODO Combine slaves list and scheduling information
// DISCUSS Speed of array and forte_list?
- TSlaveList::Iterator it = slaves->begin();
- sList = (struct SEntry**) forte_malloc(sizeof(struct SEntry*) * slaveCount);
- for (int i = 0; i < slaveCount; i++) {
- sList[i] = (struct SEntry*) forte_malloc(sizeof(struct SEntry));
- sList[i]->slave = *it;
- sList[i]->nextDeadline = nextLoop;
- sList[i]->lastDuration = 0;
- sList[i]->forced = false;
- sList[i]->delayed = false;
+ TSlaveList::Iterator it = mSlaves->begin();
+ mSList = (struct SEntry**) forte_malloc(sizeof(struct SEntry*) * mSlaveCount);
+ for (int i = 0; i < mSlaveCount; i++) {
+ mSList[i] = (struct SEntry*) forte_malloc(sizeof(struct SEntry));
+ mSList[i]->mSlave = *it;
+ mSList[i]->mNextDeadline = mNextLoop;
+ mSList[i]->mLastDuration = 0;
+ mSList[i]->mForced = false;
+ mSList[i]->mDelayed = false;
++it;
}
- sNext = sList[0];
+ mSNext = mSList[0];
mLoopActive = false;
}
@@ -180,23 +183,23 @@
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
- if(timespecLessThan(&now, &sNext->nextDeadline)){ //only wait if the deadline is in the future
+ if(timespecLessThan(&now, &mSNext->mNextDeadline)){ //only wait if the deadline is in the future
struct timespec timeToSleep;
- timespecSub(&sNext->nextDeadline, &now, &timeToSleep);
+ timespecSub(&mSNext->mNextDeadline, &now, &timeToSleep);
mForceLoop.timedWait(timeToSleep.tv_sec * 1E9 + timeToSleep.tv_nsec);
}
// Set current slave
mLoopActive = true;
- sCur = sNext;
+ sCur = mSNext;
// Set next deadline of current slave
- clock_gettime(CLOCK_MONOTONIC, &sCur->nextDeadline);
- addTime(sCur->nextDeadline, 1000000 / sCur->slave->config.UpdateInterval);
+ clock_gettime(CLOCK_MONOTONIC, &sCur->mNextDeadline);
+ addTime(sCur->mNextDeadline, 1000000 / sCur->mSlave->mConfig.mUpdateInterval);
// Remove delayed and forced flag
- sCur->forced = false;
- sCur->delayed = false;
+ sCur->mForced = false;
+ sCur->mDelayed = false;
// Remove lock during blocking operation -> allows forced update interrupts
mSyncObject.unlock();
@@ -204,11 +207,12 @@
uint64_t ms = micros();
// Perform update on current slave
- if (-1 == sCur->slave->update()) {
- error = scmSlaveUpdateFailed;
+ if (-1 == sCur->mSlave->update()) {
+ mError = scmSlaveUpdateFailed;
// Check for critical bus errors
- if (checkHandlerError() || hasError())
+ if(checkHandlerError() || hasError()) {
break;
+ }
}
// Search for next deadline -> set lock to avoid changes of list
@@ -216,15 +220,16 @@
mLoopActive = false;
// Store update duration
- sCur->lastDuration = (uint16_t) (micros() - ms);
+ sCur->mLastDuration = (uint16_t) (micros() - ms);
// If current slave is forced again -> add update duration to deadline
- if (sCur->forced)
- addTime(sCur->nextDeadline, sCur->lastDuration);
+ if(sCur->mForced) {
+ addTime(sCur->mNextDeadline, sCur->mLastDuration);
+ }
- for (unsigned int i = 0; i < slaveCount; i++) {
- if (timespecLessThan(&sList[i]->nextDeadline, &sNext->nextDeadline)) {
- sNext = sList[i];
+ for (unsigned int i = 0; i < mSlaveCount; i++) {
+ if (timespecLessThan(&mSList[i]->mNextDeadline, &mSNext->mNextDeadline)) {
+ mSNext = mSList[i];
}
}
}
@@ -235,63 +240,65 @@
void EmbrickBusHandler::cleanLoop() {
// Free memory of list
- for (int i = 0; i < slaveCount; i++)
- forte_free(sList[i]);
- forte_free(sList);
- sList = 0;
+ for(int i = 0; i < mSlaveCount; i++) {
+ forte_free(mSList[i]);
+ }
+ forte_free(mSList);
+ mSList = 0;
}
bool EmbrickBusHandler::checkHandlerError() {
- if (spi->hasError()) {
- error = spi->error;
+ if (mSpi->hasError()) {
+ mError = mSpi->mError;
return true;
}
- if (slaveSelect->hasError()) {
- error = slaveSelect->error;
+ if (mSlaveSelect->hasError()) {
+ mError = mSlaveSelect->paError;
return true;
}
return false;
}
-EmbrickSlaveHandler* EmbrickBusHandler::getSlave(int index) {
- if (slaves == 0) {
+EmbrickSlaveHandler* EmbrickBusHandler::getSlave(int paIndex) {
+ if (mSlaves == 0) {
return 0;
}
- TSlaveList::Iterator itEnd = slaves->end();
+ TSlaveList::Iterator itEnd = mSlaves->end();
int i = 0;
- for (TSlaveList::Iterator it = slaves->begin(); it != itEnd; ++it, i++)
- if (index == i) {
+ for(TSlaveList::Iterator it = mSlaves->begin(); it != itEnd; ++it, i++) {
+ if (paIndex == i) {
return *it;
}
+ }
return 0;
}
-void EmbrickBusHandler::forceUpdate(int index) {
+void EmbrickBusHandler::forceUpdate(int paIndex) {
mSyncObject.lock();
- if (sList == 0 || slaveCount <= index || sList[index]->forced) {
+ if (mSList == 0 || mSlaveCount <= paIndex || mSList[paIndex]->mForced) {
mSyncObject.unlock();
return;
}
- SEntry *e = sList[index];
+ SEntry *e = mSList[paIndex];
- e->forced = true;
- clock_gettime(CLOCK_MONOTONIC, &e->nextDeadline);
+ e->mForced = true;
+ clock_gettime(CLOCK_MONOTONIC, &e->mNextDeadline);
if (!mLoopActive) {
- if(!sNext->delayed && !sNext->forced) {
- struct timespec ts = e->nextDeadline;
- addTime(ts, e->lastDuration * 2);
+ if(!mSNext->mDelayed && !mSNext->mForced) {
+ struct timespec ts = e->mNextDeadline;
+ addTime(ts, e->mLastDuration * 2);
- if(!timespecLessThan(&ts, &sNext->nextDeadline)) {
- sNext->delayed = true;
+ if(!timespecLessThan(&ts, &mSNext->mNextDeadline)) {
+ mSNext->mDelayed = true;
}
- sNext = e;
+ mSNext = e;
}
// Force next loop
@@ -300,38 +307,41 @@
mSyncObject.unlock();
}
-void EmbrickBusHandler::addSlaveHandle(int index, forte::core::IO::IOHandle* handle) {
- EmbrickSlaveHandler* slave = getSlave(index);
- if (slave == 0)
+void EmbrickBusHandler::addSlaveHandle(int paIndex, forte::core::io::IOHandle* paHandle) {
+ EmbrickSlaveHandler* slave = getSlave(paIndex);
+ if(slave == 0) {
return;
+ }
- slave->addHandle((EmbrickSlaveHandle*) handle);
+ slave->addHandle((EmbrickSlaveHandle*) paHandle);
}
-void EmbrickBusHandler::dropSlaveHandles(int index) {
- EmbrickSlaveHandler* slave = getSlave(index);
- if (slave == 0)
+void EmbrickBusHandler::dropSlaveHandles(int paIndex) {
+ EmbrickSlaveHandler* slave = getSlave(paIndex);
+ if(slave == 0) {
return;
+ }
slave->dropHandles();
}
-bool EmbrickBusHandler::isSlaveAvailable(int index) {
- return getSlave(index) != 0;
+bool EmbrickBusHandler::isSlaveAvailable(int paIndex) {
+ return getSlave(paIndex) != 0;
}
-bool EmbrickBusHandler::checkSlaveType(int index, int type) {
- EmbrickSlaveHandler* slave = getSlave(index);
- if (slave == 0)
+bool EmbrickBusHandler::checkSlaveType(int paIndex, int paType) {
+ EmbrickSlaveHandler* slave = getSlave(paIndex);
+ if(slave == 0) {
return false;
+ }
- return slave->type == type;
+ return slave->mType == paType;
}
-bool EmbrickBusHandler::transfer(unsigned int target, Command cmd,
- unsigned char* dataSend, int dataSendLength, unsigned char* dataReceive,
- int dataReceiveLength, EmbrickSlaveHandler::SlaveStatus* status, CSyncObject *syncMutex) {
- unsigned int dataLength = std::max(dataSendLength, dataReceiveLength + 1); // + 1 status byte
+bool EmbrickBusHandler::transfer(unsigned int paTarget, Command paCmd,
+ unsigned char* paDataSend, int paDataSendLength, unsigned char* paDataReceive,
+ int paDataReceiveLength, EmbrickSlaveHandler::SlaveStatus* paStatus, CSyncObject *paSyncMutex) {
+ unsigned int dataLength = std::max(paDataSendLength, paDataReceiveLength + 1); // + 1 status byte
unsigned int bufferLength = sizeof(EmbrickHeaderPackage) + dataLength + 1; // + 1 checksum byte
if (bufferLength > TransferBufferLength) {
@@ -339,27 +349,30 @@
return false;
}
- memset(sendBuffer, 0, bufferLength);
- memset(recvBuffer, 0, bufferLength);
+ memset(mSendBuffer, 0, bufferLength);
+ memset(mRecvBuffer, 0, bufferLength);
// Prepare header
- EmbrickHeaderPackage* header = (EmbrickHeaderPackage*) sendBuffer;
+ EmbrickHeaderPackage* header = (EmbrickHeaderPackage*) mSendBuffer;
- header->address = (char) target;
- header->command = cmd;
- header->checksum = calcChecksum((unsigned char*) header, 2);
+ header->mAddress = (char) paTarget;
+ header->mCommand = paCmd;
+ header->mChecksum = calcChecksum((unsigned char*) header, 2);
- if (syncMutex)
- syncMutex->lock();
- memcpy(sendBuffer + sizeof(EmbrickHeaderPackage), dataSend, dataSendLength);
- if (syncMutex)
- syncMutex->unlock();
- sendBuffer[sizeof(EmbrickHeaderPackage) + dataSendLength] = calcChecksum(
- sendBuffer + sizeof(EmbrickHeaderPackage), dataSendLength);
+ if(paSyncMutex) {
+ paSyncMutex->lock();
+ }
+ memcpy(mSendBuffer + sizeof(EmbrickHeaderPackage), paDataSend, paDataSendLength);
+ if(paSyncMutex) {
+ paSyncMutex->unlock();
+ }
+ mSendBuffer[sizeof(EmbrickHeaderPackage) + paDataSendLength] = calcChecksum(
+ mSendBuffer + sizeof(EmbrickHeaderPackage), paDataSendLength);
// Invert data of master
- for (unsigned int i = 0; i < bufferLength; i++)
- sendBuffer[i] = (unsigned char) ~sendBuffer[i];
+ for(unsigned int i = 0; i < bufferLength; i++) {
+ mSendBuffer[i] = (unsigned char) ~mSendBuffer[i];
+ }
// Send and receive buffer via SPI
int attempts = 3;
@@ -368,83 +381,68 @@
do {
// Wait required microseconds between messages
uint64_t microTime = micros();
- if (lastTransfer + SyncGapDuration > microTime)
- microsleep(lastTransfer + (uint64_t) SyncGapDuration - microTime);
+ if(mLastTransfer + SyncGapDuration > microTime) {
+ microsleep(mLastTransfer + (uint64_t) SyncGapDuration - microTime);
+ }
-// // Send header
-// ok = spi->transfer(sendBuffer, recvBuffer, sizeof(EmbrickHeaderPackage));
-// lastTransfer = micros();
-// if (!ok) {
-// DEVLOG_ERROR("emBrick[BusHandler]: Failed to transfer header buffer.\n");
-// break;
-// }
-//
-// // Wait required microseconds between messages
-// microTime = micros();
-// if (lastTransfer + 4 > microTime)
-// microsleep(lastTransfer + 4 - microTime);
-//
-// // Send data
-// ok = spi->transfer(sendBuffer + sizeof(EmbrickHeaderPackage),
-// recvBuffer + sizeof(EmbrickHeaderPackage),
-// bufferLength - sizeof(EmbrickHeaderPackage));
-// lastTransfer = micros();
-// if (!ok) {
-// DEVLOG_ERROR("emBrick[BusHandler]: Failed to transfer data buffer.\n");
-// break;
-// }
- ok = spi->transfer(sendBuffer, recvBuffer, bufferLength);
- lastTransfer = micros();
+ ok = mSpi->transfer(mSendBuffer, mRecvBuffer, bufferLength);
+ mLastTransfer = micros();
// Critical error of bus -> break immediately
- if (!ok)
+ if(!ok) {
break;
+ }
// Validate checksum
- ok = calcChecksum(recvBuffer + sizeof(EmbrickHeaderPackage),
+ ok = calcChecksum(mRecvBuffer + sizeof(EmbrickHeaderPackage),
bufferLength - sizeof(EmbrickHeaderPackage)) == 0;
if (!ok) {
-// DEVLOG_DEBUG("emBrick[BusHandler]: Transfer - Invalid checksum\n");
+ DEVLOG_DEBUG("emBrick[BusHandler]: Transfer - Invalid checksum\n");
}
} while (!ok && ++fails < attempts);
// Check if command was transmitted successfully
if (!ok) {
- if (target != 0 && cmd != Data) {
+ if (paTarget != 0 && paCmd != Data) {
DEVLOG_DEBUG(
- "emBrick[BusHandler]: Failed to send command %d to slave %d.\n", cmd,
- target);
+ "emBrick[BusHandler]: Failed to send command %d to slave %d.\n", paCmd,
+ paTarget);
}
return false;
}
// Copy result
- if (syncMutex)
- syncMutex->lock();
- if (status)
- *status = (EmbrickSlaveHandler::SlaveStatus) recvBuffer[sizeof(EmbrickHeaderPackage)];
+ if(paSyncMutex) {
+ paSyncMutex->lock();
+ }
- memcpy(dataReceive, recvBuffer + sizeof(EmbrickHeaderPackage) + 1,
- dataReceiveLength);
- if (syncMutex)
- syncMutex->unlock();
+ if(paStatus) {
+ *paStatus = (EmbrickSlaveHandler::SlaveStatus) mRecvBuffer[sizeof(EmbrickHeaderPackage)];
+ }
+
+ memcpy(paDataReceive, mRecvBuffer + sizeof(EmbrickHeaderPackage) + 1,
+ paDataReceiveLength);
+ if(paSyncMutex) {
+ paSyncMutex->unlock();
+ }
return true;
}
-unsigned char EmbrickBusHandler::calcChecksum(unsigned char * data, int dataLen) {
+unsigned char EmbrickBusHandler::calcChecksum(unsigned char * paData, int paDataLen) {
unsigned char c = 0;
- for (int i = 0; i < dataLen; i++)
- c = static_cast<unsigned char>(c + data[i]);
+ for(int i = 0; i < paDataLen; i++) {
+ c = static_cast<unsigned char>(c + paData[i]);
+ }
- return static_cast<unsigned char>(ChecksumConstant - c);
+ return static_cast<unsigned char>(scmChecksumConstant - c);
}
uint64_t EmbrickBusHandler::micros() {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
- return round(ts.tv_nsec / 1.0e3) + (ts.tv_sec - initTime) * 1E6;
+ return round(ts.tv_nsec / 1.0e3) + (ts.tv_sec - mInitTime) * 1E6;
}
unsigned long EmbrickBusHandler::millis() {
@@ -452,23 +450,23 @@
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
- return static_cast<unsigned long>(round(ts.tv_nsec / 1.0e6)) + (ts.tv_sec - initTime) * 1000;
+ return static_cast<unsigned long>(round(ts.tv_nsec / 1.0e6)) + (ts.tv_sec - mInitTime) * 1000;
}
-void EmbrickBusHandler::microsleep(uint64_t microseconds) {
+void EmbrickBusHandler::microsleep(uint64_t paMicroseconds) {
struct timespec ts;
- ts.tv_sec = (long) (microseconds / (uint64_t) 1E6);
- ts.tv_nsec = (long) microseconds * (long) 1E3 - ts.tv_sec * (long) 1E9;
+ ts.tv_sec = (long) (paMicroseconds / (uint64_t) 1E6);
+ ts.tv_nsec = (long) paMicroseconds * (long) 1E3 - ts.tv_sec * (long) 1E9;
nanosleep(&ts, 0);
}
-void EmbrickBusHandler::addTime(struct timespec& ts, unsigned long microseconds) {
- ts.tv_sec += microseconds / (unsigned long) 1E6;
- unsigned long t = ts.tv_nsec + microseconds * (unsigned long) 1E3
- - (microseconds / (unsigned long) 1E6) * (unsigned long) 1E9;
+void EmbrickBusHandler::addTime(struct timespec& paTs, unsigned long paMicroseconds) {
+ paTs.tv_sec += paMicroseconds / (unsigned long) 1E6;
+ unsigned long t = paTs.tv_nsec + paMicroseconds * (unsigned long) 1E3
+ - (paMicroseconds / (unsigned long) 1E6) * (unsigned long) 1E9;
if (t >= (unsigned long) 1E9) {
t -= (unsigned long) 1E9;
- ts.tv_sec++;
+ paTs.tv_sec++;
}
- ts.tv_nsec = t;
+ paTs.tv_nsec = t;
}
diff --git a/src/modules/embrick/handler/bus.h b/src/modules/embrick/handler/bus.h
index 6231748..6777921 100644
--- a/src/modules/embrick/handler/bus.h
+++ b/src/modules/embrick/handler/bus.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -35,146 +36,143 @@
const unsigned int SyncGapMultiplicator = 15;
const unsigned int SyncGapDuration = (SyncGapMultiplicator - 1) * 32 + 10;
-class EmbrickBusHandler: public forte::core::IO::IODeviceMultiController {
- friend class EmbrickSlaveHandler;
+class EmbrickBusHandler : public forte::core::io::IODeviceMultiController {
+ friend class EmbrickSlaveHandler;
-public:
- explicit EmbrickBusHandler(CDeviceExecution& paDeviceExecution);
+ public:
+ explicit EmbrickBusHandler(CDeviceExecution& paDeviceExecution);
- enum Command {
- /**
- * Initializes the slave and assigns an individual address to it.
- * The slave provides hardware specifications and length information for the data exchange.
- * The master sends configuration parameter to synchronize transfer timings.
- */
- Init = 2,
+ enum Command {
+ /**
+ * Initializes the slave and assigns an individual address to it.
+ * The slave provides hardware specifications and length information for the data exchange.
+ * The master sends configuration parameter to synchronize transfer timings.
+ */
+ Init = 2,
- /**
- * It enables the slave select signal of the addressed slave.
- * The subsequent slave waits for initialization.
- */
- SelectNextSlave = 3,
+ /**
+ * It enables the slave select signal of the addressed slave.
+ * The subsequent slave waits for initialization.
+ */
+ SelectNextSlave = 3,
- /**
- * It sets and gets the current state, called process image, of the slave.
- * The amount of exchanged data bytes depends on the functionality of the slave.
- * If a slave, for example, has 8 digital outputs, the master sends 1 Byte (1 Bit for each digital output) to set the slave state.
- * Likewise if a slave reads 8 analog values, the slave sends 16 Bytes (2 Bytes for each value) to the master.
- * The structure of the process image is specified in the emBRICK products manual.
- * The Data command should be performed at least 20 times per second.
- */
- Data = 10,
- };
+ /**
+ * It sets and gets the current state, called process image, of the slave.
+ * The amount of exchanged data bytes depends on the functionality of the slave.
+ * If a slave, for example, has 8 digital outputs, the master sends 1 Byte (1 Bit for each digital output) to set the slave state.
+ * Likewise if a slave reads 8 analog values, the slave sends 16 Bytes (2 Bytes for each value) to the master.
+ * The structure of the process image is specified in the emBRICK products manual.
+ * The Data command should be performed at least 20 times per second.
+ */
+ Data = 10,
+ };
- struct Config: forte::core::IO::IODeviceController::Config {
- unsigned int BusInterface; //!< Selects the SPI interface for the brickBUS. The default value is 1 (selects SPI1).
- unsigned int BusSelectPin; //!< Sets the pin, which is connect to the slave select pin of the brickBUS.
- unsigned long BusInitSpeed; //!< Sets the SPI speed for the brickBUS during the initialization of the slaves. The default value is 300000 Hz.
- unsigned long BusLoopSpeed; //!< Sets the maximal SPI speed for the brickBUS during the runtime updates of the slaves. The default value is 700000 Hz.
- };
+ struct Config : forte::core::io::IODeviceController::Config {
+ unsigned int mBusInterface; //!< Selects the SPI interface for the brickBUS. The default value is 1 (selects SPI1).
+ unsigned int mBusSelectPin; //!< Sets the pin, which is connect to the slave select pin of the brickBUS.
+ unsigned long mBusInitSpeed; //!< Sets the SPI speed for the brickBUS during the initialization of the slaves. The default value is 300000 Hz.
+ unsigned long mBusLoopSpeed; //!< Sets the maximal SPI speed for the brickBUS during the runtime updates of the slaves. The default value is 700000 Hz.
+ };
- enum HandleType {
- Bit, Analog, Analog10
- };
+ enum HandleType {
+ Bit,
+ Analog,
+ Analog10
+ };
- struct HandleDescriptor: forte::core::IO::IODeviceMultiController::HandleDescriptor {
- HandleType type;
- uint8_t offset;
- uint8_t position;
+ class HandleDescriptor : public forte::core::io::IODeviceMultiController::HandleDescriptor {
+ public:
+ HandleType mType;
+ uint8_t mOffset;
+ uint8_t mPosition;
- HandleDescriptor(CIEC_WSTRING const &id, forte::core::IO::IOMapper::Direction direction,
- int slaveIndex, HandleType type, uint8_t offset,
- uint8_t position) :
- forte::core::IO::IODeviceMultiController::HandleDescriptor(id, direction,
- slaveIndex), type(type), offset(offset), position(position) {
+ HandleDescriptor(CIEC_WSTRING const &paId, forte::core::io::IOMapper::Direction paDirection, int paSlaveIndex, HandleType paType, uint8_t paOffset,
+ uint8_t paPosition) :
+ forte::core::io::IODeviceMultiController::HandleDescriptor(paId, paDirection, paSlaveIndex), mType(paType), mOffset(paOffset), mPosition(paPosition) {
+ }
+ };
+
+ void setConfig(struct forte::core::io::IODeviceController::Config* paConfig);
+
+ EmbrickSlaveHandler* getSlave(int paIndex);
+ void forceUpdate(int paIndex);
+
+ void addSlaveHandle(int paIndex, forte::core::io::IOHandle* paHandle);
+ void dropSlaveHandles(int paIndex);
+ protected:
+ const char* init();
+ void deInit();
+
+ forte::core::io::IOHandle* initHandle(forte::core::io::IODeviceController::HandleDescriptor *paHandleDescriptor);
+
+ void prepareLoop();
+ virtual void runLoop();
+ void cleanLoop();
+
+ bool transfer(unsigned int paTarget, Command paCmd, unsigned char* paDataSend =
+ NULL, int paDataSendLength = 0, unsigned char* paDataReceive = NULL, int paDataReceiveLength = 0, EmbrickSlaveHandler::SlaveStatus* paStatus = NULL,
+ CSyncObject *paSyncMutex = NULL);
+ bool broadcast(Command paCmd, unsigned char* paDataSend =
+ NULL, int paDataSendLength = 0, unsigned char* paDataReceive = NULL, int paDataReceiveLength = 0) {
+ return transfer(0, paCmd, paDataSend, paDataSendLength, paDataReceive, paDataReceiveLength);
}
- };
- void setConfig(struct forte::core::IO::IODeviceController::Config* config);
+ // Config
+ struct Config mConfig;
- EmbrickSlaveHandler* getSlave(int index);
- void forceUpdate(int index);
+ // Timing variables
+ struct timespec mLastLoop;
+ struct timespec mNextLoop;
+ uint64_t mLastTransfer;
- void addSlaveHandle(int index, forte::core::IO::IOHandle* handle);
- void dropSlaveHandles(int index);
-protected:
- const char* init();
- void deInit();
+ // Handlers
+ EmbrickSPIHandler *mSpi;
+ EmbrickPinHandler *mSlaveSelect;
- forte::core::IO::IOHandle* initHandle(
- forte::core::IO::IODeviceMultiController::HandleDescriptor *handleDescriptor);
+ // Slaves
+ typedef CSinglyLinkedList<EmbrickSlaveHandler *> TSlaveList;
+ TSlaveList *mSlaves;
+ int mSlaveCount;
- void prepareLoop();
- virtual void runLoop();
- void cleanLoop();
+ // Sync
+ bool mLoopActive;
+ CSemaphore mForceLoop;
+ CSyncObject mSyncObject;
- bool transfer(unsigned int target, Command cmd, unsigned char* dataSend =
- NULL, int dataSendLength = 0, unsigned char* dataReceive = NULL,
- int dataReceiveLength = 0, EmbrickSlaveHandler::SlaveStatus* status = NULL,
- CSyncObject *syncMutex = NULL);
- bool broadcast(Command cmd, unsigned char* dataSend =
- NULL, int dataSendLength = 0, unsigned char* dataReceive = NULL,
- int dataReceiveLength = 0) {
- return transfer(0, cmd, dataSend, dataSendLength, dataReceive,
- dataReceiveLength);
- }
+ // Error
+ bool checkHandlerError();
- // Config
- struct Config config;
+ // Scheduling
+ struct SEntry {
+ EmbrickSlaveHandler* mSlave;
+ struct timespec mNextDeadline;
+ uint16_t mLastDuration;
+ bool mForced;
+ bool mDelayed;
+ };
+ struct SEntry **mSList;
+ SEntry *mSNext;
- // Timing variables
- struct timespec lastLoop;
- struct timespec nextLoop;
- uint64_t lastTransfer;
+ private:
+ bool isSlaveAvailable(int paIndex);
+ bool checkSlaveType(int paIndex, int paType);
- // Handlers
- EmbrickSPIHandler *spi;
- EmbrickPinHandler *slaveSelect;
+ uint64_t micros();
+ unsigned long millis();
+ time_t mInitTime;
+ void microsleep(uint64_t paMicroseconds);
+ void addTime(struct timespec& paTs, unsigned long paMicroseconds);
- // Slaves
- typedef CSinglyLinkedList<EmbrickSlaveHandler *> TSlaveList;
- TSlaveList *slaves;
- int slaveCount;
+ unsigned char calcChecksum(unsigned char * paData, int paDataLen);
- // Sync
- bool mLoopActive;
- CSemaphore mForceLoop;
- CSyncObject mSyncObject;
+ unsigned char mSendBuffer[TransferBufferLength];
+ unsigned char mRecvBuffer[TransferBufferLength];
- // Error
- bool checkHandlerError();
+ static const unsigned char scmChecksumConstant = 0x55;
- // Scheduling
- struct SEntry {
- EmbrickSlaveHandler* slave;
- struct timespec nextDeadline;
- uint16_t lastDuration;
- bool forced;
- bool delayed;
- };
- struct SEntry **sList;
- SEntry *sNext;
-
-private:
- bool isSlaveAvailable(int index);
- bool checkSlaveType(int index, int type);
-
- uint64_t micros();
- unsigned long millis();
- time_t initTime;
- void microsleep(uint64_t microseconds);
- void addTime(struct timespec& t, unsigned long microseconds);
-
- unsigned char calcChecksum(unsigned char * data, int dataLen);
-
- unsigned char sendBuffer[TransferBufferLength];
- unsigned char recvBuffer[TransferBufferLength];
-
- static const unsigned char ChecksumConstant = 0x55;
-
- static const char * const scmSlaveUpdateFailed;
- static const char * const scmNoSlavesFound;
+ static const char * const scmSlaveUpdateFailed;
+ static const char * const scmNoSlavesFound;
};
#endif /* SRC_MODULES_EMBRICK_BUSCONTROLLER_H_ */
diff --git a/src/modules/embrick/handler/pin.cpp b/src/modules/embrick/handler/pin.cpp
index 05d5982..f6fb87c 100644
--- a/src/modules/embrick/handler/pin.cpp
+++ b/src/modules/embrick/handler/pin.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,18 +14,15 @@
#include "pin.h"
#include <devlog.h>
-const char * const EmbrickPinHandler::scmFailedToOpenFile =
- "Failed to open sysfs file.";
-const char * const EmbrickPinHandler::scmFailedToWriteFile =
- "Failed to write sysfs file.";
-const char * const EmbrickPinHandler::scmNotInitialised =
- "Failed to write to not initialised sysfs stream.";
+const char * const EmbrickPinHandler::scmFailedToOpenFile = "Failed to open sysfs file.";
+const char * const EmbrickPinHandler::scmFailedToWriteFile = "Failed to write sysfs file.";
+const char * const EmbrickPinHandler::scmNotInitialised = "Failed to write to not initialised sysfs stream.";
-EmbrickPinHandler::EmbrickPinHandler(unsigned int pin) : pinStr(static_cast<std::ostringstream &>((std::ostringstream() << std::dec // Convert pin int to string
- << pin)).str()),
- error(0) {
+EmbrickPinHandler::EmbrickPinHandler(unsigned int paPin) :
+ paError(0), mPinStr(static_cast<std::ostringstream &>((std::ostringstream() << std::dec // Convert pin int to string
+ << paPin)).str()) {
// Disable buffer to avoid latency
- stream.rdbuf()->pubsetbuf(0, 0);
+ paStream.rdbuf()->pubsetbuf(0, 0);
// Init pin
init();
@@ -36,75 +34,79 @@
void EmbrickPinHandler::init() {
std::string fileName;
- stream.clear();
+ paStream.clear();
// Enable pin
fileName = "/sys/class/gpio/export";
- stream.open(fileName.c_str(), std::fstream::out);
- if (!stream.is_open())
+ paStream.open(fileName.c_str(), std::fstream::out);
+ if(!paStream.is_open()) {
return fail(scmFailedToOpenFile);
-
- stream << pinStr;
- if (stream.fail())
+ }
+ paStream << mPinStr;
+ if(paStream.fail()) {
return fail(scmFailedToWriteFile);
- stream.close();
+ }
+ paStream.close();
// Use pin as output
- fileName = "/sys/class/gpio/gpio" + pinStr + "/direction";
- stream.open(fileName.c_str(), std::fstream::out);
- if (!stream.is_open())
+ fileName = "/sys/class/gpio/gpio" + mPinStr + "/direction";
+ paStream.open(fileName.c_str(), std::fstream::out);
+ if(!paStream.is_open()) {
return fail(scmFailedToOpenFile);
- stream.clear();
+ }
+ paStream.clear();
- stream << "out";
- if (stream.fail())
+ paStream << "out";
+ if(paStream.fail()) {
return fail(scmFailedToWriteFile);
- stream.close();
+ }
+ paStream.close();
// Prepare pin stream for usage
- fileName = "/sys/class/gpio/gpio" + pinStr + "/value";
- stream.open(fileName.c_str(), std::fstream::out);
- if (!stream.is_open())
+ fileName = "/sys/class/gpio/gpio" + mPinStr + "/value";
+ paStream.open(fileName.c_str(), std::fstream::out);
+ if(!paStream.is_open()) {
return fail(scmFailedToOpenFile);
-
- DEVLOG_INFO("emBrick[PinHandler]: GPIO %s ready.\n", pinStr.data());
+ }
+ DEVLOG_INFO("emBrick[PinHandler]: GPIO %s ready.\n", mPinStr.data());
}
void EmbrickPinHandler::deInit() {
std::string fileName;
// Close pin stream
- if (stream.is_open()) {
- stream.clear();
- stream.close();
+ if(paStream.is_open()) {
+ paStream.clear();
+ paStream.close();
}
// Disable pin
fileName = "/sys/class/gpio/unexport";
- stream.open(fileName.c_str(), std::fstream::out);
- if (!stream.is_open())
+ paStream.open(fileName.c_str(), std::fstream::out);
+ if(!paStream.is_open()) {
return fail(scmFailedToOpenFile);
-
- stream << pinStr;
- if (stream.fail())
+ }
+ paStream << mPinStr;
+ if(paStream.fail()) {
return fail(scmFailedToWriteFile);
- stream.close();
+ }
+ paStream.close();
- DEVLOG_INFO("emBrick[PinHandler]: GPIO %s stopped.\n", pinStr.data());
+ DEVLOG_INFO("emBrick[PinHandler]: GPIO %s stopped.\n", mPinStr.data());
}
-bool EmbrickPinHandler::set(bool state) {
- if (!stream.is_open()) {
+bool EmbrickPinHandler::set(bool paState) {
+ if(!paStream.is_open()) {
fail(scmNotInitialised);
return false;
}
- stream.clear();
- stream.seekp(0, std::ios::beg);
+ paStream.clear();
+ paStream.seekp(0, std::ios::beg);
- unsigned int val = state ? 1 : 0;
- stream << val;
- if (stream.fail()) {
+ unsigned int val = paState ? 1 : 0;
+ paStream << val;
+ if(paStream.fail()) {
fail(scmFailedToWriteFile);
return false;
}
@@ -112,9 +114,8 @@
return true;
}
-void EmbrickPinHandler::fail(const char* reason) {
- error = reason;
- DEVLOG_ERROR("emBrick[PinHandler]: %s\n", reason);
+void EmbrickPinHandler::fail(const char* paReason) {
+ paError = paReason;
+ DEVLOG_ERROR("emBrick[PinHandler]: %s\n", paReason);
}
-
diff --git a/src/modules/embrick/handler/pin.h b/src/modules/embrick/handler/pin.h
index 6192996..a080229 100644
--- a/src/modules/embrick/handler/pin.h
+++ b/src/modules/embrick/handler/pin.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -19,37 +20,37 @@
#include <forte_wstring.h>
class EmbrickPinHandler {
- friend class EmbrickBusHandler;
+ friend class EmbrickBusHandler;
-protected:
- explicit EmbrickPinHandler(unsigned int pin);
- virtual ~EmbrickPinHandler();
+ protected:
+ explicit EmbrickPinHandler(unsigned int paPin);
+ virtual ~EmbrickPinHandler();
- bool set(bool state);
- bool enable() {
- return set(true);
- }
- bool disable() {
- return set(false);
- }
+ bool set(bool paState);
+ bool enable() {
+ return set(true);
+ }
+ bool disable() {
+ return set(false);
+ }
- void init();
- void deInit();
+ void init();
+ void deInit();
- std::string pinStr;
- std::fstream stream;
+ bool hasError() {
+ return paError != 0;
+ }
+ const char* paError;
- bool hasError() {
- return error != 0;
- }
- const char* error;
+ private:
+ std::string mPinStr;
+ std::fstream paStream;
-private:
- void fail(const char* reason);
+ void fail(const char* paReason);
- static const char * const scmFailedToOpenFile;
- static const char * const scmFailedToWriteFile;
- static const char * const scmNotInitialised;
+ static const char * const scmFailedToOpenFile;
+ static const char * const scmFailedToWriteFile;
+ static const char * const scmNotInitialised;
};
#endif /* SRC_MODULES_EMBRICK_HANDLER_PIN_H_ */
diff --git a/src/modules/embrick/handler/spi.cpp b/src/modules/embrick/handler/spi.cpp
index a17a700..e02312d 100644
--- a/src/modules/embrick/handler/spi.cpp
+++ b/src/modules/embrick/handler/spi.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -14,29 +15,23 @@
#include <sstream>
#include <string>
-unsigned long const EmbrickSPIHandler::DefaultSpiSpeed = 300000;
-unsigned long const EmbrickSPIHandler::MaxSpiSpeed = 700000;
-char const EmbrickSPIHandler::spiMode = SPI_CPHA;
-char const EmbrickSPIHandler::spiBitOrder = 0; // MSB first
+unsigned long const EmbrickSPIHandler::scmDefaultSpiSpeed = 300000;
+unsigned long const EmbrickSPIHandler::scmMaxSpiSpeed = 700000;
+char const EmbrickSPIHandler::mSpiMode = SPI_CPHA;
+char const EmbrickSPIHandler::mSpiBitOrder = 0; // MSB first
-const char * const EmbrickSPIHandler::scmFailedToInitHandler =
- "Failed to init spidev handler. Check if spi is enabled.";
-const char * const EmbrickSPIHandler::scmFailedToConfigMode =
- "Failed to config spi write mode.";
-const char * const EmbrickSPIHandler::scmFailedToConfigBitOrder =
- "Failed to config spi bit order.";
-const char * const EmbrickSPIHandler::scmFailedToConfigSpeed =
- "Failed to config spi speed.";
-const char * const EmbrickSPIHandler::scmFailedToTestBus =
- "Failed to send test byte to spi.";
-const char * const EmbrickSPIHandler::scmFailedToTransferBuffer =
- "Failed to transfer buffer via spi.";
+const char * const EmbrickSPIHandler::scmFailedToInitHandler = "Failed to init spidev handler. Check if spi is enabled.";
+const char * const EmbrickSPIHandler::scmFailedToConfigMode = "Failed to config spi write mode.";
+const char * const EmbrickSPIHandler::scmFailedToConfigBitOrder = "Failed to config spi bit order.";
+const char * const EmbrickSPIHandler::scmFailedToConfigSpeed = "Failed to config spi speed.";
+const char * const EmbrickSPIHandler::scmFailedToTestBus = "Failed to send test byte to spi.";
+const char * const EmbrickSPIHandler::scmFailedToTransferBuffer = "Failed to transfer buffer via spi.";
-EmbrickSPIHandler::EmbrickSPIHandler(unsigned int interface) :
- error(0) {
+EmbrickSPIHandler::EmbrickSPIHandler(unsigned int paInterface) :
+ mError(0) {
// Convert int to string
std::ostringstream interfaceStream;
- interfaceStream << interface;
+ interfaceStream << paInterface;
std::string interfaceStr = interfaceStream.str();
std::string spidev = "/dev/spidev" + interfaceStr + ".0";
@@ -47,81 +42,81 @@
deInit();
}
-void EmbrickSPIHandler::init(const char* spidev) {
+void EmbrickSPIHandler::init(const char* paSpidev) {
// Init spidev
- DEVLOG_DEBUG("emBrick[SPIHandler]: Open spidev '%s'\n", spidev);
- fd = open(spidev, O_RDWR);
+ DEVLOG_DEBUG("emBrick[SPIHandler]: Open spidev '%s'\n", paSpidev);
+ mFd = open(paSpidev, O_RDWR);
- if (fd < 0)
+ if(mFd < 0) {
return fail(scmFailedToInitHandler);
-
+ }
// Set mode to SPI_CPOL and SPI_CPHA
- if (!config(SPI_IOC_WR_MODE, SPI_IOC_RD_MODE, spiMode))
+ if(!config(SPI_IOC_WR_MODE, SPI_IOC_RD_MODE, mSpiMode)) {
return fail(scmFailedToConfigMode);
-
+ }
// Set MSB (Most Significant Bit First)
- if (!config(SPI_IOC_WR_LSB_FIRST, SPI_IOC_RD_LSB_FIRST, spiBitOrder))
+ if(!config(SPI_IOC_WR_LSB_FIRST, SPI_IOC_RD_LSB_FIRST, mSpiBitOrder)) {
return fail(scmFailedToConfigBitOrder);
-
+ }
// Set speed
- if (!config(SPI_IOC_WR_MAX_SPEED_HZ, SPI_IOC_RD_MAX_SPEED_HZ, MaxSpiSpeed))
+ if(!config(SPI_IOC_WR_MAX_SPEED_HZ, SPI_IOC_RD_MAX_SPEED_HZ, scmMaxSpiSpeed)) {
return fail(scmFailedToConfigSpeed);
- spiSpeed = DefaultSpiSpeed;
+ }
+ mSpiSpeed = scmDefaultSpiSpeed;
// Test
unsigned char testByte[1] = { 0 };
- if (!transfer(testByte, testByte, 1))
+ if(!transfer(testByte, testByte, 1)) {
return fail(scmFailedToTestBus);
-
+ }
DEVLOG_INFO("emBrick[SPIHandler]: Ready.\n");
}
void EmbrickSPIHandler::deInit() {
// Close handler if open
- if (fd >= 0)
- close(fd);
+ if(mFd >= 0) {
+ close(mFd);
+ }
}
-template<typename T> bool EmbrickSPIHandler::config(unsigned int config,
- unsigned int configVerify, T value) {
+template<typename T> bool EmbrickSPIHandler::config(unsigned int paConfig, unsigned int paConfigVerify, T paValue) {
int status;
// Set config via ioctl
- status = ioctl(fd, config, &value);
- if (status < 0)
+ status = ioctl(mFd, paConfig, &paValue);
+ if(status < 0) {
return false;
-
+ }
// Verify config
T valueCheck;
- status = ioctl(fd, configVerify, &valueCheck);
- if (status < 0)
+ status = ioctl(mFd, paConfigVerify, &valueCheck);
+ if(status < 0) {
return false;
-
- return valueCheck == value;
+ }
+ return valueCheck == paValue;
}
-void EmbrickSPIHandler::fail(const char* reason) {
- error = reason;
- DEVLOG_ERROR("emBrick[SPIHandler]: %s\n", error);
+void EmbrickSPIHandler::fail(const char* paReason) {
+ mError = paReason;
+ DEVLOG_ERROR("emBrick[SPIHandler]: %s\n", mError);
}
-bool EmbrickSPIHandler::transfer(unsigned char* sendBuffer,
- unsigned char* receiveBuffer, int length) {
+bool EmbrickSPIHandler::transfer(unsigned char* paSendBuffer, unsigned char* paReceiveBuffer, int paLength) {
struct spi_ioc_transfer msg;
- msg.tx_buf = (unsigned long) sendBuffer;
- msg.rx_buf = (unsigned long) receiveBuffer;
- msg.len = length;
+ msg.tx_buf = (unsigned long) paSendBuffer;
+ msg.rx_buf = (unsigned long) paReceiveBuffer;
+ msg.len = paLength;
msg.delay_usecs = 0;
- msg.speed_hz = spiSpeed;
+ msg.speed_hz = mSpiSpeed;
msg.bits_per_word = 8;
msg.cs_change = 0;
msg.pad = 0;
// Send data to spi bus
- int status = ioctl(fd, SPI_IOC_MESSAGE(1), &msg);
- if (status < 0) {
+ int status = ioctl(mFd, SPI_IOC_MESSAGE(1), &msg);
+ if(status < 0) {
fail(scmFailedToTransferBuffer);
return false;
}
@@ -129,9 +124,7 @@
return true;
}
-void EmbrickSPIHandler::setSpeed(const unsigned long speed) {
- spiSpeed = speed;
+void EmbrickSPIHandler::setSpeed(const unsigned long paSpeed) {
+ mSpiSpeed = paSpeed;
}
-
-
diff --git a/src/modules/embrick/handler/spi.h b/src/modules/embrick/handler/spi.h
index cb87a4f..bbc8f0e 100644
--- a/src/modules/embrick/handler/spi.h
+++ b/src/modules/embrick/handler/spi.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -22,44 +23,42 @@
#include <linux/spi/spidev.h>
class EmbrickSPIHandler {
- friend class EmbrickBusHandler;
+ friend class EmbrickBusHandler;
-protected:
- explicit EmbrickSPIHandler(unsigned int interface);
- virtual ~EmbrickSPIHandler();
+ protected:
+ explicit EmbrickSPIHandler(unsigned int paInterface);
+ virtual ~EmbrickSPIHandler();
- bool transfer(unsigned char* sendBuffer, unsigned char* receiveBuffer,
- int length);
+ bool transfer(unsigned char* paSendBuffer, unsigned char* paRreceiveBuffer, int paLength);
- void init(const char* spidev);
- void deInit();
- template<typename T> bool config(unsigned int config,
- unsigned int configVerify, T value);
+ void init(const char* paSpidev);
+ void deInit();
+ template<typename T> bool config(unsigned int paConfig, unsigned int paConfigVerify, T paValue);
- bool hasError() {
- return error != 0;
- }
- const char* error;
+ bool hasError() {
+ return mError != 0;
+ }
+ const char* mError;
- static unsigned long const DefaultSpiSpeed;
- static unsigned long const MaxSpiSpeed;
- void setSpeed(const unsigned long speed);
+ static unsigned long const scmDefaultSpiSpeed;
+ static unsigned long const scmMaxSpiSpeed;
+ void setSpeed(const unsigned long paSpeed);
-private:
- int fd;
- unsigned long spiSpeed;
+ private:
+ int mFd;
+ unsigned long mSpiSpeed;
- static char const spiMode;
- static char const spiBitOrder;
+ static char const mSpiMode;
+ static char const mSpiBitOrder;
- void fail(const char* reason);
+ void fail(const char* paReason);
- static const char * const scmFailedToInitHandler;
- static const char * const scmFailedToConfigMode;
- static const char * const scmFailedToConfigBitOrder;
- static const char * const scmFailedToConfigSpeed;
- static const char * const scmFailedToTestBus;
- static const char * const scmFailedToTransferBuffer;
+ static const char * const scmFailedToInitHandler;
+ static const char * const scmFailedToConfigMode;
+ static const char * const scmFailedToConfigBitOrder;
+ static const char * const scmFailedToConfigSpeed;
+ static const char * const scmFailedToTestBus;
+ static const char * const scmFailedToTransferBuffer;
};
#endif /* SRC_MODULES_EMBRICK_HANDLER_SPI_H_ */
diff --git a/src/modules/embrick/slave/handle.cpp b/src/modules/embrick/slave/handle.cpp
index d95ea9e..8b417fb 100644
--- a/src/modules/embrick/slave/handle.cpp
+++ b/src/modules/embrick/slave/handle.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,34 +17,32 @@
#include <io/mapper/io_mapper.h>
#include <devlog.h>
-EmbrickSlaveHandle::EmbrickSlaveHandle(forte::core::IO::IODeviceController *controller,
- forte::core::IO::IOMapper::Direction direction, CIEC_ANY::EDataTypeID type, uint8_t paOffset,
- EmbrickSlaveHandler *paSlave) :
- forte::core::IO::IOHandle(controller, direction, type), offset(paOffset), slave(paSlave), updateMutex(
- &slave->updateMutex) {
- if (direction == forte::core::IO::IOMapper::In)
- buffer = slave->updateReceiveImage;
- else if (direction == forte::core::IO::IOMapper::Out)
- buffer = slave->updateSendImage;
+EmbrickSlaveHandle::EmbrickSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection,
+ CIEC_ANY::EDataTypeID paType, uint8_t paOffset, EmbrickSlaveHandler *paSlave) :
+ forte::core::io::IOHandle(paController, paDirection, paType), mOffset(paOffset), mSlave(paSlave), mUpdateMutex(&mSlave->mUpdateMutex) {
+ if(paDirection == forte::core::io::IOMapper::In) {
+ mBuffer = mSlave->mUpdateReceiveImage;
+ } else if(paDirection == forte::core::io::IOMapper::Out) {
+ mBuffer = mSlave->mUpdateSendImage;
+ }
}
EmbrickSlaveHandle::~EmbrickSlaveHandle() {
}
void EmbrickSlaveHandle::set(const CIEC_ANY &) {
- slave->forceUpdate();
+ mSlave->forceUpdate();
}
-void EmbrickSlaveHandle::onObserver(forte::core::IO::IOObserver *observer) {
+void EmbrickSlaveHandle::onObserver(forte::core::io::IOObserver *paObserver) {
reset();
- forte::core::IO::IOHandle::onObserver(observer);
+ forte::core::io::IOHandle::onObserver(paObserver);
}
void EmbrickSlaveHandle::dropObserver() {
- forte::core::IO::IOHandle::dropObserver();
+ forte::core::io::IOHandle::dropObserver();
reset();
}
-
diff --git a/src/modules/embrick/slave/handle.h b/src/modules/embrick/slave/handle.h
index 5dc6fe5..cc678fd 100644
--- a/src/modules/embrick/slave/handle.h
+++ b/src/modules/embrick/slave/handle.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -23,27 +24,27 @@
class EmbrickSlaveHandler;
-class EmbrickSlaveHandle: public forte::core::IO::IOHandle {
-public:
- EmbrickSlaveHandle(forte::core::IO::IODeviceController *controller, forte::core::IO::IOMapper::Direction direction,
- CIEC_ANY::EDataTypeID type, uint8_t paOffset, EmbrickSlaveHandler *paSlave);
- virtual ~EmbrickSlaveHandle();
+class EmbrickSlaveHandle : public forte::core::io::IOHandle {
+ public:
+ EmbrickSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection, CIEC_ANY::EDataTypeID type,
+ uint8_t paOffset, EmbrickSlaveHandler *paSlave);
+ virtual ~EmbrickSlaveHandle();
- virtual void set(const CIEC_ANY &);
- virtual bool equal(unsigned char*) = 0;
+ virtual void set(const CIEC_ANY &);
+ virtual bool equal(unsigned char*) = 0;
-protected:
- virtual void reset() {
+ protected:
+ virtual void reset() {
- }
+ }
- virtual void onObserver(forte::core::IO::IOObserver *observer);
- virtual void dropObserver();
+ virtual void onObserver(forte::core::io::IOObserver *paObserver);
+ virtual void dropObserver();
- unsigned char* buffer;
- const uint8_t offset;
- EmbrickSlaveHandler* slave;
- CSyncObject *updateMutex;
+ unsigned char* mBuffer;
+ const uint8_t mOffset;
+ EmbrickSlaveHandler* mSlave;
+ CSyncObject *mUpdateMutex;
};
#endif /* SRC_MODULES_EMBRICK_SLAVE_HANDLE_H_ */
diff --git a/src/modules/embrick/slave/handles/analog.cpp b/src/modules/embrick/slave/handles/analog.cpp
index 20a60ed..e59116e 100644
--- a/src/modules/embrick/slave/handles/analog.cpp
+++ b/src/modules/embrick/slave/handles/analog.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,33 +14,31 @@
#include "analog.h"
#include "criticalregion.h"
-EmbrickAnalogSlaveHandle::EmbrickAnalogSlaveHandle(forte::core::IO::IODeviceController *controller,
- forte::core::IO::IOMapper::Direction direction, uint8_t offset, EmbrickSlaveHandler *slave) :
- EmbrickSlaveHandle(controller, direction, CIEC_ANY::e_DWORD, offset, slave) {
+EmbrickAnalogSlaveHandle::EmbrickAnalogSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection,
+ uint8_t paOffset, EmbrickSlaveHandler *paSlave) :
+ EmbrickSlaveHandle(paController, paDirection, CIEC_ANY::e_DWORD, paOffset, paSlave) {
}
-void EmbrickAnalogSlaveHandle::set(const CIEC_ANY &value) {
- CCriticalRegion criticalRegion(*updateMutex);
+void EmbrickAnalogSlaveHandle::set(const CIEC_ANY &paValue) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
- *(buffer + offset + 1) = static_cast<const CIEC_DWORD&>(value) % 256;
- *(buffer + offset) = (unsigned char) (static_cast<const CIEC_DWORD&>(value)
- / 256);
+ *(mBuffer + mOffset + 1) = static_cast<const CIEC_DWORD&>(paValue) % 256;
+ *(mBuffer + mOffset) = (unsigned char) (static_cast<const CIEC_DWORD&>(paValue) / 256);
- EmbrickSlaveHandle::set(value);
+ EmbrickSlaveHandle::set(paValue);
}
-void EmbrickAnalogSlaveHandle::get(CIEC_ANY &value) {
- CCriticalRegion criticalRegion(*updateMutex);
- static_cast<CIEC_DWORD&>(value) = getValue(buffer);
+void EmbrickAnalogSlaveHandle::get(CIEC_ANY &paValue) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
+ static_cast<CIEC_DWORD&>(paValue) = getValue(mBuffer);
}
-bool EmbrickAnalogSlaveHandle::equal(unsigned char* oldBuffer) {
- return getValue(buffer) == getValue(oldBuffer);
+bool EmbrickAnalogSlaveHandle::equal(unsigned char* paOldBuffer) {
+ return getValue(mBuffer) == getValue(paOldBuffer);
}
-const CIEC_DWORD EmbrickAnalogSlaveHandle::getValue(const unsigned char* buffer) {
- return *(buffer + offset) * 256 + *(buffer + offset + 1);
+const CIEC_DWORD EmbrickAnalogSlaveHandle::getValue(const unsigned char* paBuffer) {
+ return *(paBuffer + mOffset) * 256 + *(paBuffer + mOffset + 1);
}
-
diff --git a/src/modules/embrick/slave/handles/analog.h b/src/modules/embrick/slave/handles/analog.h
index 72a11d3..2735b27 100644
--- a/src/modules/embrick/slave/handles/analog.h
+++ b/src/modules/embrick/slave/handles/analog.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,18 +17,18 @@
#include <slave/slave.h>
#include <slave/handle.h>
-class EmbrickAnalogSlaveHandle: public EmbrickSlaveHandle {
-public:
- EmbrickAnalogSlaveHandle(forte::core::IO::IODeviceController *controller, forte::core::IO::IOMapper::Direction direction,
- uint8_t offset, EmbrickSlaveHandler *slave);
+class EmbrickAnalogSlaveHandle : public EmbrickSlaveHandle {
+ public:
+ EmbrickAnalogSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection, uint8_t paOffset,
+ EmbrickSlaveHandler *paSlave);
- virtual void set(const CIEC_ANY &);
- void get(CIEC_ANY &);
+ virtual void set(const CIEC_ANY &);
+ void get(CIEC_ANY &);
- bool equal(unsigned char* oldBuffer);
+ bool equal(unsigned char* paOldBuffer);
-protected:
- const CIEC_DWORD getValue(const unsigned char* buffer);
+ protected:
+ const CIEC_DWORD getValue(const unsigned char* paBuffer);
};
#endif /* SRC_MODULES_EMBRICK_SLAVE_HANDLES_ANALOG_H_ */
diff --git a/src/modules/embrick/slave/handles/analog10.cpp b/src/modules/embrick/slave/handles/analog10.cpp
index d953f90..bc1f34b 100644
--- a/src/modules/embrick/slave/handles/analog10.cpp
+++ b/src/modules/embrick/slave/handles/analog10.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,34 +14,31 @@
#include "analog10.h"
#include "criticalregion.h"
-EmbrickAnalog10SlaveHandle::EmbrickAnalog10SlaveHandle(forte::core::IO::IODeviceController *controller,
- forte::core::IO::IOMapper::Direction direction, uint8_t offset, EmbrickSlaveHandler *slave) :
- EmbrickSlaveHandle(controller, direction, CIEC_ANY::e_DWORD, offset, slave) {
+EmbrickAnalog10SlaveHandle::EmbrickAnalog10SlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection,
+ uint8_t paOffset, EmbrickSlaveHandler *paSlave) :
+ EmbrickSlaveHandle(paController, paDirection, CIEC_ANY::e_DWORD, paOffset, paSlave) {
}
-void EmbrickAnalog10SlaveHandle::set(const CIEC_ANY &value) {
- CCriticalRegion criticalRegion(*updateMutex);
+void EmbrickAnalog10SlaveHandle::set(const CIEC_ANY &paValue) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
- *(buffer + offset + 1) = static_cast<const CIEC_DWORD&>(value) % 256;
- *(buffer + offset) = (static_cast<const CIEC_DWORD&>(value) / 256) & 0x03;
+ *(mBuffer + mOffset + 1) = static_cast<const CIEC_DWORD&>(paValue) % 256;
+ *(mBuffer + mOffset) = (static_cast<const CIEC_DWORD&>(paValue) / 256) & 0x03;
-
- EmbrickSlaveHandle::set(value);
+ EmbrickSlaveHandle::set(paValue);
}
-void EmbrickAnalog10SlaveHandle::get(CIEC_ANY &value) {
- CCriticalRegion criticalRegion(*updateMutex);
- static_cast<CIEC_DWORD&>(value) = getValue(buffer);
+void EmbrickAnalog10SlaveHandle::get(CIEC_ANY &paValue) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
+ static_cast<CIEC_DWORD&>(paValue) = getValue(mBuffer);
}
-bool EmbrickAnalog10SlaveHandle::equal(unsigned char* oldBuffer) {
- return getValue(buffer) == getValue(oldBuffer);
+bool EmbrickAnalog10SlaveHandle::equal(unsigned char* paOldBuffer) {
+ return getValue(mBuffer) == getValue(paOldBuffer);
}
-const CIEC_DWORD EmbrickAnalog10SlaveHandle::getValue(const unsigned char* buffer) {
- return (*(buffer + offset) & 0x03) * 256 + *(buffer + offset + 1);
+const CIEC_DWORD EmbrickAnalog10SlaveHandle::getValue(const unsigned char* paBuffer) {
+ return (*(paBuffer + mOffset) & 0x03) * 256 + *(paBuffer + mOffset + 1);
}
-
-
diff --git a/src/modules/embrick/slave/handles/analog10.h b/src/modules/embrick/slave/handles/analog10.h
index 5e7dd90..afbc96f 100644
--- a/src/modules/embrick/slave/handles/analog10.h
+++ b/src/modules/embrick/slave/handles/analog10.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,19 +17,18 @@
#include <slave/slave.h>
#include <slave/handle.h>
-class EmbrickAnalog10SlaveHandle: public EmbrickSlaveHandle {
-public:
- EmbrickAnalog10SlaveHandle(forte::core::IO::IODeviceController *controller,
- forte::core::IO::IOMapper::Direction direction, uint8_t offset,
- EmbrickSlaveHandler *slave);
+class EmbrickAnalog10SlaveHandle : public EmbrickSlaveHandle {
+ public:
+ EmbrickAnalog10SlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection, uint8_t paOffset,
+ EmbrickSlaveHandler *paSlave);
- virtual void set(const CIEC_ANY &);
- void get(CIEC_ANY &);
+ virtual void set(const CIEC_ANY &);
+ void get(CIEC_ANY &);
- bool equal(unsigned char* oldBuffer);
+ bool equal(unsigned char* paOldBuffer);
-protected:
- const CIEC_DWORD getValue(const unsigned char* buffer);
+ protected:
+ const CIEC_DWORD getValue(const unsigned char* paBuffer);
};
#endif /* SRC_MODULES_EMBRICK_SLAVE_HANDLES_ANALOG10_H_ */
diff --git a/src/modules/embrick/slave/handles/bit.cpp b/src/modules/embrick/slave/handles/bit.cpp
index 716fdc9..ee9a338 100644
--- a/src/modules/embrick/slave/handles/bit.cpp
+++ b/src/modules/embrick/slave/handles/bit.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -13,31 +14,30 @@
#include "bit.h"
#include "criticalregion.h"
-EmbrickBitSlaveHandle::EmbrickBitSlaveHandle(forte::core::IO::IODeviceController *controller,
- forte::core::IO::IOMapper::Direction direction, uint8_t offset,
- uint8_t position, EmbrickSlaveHandler *slave) :
- EmbrickSlaveHandle(controller, direction, type = CIEC_ANY::e_BOOL, offset, slave), mask(
- (uint8_t) (1 << position)) {
+EmbrickBitSlaveHandle::EmbrickBitSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection,
+ uint8_t paOffset, uint8_t paPosition, EmbrickSlaveHandler *paSlave) :
+ EmbrickSlaveHandle(paController, paDirection, mType = CIEC_ANY::e_BOOL, paOffset, paSlave), mMask((uint8_t) (1 << paPosition)) {
}
-void EmbrickBitSlaveHandle::set(const CIEC_ANY &state) {
- CCriticalRegion criticalRegion(*updateMutex);
+void EmbrickBitSlaveHandle::set(const CIEC_ANY &paState) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
- if (static_cast<const CIEC_BOOL&>(state))
- *(buffer + offset) = (uint8_t) (*(buffer + offset) | mask);
- else
- *(buffer + offset) = (uint8_t) (*(buffer + offset) & ~mask);
+ if(static_cast<const CIEC_BOOL&>(paState)) {
+ *(mBuffer + mOffset) = (uint8_t) (*(mBuffer + mOffset) | mMask);
+ } else {
+ *(mBuffer + mOffset) = (uint8_t) (*(mBuffer + mOffset) & ~mMask);
+ }
- EmbrickSlaveHandle::set(state);
+ EmbrickSlaveHandle::set(paState);
}
-void EmbrickBitSlaveHandle::get(CIEC_ANY &state) {
- CCriticalRegion criticalRegion(*updateMutex);
- static_cast<CIEC_BOOL&>(state) = (*(buffer + offset) & mask) != 0;
+void EmbrickBitSlaveHandle::get(CIEC_ANY &paState) {
+ CCriticalRegion criticalRegion(*mUpdateMutex);
+ static_cast<CIEC_BOOL&>(paState) = (*(mBuffer + mOffset) & mMask) != 0;
}
-bool EmbrickBitSlaveHandle::equal(unsigned char* oldBuffer) {
- return (*(buffer + offset) & mask) == (*(oldBuffer + offset) & mask);
+bool EmbrickBitSlaveHandle::equal(unsigned char* paOldBuffer) {
+ return (*(mBuffer + mOffset) & mMask) == (*(paOldBuffer + mOffset) & mMask);
}
diff --git a/src/modules/embrick/slave/handles/bit.h b/src/modules/embrick/slave/handles/bit.h
index 25d6829..696b437 100644
--- a/src/modules/embrick/slave/handles/bit.h
+++ b/src/modules/embrick/slave/handles/bit.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,24 +17,23 @@
#include <slave/slave.h>
#include <slave/handle.h>
-class EmbrickBitSlaveHandle: public EmbrickSlaveHandle {
-public:
- EmbrickBitSlaveHandle(forte::core::IO::IODeviceController *controller, forte::core::IO::IOMapper::Direction direction,
- uint8_t offset, uint8_t position, EmbrickSlaveHandler *slave);
+class EmbrickBitSlaveHandle : public EmbrickSlaveHandle {
+ public:
+ EmbrickBitSlaveHandle(forte::core::io::IODeviceController *paController, forte::core::io::IOMapper::Direction paDirection, uint8_t paOffset,
+ uint8_t paPosition, EmbrickSlaveHandler *paSlave);
- virtual void set(const CIEC_ANY &);
- void get(CIEC_ANY &);
+ virtual void set(const CIEC_ANY &);
+ void get(CIEC_ANY &);
- bool equal(unsigned char* oldBuffer);
+ bool equal(unsigned char* mOldBuffer);
-protected:
- virtual void reset() {
- CIEC_BOOL s = false;
- set(s);
- }
+ protected:
+ virtual void reset() {
+ CIEC_BOOL s = false;
+ set(s);
+ }
-protected:
- const uint8_t mask;
+ const uint8_t mMask;
};
#endif /* SRC_MODULES_EMBRICK_SLAVE_HANDLES_BIT_H_ */
diff --git a/src/modules/embrick/slave/packages.h b/src/modules/embrick/slave/packages.h
index fdee98a..972c00f 100644
--- a/src/modules/embrick/slave/packages.h
+++ b/src/modules/embrick/slave/packages.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,44 +19,43 @@
#pragma pack(push, 1) // Disable padding for protocol structs
struct EmbrickHeaderPackage {
- char address;
- char command;
- char checksum;
+ char mAddress;
+ char mCommand;
+ char mChecksum;
};
struct EmbrickSlaveInitPackage {
- uint8_t protocolVersion;
- uint8_t moduleVersion;
- uint16_t deviceId;
- uint16_t producerId;
- uint8_t dataSendLength; // Amount of bytes that the slave expects from the master
- uint8_t dataReceiveLength; // Amount of bytes that the master expects from the slave
+ uint8_t mProtocolVersion;
+ uint8_t mModuleVersion;
+ uint16_t mDeviceId;
+ uint16_t mProducerId;
+ uint8_t mDataSendLength; // Amount of bytes that the slave expects from the master
+ uint8_t mDataReceiveLength; // Amount of bytes that the master expects from the slave
- static EmbrickSlaveInitPackage fromBuffer(unsigned char* buffer) {
- EmbrickSlaveInitPackage pkg;
- memcpy(&pkg, buffer, sizeof(EmbrickSlaveInitPackage));
+ static EmbrickSlaveInitPackage fromBuffer(unsigned char* paBuffer) {
+ EmbrickSlaveInitPackage pkg;
+ memcpy(&pkg, paBuffer, sizeof(EmbrickSlaveInitPackage));
- pkg.deviceId = ntohs(pkg.deviceId);
- // Switch bytes of deviceId as it is transmitted with a different endianess
- pkg.deviceId = (uint16_t) (((pkg.deviceId & 0xFF00) >> 8)
- | ((pkg.deviceId & 0xFF) << 8));
+ pkg.mDeviceId = ntohs(pkg.mDeviceId);
+ // Switch bytes of deviceId as it is transmitted with a different endianess
+ pkg.mDeviceId = (uint16_t) (((pkg.mDeviceId & 0xFF00) >> 8) | ((pkg.mDeviceId & 0xFF) << 8));
- pkg.producerId = ntohs(pkg.producerId);
+ pkg.mProducerId = ntohs(pkg.mProducerId);
- return pkg;
- }
+ return pkg;
+ }
};
struct EmbrickMasterInitPackage {
- uint8_t slaveAddress;
- uint16_t syncGapMultiplicator;
+ uint8_t mSlaveAddress;
+ uint16_t mSyncGapMultiplicator;
- void toBuffer(unsigned char* buffer) {
- buffer[0] = slaveAddress;
+ void toBuffer(unsigned char* paBuffer) {
+ paBuffer[0] = mSlaveAddress;
- uint16_t syncGapFactor = htons(this->syncGapMultiplicator);
- memcpy(buffer + 1, &syncGapFactor, 2);
- }
+ uint16_t syncGapFactor = htons(this->mSyncGapMultiplicator);
+ memcpy(paBuffer + 1, &syncGapFactor, 2);
+ }
};
#pragma pack(pop)
diff --git a/src/modules/embrick/slave/slave.cpp b/src/modules/embrick/slave/slave.cpp
index 4712d5a..b774cfc 100644
--- a/src/modules/embrick/slave/slave.cpp
+++ b/src/modules/embrick/slave/slave.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -16,51 +17,50 @@
#include <processinterface.h>
#include "criticalregion.h"
-const int EmbrickSlaveHandler::MaxUpdateErrors = 50;
+const int EmbrickSlaveHandler::scmMaxUpdateErrors = 50;
-EmbrickSlaveHandler::EmbrickSlaveHandler(EmbrickBusHandler* bus, int address, EmbrickSlaveInitPackage init) :
- delegate(0), address(address), type((SlaveType) init.deviceId), bus(bus), dataSendLength(
- init.dataSendLength), dataReceiveLength(init.dataReceiveLength), status(
- NotInitialized), oldStatus(NotInitialized) {
- updateSendImage = new unsigned char[dataSendLength];
- updateReceiveImage = new unsigned char[dataReceiveLength];
- updateReceiveImageOld = new unsigned char[dataReceiveLength];
+EmbrickSlaveHandler::EmbrickSlaveHandler(EmbrickBusHandler* paBus, int paAddress, EmbrickSlaveInitPackage paInit) :
+ mDelegate(0), mAddress(paAddress), mType((SlaveType) paInit.mDeviceId), mBus(paBus), mDataSendLength(paInit.mDataSendLength),
+ mDataReceiveLength(paInit.mDataReceiveLength), mStatus(NotInitialized), mOldStatus(NotInitialized) {
+ mUpdateSendImage = new unsigned char[mDataSendLength];
+ mUpdateReceiveImage = new unsigned char[mDataReceiveLength];
+ mUpdateReceiveImageOld = new unsigned char[mDataReceiveLength];
- memset(updateSendImage, 0, dataSendLength);
- memset(updateReceiveImage, 0, dataReceiveLength);
- memset(updateReceiveImageOld, 0, dataReceiveLength);
+ memset(mUpdateSendImage, 0, mDataSendLength);
+ memset(mUpdateReceiveImage, 0, mDataReceiveLength);
+ memset(mUpdateReceiveImageOld, 0, mDataReceiveLength);
- updateErrorCounter = 0;
+ mUpdateErrorCounter = 0;
// Default config
- config.UpdateInterval = 25;
+ mConfig.mUpdateInterval = 25;
}
EmbrickSlaveHandler::~EmbrickSlaveHandler() {
dropHandles();
- delete updateSendImage;
- delete updateReceiveImage;
- delete updateReceiveImageOld;
+ delete mUpdateSendImage;
+ delete mUpdateReceiveImage;
+ delete mUpdateReceiveImageOld;
- if (delegate != 0)
- delegate->onSlaveDestroy();
+ if(mDelegate != 0) {
+ mDelegate->onSlaveDestroy();
+ }
}
-void EmbrickSlaveHandler::setConfig(Config config) {
- if (config.UpdateInterval < 20) {
- DEVLOG_WARNING(
- "embrick[EmbrickSlaveHandler]: Configured UpdateInterval not in range (>= 20). Set to 25.\n");
- config.UpdateInterval = 25;
+void EmbrickSlaveHandler::setConfig(Config paConfig) {
+ if(paConfig.mUpdateInterval < 20) {
+ DEVLOG_WARNING("embrick[EmbrickSlaveHandler]: Configured UpdateInterval not in range (>= 20). Set to 25.\n");
+ paConfig.mUpdateInterval = 25;
}
- this->config = config;
+ this->mConfig = paConfig;
}
-EmbrickSlaveHandler* EmbrickSlaveHandler::sendInit(EmbrickBusHandler* bus, int address) {
+EmbrickSlaveHandler* EmbrickSlaveHandler::sendInit(EmbrickBusHandler* paBus, int paAddress) {
EmbrickMasterInitPackage masterInit;
- masterInit.slaveAddress = (unsigned char) address;
- masterInit.syncGapMultiplicator = SyncGapMultiplicator;
+ masterInit.mSlaveAddress = (unsigned char) paAddress;
+ masterInit.mSyncGapMultiplicator = SyncGapMultiplicator;
unsigned char sendBuffer[sizeof(EmbrickMasterInitPackage)];
unsigned char receiveBuffer[sizeof(EmbrickSlaveInitPackage)];
@@ -68,102 +68,102 @@
masterInit.toBuffer(sendBuffer);
// Send init via broadcast. Due to the sequential slave select activation, only one slave will respond.
- if (!bus->broadcast(EmbrickBusHandler::Init, sendBuffer, sizeof(EmbrickMasterInitPackage),
- receiveBuffer, sizeof(EmbrickSlaveInitPackage)))
+ if(!paBus->broadcast(EmbrickBusHandler::Init, sendBuffer, sizeof(EmbrickMasterInitPackage), receiveBuffer, sizeof(EmbrickSlaveInitPackage))) {
return 0;
+ }
- EmbrickSlaveInitPackage initPackage = EmbrickSlaveInitPackage::fromBuffer(
- receiveBuffer);
+ EmbrickSlaveInitPackage initPackage = EmbrickSlaveInitPackage::fromBuffer(receiveBuffer);
// Alter the value of data receive length -> the status byte is handled in the BusHandler
- initPackage.dataReceiveLength--;
+ initPackage.mDataReceiveLength--;
- DEVLOG_INFO(
- "emBrick[EmbrickSlaveHandler]: ID - %d, ReceiveLength - %d, SendLength - %d, Producer - %d \n",
- initPackage.deviceId, initPackage.dataReceiveLength,
- initPackage.dataSendLength, initPackage.producerId);
+ DEVLOG_INFO("emBrick[EmbrickSlaveHandler]: ID - %d, ReceiveLength - %d, SendLength - %d, Producer - %d \n", initPackage.mDeviceId,
+ initPackage.mDataReceiveLength, initPackage.mDataSendLength, initPackage.mProducerId);
// Return slave instance
- return new EmbrickSlaveHandler(bus, address, initPackage);
+ return new EmbrickSlaveHandler(paBus, paAddress, initPackage);
}
int EmbrickSlaveHandler::update() {
// Send update request to bus
- if (!bus->transfer(address, EmbrickBusHandler::Data, updateSendImage, dataSendLength,
- updateReceiveImage, dataReceiveLength, &status, &updateMutex)) {
- updateErrorCounter++;
- if (updateErrorCounter % 10 == 0)
- DEVLOG_WARNING(
- "emBrick[EmbrickSlaveHandler]: Slave %d reached transfer error threshold - %d out of %d\n",
- address, updateErrorCounter, MaxUpdateErrors);
- return updateErrorCounter <= MaxUpdateErrors ? 0 : -1;
+ if(!mBus->transfer(mAddress, EmbrickBusHandler::Data, mUpdateSendImage, mDataSendLength, mUpdateReceiveImage, mDataReceiveLength, &mStatus, &mUpdateMutex)) {
+ mUpdateErrorCounter++;
+ if(mUpdateErrorCounter % 10 == 0) {
+ DEVLOG_WARNING("emBrick[EmbrickSlaveHandler]: Slave %d reached transfer error threshold - %d out of %d\n", mAddress, mUpdateErrorCounter,
+ scmMaxUpdateErrors);
+ }
+ return mUpdateErrorCounter <= scmMaxUpdateErrors ? 0 : -1;
}
// forte::core::IO::IOHandle the received image
{
- CCriticalRegion criticalRegion(handleMutex);
- TSlaveHandleList::Iterator itEnd = inputs.end();
- for (TSlaveHandleList::Iterator it = inputs.begin(); it != itEnd; ++it)
- if ((*it)->hasObserver() && !(*it)->equal(updateReceiveImageOld)) {
+ CCriticalRegion criticalRegion(mHandleMutex);
+ TSlaveHandleList::Iterator itEnd = mInputs.end();
+ for(TSlaveHandleList::Iterator it = mInputs.begin(); it != itEnd; ++it) {
+ if((*it)->hasObserver() && !(*it)->equal(mUpdateReceiveImageOld)) {
// Inform Process Interface about change
(*it)->onChange();
}
+ }
}
// Clone current image to old image
- memcpy(updateReceiveImageOld, updateReceiveImage, dataReceiveLength);
+ memcpy(mUpdateReceiveImageOld, mUpdateReceiveImage, mDataReceiveLength);
// Reset error counter
- if (updateErrorCounter > 0)
- updateErrorCounter = 0;
+ if(mUpdateErrorCounter > 0) {
+ mUpdateErrorCounter = 0;
+ }
// Check status
- if (delegate != 0 && oldStatus != status) {
- delegate->onSlaveStatus(status, oldStatus);
- oldStatus = status;
+ if(mDelegate != 0 && mOldStatus != mStatus) {
+ mDelegate->onSlaveStatus(mStatus, mOldStatus);
+ mOldStatus = mStatus;
}
return 1;
}
void EmbrickSlaveHandler::forceUpdate() {
- return bus->forceUpdate(index());
+ return mBus->forceUpdate(index());
}
void EmbrickSlaveHandler::dropHandles() {
- CCriticalRegion criticalRegion(handleMutex);
+ CCriticalRegion criticalRegion(mHandleMutex);
- forte::core::IO::IOMapper& mapper = forte::core::IO::IOMapper::getInstance();
+ forte::core::io::IOMapper& mapper = forte::core::io::IOMapper::getInstance();
- TSlaveHandleList::Iterator itEnd = inputs.end();
- for (TSlaveHandleList::Iterator it = inputs.begin(); it != itEnd; ++it) {
+ TSlaveHandleList::Iterator itEnd = mInputs.end();
+ for(TSlaveHandleList::Iterator it = mInputs.begin(); it != itEnd; ++it) {
mapper.deregisterHandle(*it);
delete *it;
}
- itEnd = outputs.end();
- for (TSlaveHandleList::Iterator it = outputs.begin(); it != itEnd; ++it) {
+ itEnd = mOutputs.end();
+ for(TSlaveHandleList::Iterator it = mOutputs.begin(); it != itEnd; ++it) {
mapper.deregisterHandle(*it);
delete *it;
}
- inputs.clearAll();
- outputs.clearAll();
+ mInputs.clearAll();
+ mOutputs.clearAll();
}
-void EmbrickSlaveHandler::addHandle(TSlaveHandleList* list, EmbrickSlaveHandle* handle) {
- CCriticalRegion criticalRegion(handleMutex);
- list->pushBack(handle);
+void EmbrickSlaveHandler::addHandle(TSlaveHandleList* paList, EmbrickSlaveHandle* paHandle) {
+ CCriticalRegion criticalRegion(mHandleMutex);
+ paList->pushBack(paHandle);
// TODO Maybe send indication event after connecting
}
-EmbrickSlaveHandle* EmbrickSlaveHandler::getHandle(TSlaveHandleList* list, int index) {
- TSlaveHandleList::Iterator itEnd = list->end();
+EmbrickSlaveHandle* EmbrickSlaveHandler::getHandle(TSlaveHandleList* paList, int paIndex) {
+ TSlaveHandleList::Iterator itEnd = paList->end();
int i = 0;
- for (TSlaveHandleList::Iterator it = list->begin(); it != itEnd; ++it, i++)
- if (index == i)
+ for(TSlaveHandleList::Iterator it = paList->begin(); it != itEnd; ++it, i++) {
+ if(paIndex == i) {
return *it;
+ }
+ }
return NULL;
}
diff --git a/src/modules/embrick/slave/slave.h b/src/modules/embrick/slave/slave.h
index 8ec63c2..1ac602a 100644
--- a/src/modules/embrick/slave/slave.h
+++ b/src/modules/embrick/slave/slave.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -25,100 +26,100 @@
#include <io/mapper/io_mapper.h>
-
class EmbrickBusHandler;
class EmbrickSlaveHandler {
-public:
- friend class EmbrickBusHandler;
-
- enum SlaveStatus {
- NotInitialized = 0, //!< Slave requires initialization
- OK = 1, //!< Everything works as expected
- Slow = 200, //!< Update frequency is too low, some errors may occurred
- Interrupted = 201, //!< Slave received no master updates
- Error = 202, //!< Connection has errors. Check hardware
- };
-
- enum SlaveType {
- UnknownSlave = 0,
- G_8Di8Do = 2181, //!< 8x Digital-Input, 24V, p-switch, 1-wire & 8x Digital-Output, 24V, p-switch, 1-wire
- G_2RelNo4RelCo = 2301 //!< 2x Relay-Output, NO, potential free & 4x Relay-Output, CO, potential free
- };
-
- struct Config {
- unsigned int UpdateInterval; //!< Sets the default frequency for the data update cycle of slaves. The emBRICK slaves require at least 20 updates per minute. The default value is 25 Hz.
- };
-
- class Delegate {
public:
- virtual void onSlaveStatus(SlaveStatus status, SlaveStatus oldStatus) = 0;
- virtual void onSlaveDestroy() = 0;
- };
+ friend class EmbrickBusHandler;
- void setConfig(Config config);
- Delegate* delegate;
+ enum SlaveStatus {
+ NotInitialized = 0, //!< Slave requires initialization
+ OK = 1, //!< Everything works as expected
+ Slow = 200, //!< Update frequency is too low, some errors may occurred
+ Interrupted = 201, //!< Slave received no master updates
+ Error = 202, //!< Connection has errors. Check hardware
+ };
- const unsigned int address;
- unsigned int index() const {
- return address - 1;
- }
+ enum SlaveType {
+ UnknownSlave = 0,
+ G_8Di8Do = 2181, //!< 8x Digital-Input, 24V, p-switch, 1-wire & 8x Digital-Output, 24V, p-switch, 1-wire
+ G_2RelNo4RelCo = 2301 //!< 2x Relay-Output, NO, potential free & 4x Relay-Output, CO, potential free
+ };
- const SlaveType type;
+ struct Config {
+ unsigned int mUpdateInterval; //!< Sets the default frequency for the data update cycle of slaves. The emBRICK slaves require at least 20 updates per minute. The default value is 25 Hz.
+ };
- int update();
- void forceUpdate();
+ class Delegate {
+ public:
+ virtual void onSlaveStatus(SlaveStatus paStatus, SlaveStatus paOldStatus) = 0;
+ virtual void onSlaveDestroy() = 0;
+ };
- EmbrickSlaveHandle* getInputHandle(int index) {
- return getHandle(&inputs, index);
- }
- EmbrickSlaveHandle* getOutputHandle(int index) {
- return getHandle(&outputs, index);
- }
+ void setConfig(Config paConfig);
+ Delegate* mDelegate;
- void addHandle(EmbrickSlaveHandle* handle) {
- if (handle->is(forte::core::IO::IOMapper::In))
- addHandle(&inputs, handle);
- else if (handle->is(forte::core::IO::IOMapper::Out))
- addHandle(&outputs, handle);
- }
+ const unsigned int mAddress;
+ unsigned int index() const {
+ return mAddress - 1;
+ }
- void dropHandles();
+ const SlaveType mType;
- unsigned char *updateSendImage;
- unsigned char *updateReceiveImage;
- CSyncObject updateMutex;
+ int update();
+ void forceUpdate();
-protected:
- static EmbrickSlaveHandler* sendInit(EmbrickBusHandler* bus, int address);
+ EmbrickSlaveHandle* getInputHandle(int paIndex) {
+ return getHandle(&mInputs, paIndex);
+ }
+ EmbrickSlaveHandle* getOutputHandle(int paIndex) {
+ return getHandle(&mOutputs, paIndex);
+ }
- EmbrickSlaveHandler(EmbrickBusHandler* bus, int address, EmbrickSlaveInitPackage init);
- virtual ~EmbrickSlaveHandler();
+ void addHandle(EmbrickSlaveHandle* paHandle) {
+ if(paHandle->is(forte::core::io::IOMapper::In)) {
+ addHandle(&mInputs, paHandle);
+ } else if(paHandle->is(forte::core::io::IOMapper::Out)) {
+ addHandle(&mOutputs, paHandle);
+ }
+ }
- EmbrickBusHandler* bus;
+ void dropHandles();
- Config config;
+ unsigned char *mUpdateSendImage;
+ unsigned char *mUpdateReceiveImage;
+ CSyncObject mUpdateMutex;
- const uint8_t dataSendLength;
- const uint8_t dataReceiveLength;
- SlaveStatus status;
- SlaveStatus oldStatus;
- unsigned char *updateReceiveImageOld;
+ protected:
+ static EmbrickSlaveHandler* sendInit(EmbrickBusHandler* paBus, int paAddress);
- int updateErrorCounter;
- static const int MaxUpdateErrors;
+ EmbrickSlaveHandler(EmbrickBusHandler* paBus, int paAddress, EmbrickSlaveInitPackage paInit);
+ virtual ~EmbrickSlaveHandler();
- CSyncObject handleMutex;
- typedef CSinglyLinkedList<EmbrickSlaveHandle *> TSlaveHandleList;
- TSlaveHandleList inputs;
- TSlaveHandleList outputs;
- void addHandle(TSlaveHandleList* list, EmbrickSlaveHandle* handle);
- EmbrickSlaveHandle* getHandle(TSlaveHandleList* list, int index);
+ EmbrickBusHandler* mBus;
-private:
- //!declared but undefined copy constructor as we don't want Slaves to be directly copied.
- EmbrickSlaveHandler(const EmbrickSlaveHandler&);
+ Config mConfig;
+
+ const uint8_t mDataSendLength;
+ const uint8_t mDataReceiveLength;
+ SlaveStatus mStatus;
+ SlaveStatus mOldStatus;
+ unsigned char *mUpdateReceiveImageOld;
+
+ int mUpdateErrorCounter;
+ static const int scmMaxUpdateErrors;
+
+ CSyncObject mHandleMutex;
+ typedef CSinglyLinkedList<EmbrickSlaveHandle *> TSlaveHandleList;
+ TSlaveHandleList mInputs;
+ TSlaveHandleList mOutputs;
+ void addHandle(TSlaveHandleList* paList, EmbrickSlaveHandle* paHandle);
+ EmbrickSlaveHandle* getHandle(TSlaveHandleList* list, int paIndex);
+
+ private:
+ //!declared but undefined copy constructor as we don't want Slaves to be directly copied.
+ EmbrickSlaveHandler(const EmbrickSlaveHandler&);
};
#endif /* SRC_MODULES_EMBRICK_SLAVE_SLAVE_H_ */
diff --git a/src/modules/embrick/types/BusAdapter.cpp b/src/modules/embrick/types/BusAdapter.cpp
index 9deafac..084c9cd 100644
--- a/src/modules/embrick/types/BusAdapter.cpp
+++ b/src/modules/embrick/types/BusAdapter.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -52,6 +53,6 @@
scm_anDataOutputNames, scm_anDataOutputTypeIds, 1, scm_anDataInputNames,
scm_anDataInputTypeIds, 0, 0 };
-const TForteUInt8 EmbrickBusAdapter::scm_slaveConfigurationIO[] = { 3 };
-const TForteUInt8 EmbrickBusAdapter::scm_slaveConfigurationIO_num = 1;
+const TForteUInt8 EmbrickBusAdapter::scmSlaveConfigurationIO[] = { 3 };
+const TForteUInt8 EmbrickBusAdapter::scmSlaveConfigurationIONum = 1;
diff --git a/src/modules/embrick/types/BusAdapter.h b/src/modules/embrick/types/BusAdapter.h
index c866107..a11ea1c 100644
--- a/src/modules/embrick/types/BusAdapter.h
+++ b/src/modules/embrick/types/BusAdapter.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,7 +19,7 @@
#include <forte_bool.h>
#include <forte_uint.h>
-class EmbrickBusAdapter: public forte::core::IO::IOConfigFBMultiAdapter {
+class EmbrickBusAdapter: public forte::core::io::IOConfigFBMultiAdapter {
DECLARE_ADAPTER_TYPE(EmbrickBusAdapter)
private:
@@ -54,8 +55,8 @@
};
private:
- static const TForteUInt8 scm_slaveConfigurationIO[];
- static const TForteUInt8 scm_slaveConfigurationIO_num;
+ static const TForteUInt8 scmSlaveConfigurationIO[];
+ static const TForteUInt8 scmSlaveConfigurationIONum;
virtual ~EmbrickBusAdapter() {};
diff --git a/src/modules/embrick/types/Master.cpp b/src/modules/embrick/types/Master.cpp
index 9a04cfd..c1a9fa8 100644
--- a/src/modules/embrick/types/Master.cpp
+++ b/src/modules/embrick/types/Master.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -60,23 +61,23 @@
}
-forte::core::IO::IODeviceController* EmbrickMaster::createDeviceController(CDeviceExecution& paDeviceExecution) {
+forte::core::io::IODeviceController* EmbrickMaster::createDeviceController(CDeviceExecution& paDeviceExecution) {
return new EmbrickBusHandler(paDeviceExecution);
}
void EmbrickMaster::setConfig() {
EmbrickBusHandler::Config config;
- config.BusInterface = BusInterface();
- config.BusSelectPin = BusSelectPin();
- config.BusInitSpeed = BusInitSpeed();
- config.BusLoopSpeed = BusLoopSpeed();
- controller->setConfig(&config);
+ config.mBusInterface = BusInterface();
+ config.mBusSelectPin = BusSelectPin();
+ config.mBusInitSpeed = BusInitSpeed();
+ config.mBusLoopSpeed = BusLoopSpeed();
+ getDeviceController()->setConfig(&config);
}
void EmbrickMaster::onStartup() {
BusAdapterOut().UpdateInterval() = SlaveUpdateInterval();
- forte::core::IO::IOConfigFBMultiMaster::onStartup();
+ forte::core::io::IOConfigFBMultiMaster::onStartup();
}
diff --git a/src/modules/embrick/types/Master.h b/src/modules/embrick/types/Master.h
index 3bc9d55..97a84c0 100644
--- a/src/modules/embrick/types/Master.h
+++ b/src/modules/embrick/types/Master.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -21,7 +22,7 @@
#include <handler/bus.h>
#include "../../../core/io/configFB/io_master_multi.h"
-class EmbrickMaster: public forte::core::IO::IOConfigFBMultiMaster {
+class EmbrickMaster: public forte::core::io::IOConfigFBMultiMaster {
DECLARE_FIRMWARE_FB(EmbrickMaster)
private:
@@ -73,14 +74,14 @@
virtual void setInitialValues();
protected:
- forte::core::IO::IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution);
+ forte::core::io::IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution);
void setConfig();
virtual void onStartup();
public:
- FUNCTION_BLOCK_CTOR_WITH_BASE_CLASS(EmbrickMaster, forte::core::IO::IOConfigFBMultiMaster){
+ FUNCTION_BLOCK_CTOR_WITH_BASE_CLASS(EmbrickMaster, forte::core::io::IOConfigFBMultiMaster){
}
};
diff --git a/src/modules/embrick/types/Slave.cpp b/src/modules/embrick/types/Slave.cpp
index 90296ad..8963710 100644
--- a/src/modules/embrick/types/Slave.cpp
+++ b/src/modules/embrick/types/Slave.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -18,16 +19,10 @@
const char * const EmbrickSlave::scmError = "Error";
const char * const EmbrickSlave::scmUnknown = "Invalid status code";
-EmbrickSlave::EmbrickSlave(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, int type,
- CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
- forte::core::IO::IOConfigFBMultiSlave(
- paSlaveConfigurationIO,
- paSlaveConfigurationIO_num, type, pa_poSrcRes, pa_pstInterfaceSpec,
- pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData), slave(0) {
+EmbrickSlave::EmbrickSlave(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIO_num, int paType, CResource *paSrcRes,
+ const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ forte::core::io::IOConfigFBMultiSlave(paSlaveConfigurationIO, paSlaveConfigurationIO_num, paType, paSrcRes, paInterfaceSpec, paInstanceNameId,
+ paFBConnData, paFBVarsData), mSlave(0) {
}
EmbrickSlave::~EmbrickSlave() {
@@ -35,48 +30,47 @@
}
const char* EmbrickSlave::init() {
- CCriticalRegion criticalRegion(slaveMutex);
+ CCriticalRegion criticalRegion(mSlaveMutex);
EmbrickBusHandler &bus = *static_cast<EmbrickBusHandler*>(&getController());
- slave = bus.getSlave(index);
- slave->delegate = this;
+ mSlave = bus.getSlave(mIndex);
+ mSlave->mDelegate = this;
EmbrickSlaveHandler::Config config;
- config.UpdateInterval = UpdateInterval();
- slave->setConfig(config);
-
+ config.mUpdateInterval = UpdateInterval();
+ mSlave->setConfig(config);
return 0;
}
void EmbrickSlave::deInit() {
- CCriticalRegion criticalRegion(slaveMutex);
+ CCriticalRegion criticalRegion(mSlaveMutex);
- if (slave != 0) {
- slave->delegate = 0;
- slave = 0;
+ if(mSlave != 0) {
+ mSlave->mDelegate = 0;
+ mSlave = 0;
}
}
-void EmbrickSlave::onSlaveStatus(EmbrickSlaveHandler::SlaveStatus status, EmbrickSlaveHandler::SlaveStatus) {
- switch (status) {
- case EmbrickSlaveHandler::OK:
- STATUS() = scmOK;
- break;
- case EmbrickSlaveHandler::Slow:
- STATUS() = scmSlow;
- break;
- case EmbrickSlaveHandler::Interrupted:
- STATUS() = scmInterrupted;
- break;
- case EmbrickSlaveHandler::Error:
- STATUS() = scmError;
- break;
- default:
- STATUS() = scmUnknown;
- break;
+void EmbrickSlave::onSlaveStatus(EmbrickSlaveHandler::SlaveStatus paStatus, EmbrickSlaveHandler::SlaveStatus) {
+ switch(paStatus){
+ case EmbrickSlaveHandler::OK:
+ STATUS() = scmOK;
+ break;
+ case EmbrickSlaveHandler::Slow:
+ STATUS() = scmSlow;
+ break;
+ case EmbrickSlaveHandler::Interrupted:
+ STATUS() = scmInterrupted;
+ break;
+ case EmbrickSlaveHandler::Error:
+ STATUS() = scmError;
+ break;
+ default:
+ STATUS() = scmUnknown;
+ break;
}
sendOutputEvent(scm_nEventINDID);
@@ -88,8 +82,5 @@
QO() = false;
STATUS() = scmError;
-// sendOutputEvent(scm_nEventINDID);
}
-
-
diff --git a/src/modules/embrick/types/Slave.h b/src/modules/embrick/types/Slave.h
index 6370d0f..200be79 100644
--- a/src/modules/embrick/types/Slave.h
+++ b/src/modules/embrick/types/Slave.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -21,48 +22,41 @@
#include <slave/handle.h>
#include "../../../core/io/configFB/io_slave_multi.h"
-class EmbrickSlave: public forte::core::IO::IOConfigFBMultiSlave,
- public EmbrickSlaveHandler::Delegate {
-public:
- EmbrickSlave(const TForteUInt8* const paSlaveConfigurationIO,
- const TForteUInt8 paSlaveConfigurationIO_num, int type,
- CResource *pa_poSrcRes,
- const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId,
- TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData);
- virtual ~EmbrickSlave();
+class EmbrickSlave : public forte::core::io::IOConfigFBMultiSlave, public EmbrickSlaveHandler::Delegate {
+ public:
+ EmbrickSlave(const TForteUInt8* const paSlaveConfigurationIO, const TForteUInt8 paSlaveConfigurationIO_num, int paType, CResource *paSrcRes,
+ const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ virtual ~EmbrickSlave();
-protected:
- virtual CIEC_UINT &UpdateInterval() {
- // TODO Remove
- return *static_cast<CIEC_UINT*>(getDI(0));
- }
+ protected:
+ virtual CIEC_UINT &UpdateInterval() {
+ // TODO Remove
+ return *static_cast<CIEC_UINT*>(getDI(0));
+ }
- EmbrickBusAdapter& BusAdapterOut() {
- return (*static_cast<EmbrickBusAdapter*>(m_apoAdapters[0]));
- }
+ EmbrickBusAdapter& BusAdapterOut() {
+ return (*static_cast<EmbrickBusAdapter*>(m_apoAdapters[0]));
+ }
- EmbrickBusAdapter& BusAdapterIn() {
- return (*static_cast<EmbrickBusAdapter*>(m_apoAdapters[1]));
- }
+ EmbrickBusAdapter& BusAdapterIn() {
+ return (*static_cast<EmbrickBusAdapter*>(m_apoAdapters[1]));
+ }
- CSyncObject slaveMutex;
- EmbrickSlaveHandler *slave;
+ CSyncObject mSlaveMutex;
+ EmbrickSlaveHandler *mSlave;
-public:
- void onSlaveStatus(EmbrickSlaveHandler::SlaveStatus status,
- EmbrickSlaveHandler::SlaveStatus oldStatus);
- void onSlaveDestroy();
+ public:
+ void onSlaveStatus(EmbrickSlaveHandler::SlaveStatus paStatus, EmbrickSlaveHandler::SlaveStatus paOldStatus);
+ void onSlaveDestroy();
-private:
- const char* init();
- void deInit();
+ private:
+ const char* init();
+ void deInit();
- static const char * const scmSlow;
- static const char * const scmInterrupted;
- static const char * const scmError;
- static const char * const scmUnknown;
+ static const char * const scmSlow;
+ static const char * const scmInterrupted;
+ static const char * const scmError;
+ static const char * const scmUnknown;
};
-
#endif /* SRC_MODULES_EMBRICK_TYPES_SLAVE_H_ */
diff --git a/src/modules/embrick/types/Slave2181.cpp b/src/modules/embrick/types/Slave2181.cpp
index 0b787ee..80f7560 100644
--- a/src/modules/embrick/types/Slave2181.cpp
+++ b/src/modules/embrick/types/Slave2181.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -65,8 +66,8 @@
scm_anDataInputNames, scm_anDataInputTypeIds, 2, scm_anDataOutputNames,
scm_anDataOutputTypeIds, 2, scm_astAdapterInstances };
-const TForteUInt8 EmbrickSlave2181::scm_slaveConfigurationIO[] = { 17 };
-const TForteUInt8 EmbrickSlave2181::scm_slaveConfigurationIO_num = 1;
+const TForteUInt8 EmbrickSlave2181::scmSlaveConfigurationIO[] = { 17 };
+const TForteUInt8 EmbrickSlave2181::scmSlaveConfigurationIONum = 1;
void EmbrickSlave2181::initHandles() {
// Initialize handles
@@ -77,14 +78,14 @@
for (int i = 0; i < iCount; i++) {
EmbrickBusHandler::HandleDescriptor desc = EmbrickBusHandler::HandleDescriptor(
- *static_cast<CIEC_WSTRING*>(getDI(iOffset + i)), forte::core::IO::IOMapper::In, index,
+ *static_cast<CIEC_WSTRING*>(getDI(iOffset + i)), forte::core::io::IOMapper::In, mIndex,
EmbrickBusHandler::Bit, (uint8_t) (i / 8), (uint8_t) (i % 8));
initHandle(&desc);
}
for (int i = 0; i < oCount; i++) {
EmbrickBusHandler::HandleDescriptor desc = EmbrickBusHandler::HandleDescriptor(
- *static_cast<CIEC_WSTRING*>(getDI(oOffset + i)), forte::core::IO::IOMapper::Out, index,
+ *static_cast<CIEC_WSTRING*>(getDI(oOffset + i)), forte::core::io::IOMapper::Out, mIndex,
EmbrickBusHandler::Bit, (uint8_t) (i / 8), (uint8_t) (i % 8));
initHandle(&desc);
}
diff --git a/src/modules/embrick/types/Slave2181.h b/src/modules/embrick/types/Slave2181.h
index dea13a1..3c2c18d 100644
--- a/src/modules/embrick/types/Slave2181.h
+++ b/src/modules/embrick/types/Slave2181.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -111,8 +112,8 @@
FORTE_FB_DATA_ARRAY(2, 18, 2, 2)
- static const TForteUInt8 scm_slaveConfigurationIO[];
- static const TForteUInt8 scm_slaveConfigurationIO_num;
+ static const TForteUInt8 scmSlaveConfigurationIO[];
+ static const TForteUInt8 scmSlaveConfigurationIONum;
virtual void initHandles();
diff --git a/src/modules/embrick/types/Slave2301.cpp b/src/modules/embrick/types/Slave2301.cpp
index 0e603c1..d883aca 100644
--- a/src/modules/embrick/types/Slave2301.cpp
+++ b/src/modules/embrick/types/Slave2301.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -55,8 +56,8 @@
scm_anDataInputNames, scm_anDataInputTypeIds, 2, scm_anDataOutputNames,
scm_anDataOutputTypeIds, 2, scm_astAdapterInstances };
-const TForteUInt8 EmbrickSlave2301::scm_slaveConfigurationIO[] = { 7 };
-const TForteUInt8 EmbrickSlave2301::scm_slaveConfigurationIO_num = 1;
+const TForteUInt8 EmbrickSlave2301::scmSlaveConfigurationIO[] = { 7 };
+const TForteUInt8 EmbrickSlave2301::scmSlaveConfigurationIONum = 1;
void EmbrickSlave2301::initHandles() {
// Initialize handles
@@ -67,7 +68,7 @@
for (int i = 0; i < oCount; i++) {
EmbrickBusHandler::HandleDescriptor desc = EmbrickBusHandler::HandleDescriptor(
- *static_cast<CIEC_WSTRING*>(getDI(oOffset + i)), forte::core::IO::IOMapper::Out, index,
+ *static_cast<CIEC_WSTRING*>(getDI(oOffset + i)), forte::core::io::IOMapper::Out, mIndex,
EmbrickBusHandler::Bit, (uint8_t) (i / 8), (uint8_t) (i % 8));
initHandle(&desc);
}
diff --git a/src/modules/embrick/types/Slave2301.h b/src/modules/embrick/types/Slave2301.h
index ecc47f4..f0ff40b 100644
--- a/src/modules/embrick/types/Slave2301.h
+++ b/src/modules/embrick/types/Slave2301.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
@@ -71,8 +72,8 @@
FORTE_FB_DATA_ARRAY(2, 8, 2, 2)
- static const TForteUInt8 scm_slaveConfigurationIO[];
- static const TForteUInt8 scm_slaveConfigurationIO_num;
+ static const TForteUInt8 scmSlaveConfigurationIO[];
+ static const TForteUInt8 scmSlaveConfigurationIONum;
virtual void initHandles();
diff --git a/src/modules/i2c_dev/CMakeLists.txt b/src/modules/i2c_dev/CMakeLists.txt
index 0e7f9c8..df2262f 100644
--- a/src/modules/i2c_dev/CMakeLists.txt
+++ b/src/modules/i2c_dev/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2015 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2015 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(I2C-Dev "Interacting with GPIOs of Linux-based devices via I2C using i2c-dev")
diff --git a/src/modules/i2c_dev/i2cprocessinterface.cpp b/src/modules/i2c_dev/i2cprocessinterface.cpp
index 0503aa2..1db221d 100644
--- a/src/modules/i2c_dev/i2cprocessinterface.cpp
+++ b/src/modules/i2c_dev/i2cprocessinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/i2c_dev/i2cprocessinterface.h b/src/modules/i2c_dev/i2cprocessinterface.h
index 72e7a82..9732ef1 100644
--- a/src/modules/i2c_dev/i2cprocessinterface.h
+++ b/src/modules/i2c_dev/i2cprocessinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/i2c_dev/processinterface.h b/src/modules/i2c_dev/processinterface.h
index 770d07c..eae9bd0 100644
--- a/src/modules/i2c_dev/processinterface.h
+++ b/src/modules/i2c_dev/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/CMakeLists.txt b/src/modules/lms_ev3/CMakeLists.txt
index a995b85..f2156f5 100644
--- a/src/modules/lms_ev3/CMakeLists.txt
+++ b/src/modules/lms_ev3/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2015, 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2015, 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# * Jose Cabral - added fileWriter
# *******************************************************************************/
diff --git a/src/modules/lms_ev3/fileReader.cpp b/src/modules/lms_ev3/fileReader.cpp
index 05d0668..31dd6c2 100644
--- a/src/modules/lms_ev3/fileReader.cpp
+++ b/src/modules/lms_ev3/fileReader.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/fileReader.h b/src/modules/lms_ev3/fileReader.h
index 24c5402..bff239e 100644
--- a/src/modules/lms_ev3/fileReader.h
+++ b/src/modules/lms_ev3/fileReader.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/fileWriter.cpp b/src/modules/lms_ev3/fileWriter.cpp
index 543473b..d90c3ab 100644
--- a/src/modules/lms_ev3/fileWriter.cpp
+++ b/src/modules/lms_ev3/fileWriter.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/fileWriter.h b/src/modules/lms_ev3/fileWriter.h
index 2d3a6d6..b232531 100644
--- a/src/modules/lms_ev3/fileWriter.h
+++ b/src/modules/lms_ev3/fileWriter.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/processinterface.cpp b/src/modules/lms_ev3/processinterface.cpp
index 3a576d6..5b6889e 100644
--- a/src/modules/lms_ev3/processinterface.cpp
+++ b/src/modules/lms_ev3/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/lms_ev3/processinterface.h b/src/modules/lms_ev3/processinterface.h
index c81e251..ff56447 100644
--- a/src/modules/lms_ev3/processinterface.h
+++ b/src/modules/lms_ev3/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/mlpi/CMakeLists.txt b/src/modules/mlpi/CMakeLists.txt
index abfd222..dbf28a0 100644
--- a/src/modules/mlpi/CMakeLists.txt
+++ b/src/modules/mlpi/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
###############################################################
diff --git a/src/modules/mlpi/processinterface.cpp b/src/modules/mlpi/processinterface.cpp
index f7c8b96..07d18f8 100644
--- a/src/modules/mlpi/processinterface.cpp
+++ b/src/modules/mlpi/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/mlpi/processinterface.h b/src/modules/mlpi/processinterface.h
index 4301fff..8372366 100644
--- a/src/modules/mlpi/processinterface.h
+++ b/src/modules/mlpi/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/CMakeLists.txt b/src/modules/modbus/CMakeLists.txt
index 9973715..86aa0e3 100644
--- a/src/modules/modbus/CMakeLists.txt
+++ b/src/modules/modbus/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 -2014 AIT, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2012 -2014 AIT, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
# Modbus Com Layer
diff --git a/src/modules/modbus/modbusclientconnection.cpp b/src/modules/modbus/modbusclientconnection.cpp
index 6d9d49a..8e6cffd 100644
--- a/src/modules/modbus/modbusclientconnection.cpp
+++ b/src/modules/modbus/modbusclientconnection.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
@@ -166,8 +167,9 @@
}
}
- if(dataReturned)
+ if(dataReturned) {
m_pModbusHandler->executeComCallback(m_nComCallbackId);
+ }
if((nrErrors == m_nNrOfPolls) && (0 != m_nNrOfPolls)){
modbus_close(m_pModbusConn); // in any case it is worth trying to close the socket
@@ -180,9 +182,9 @@
void CModbusClientConnection::tryConnect(){
if(m_pModbusConnEvent != NULL){
if(m_pModbusConnEvent->readyToExecute()){
- if(m_pModbusConnEvent->executeEvent(m_pModbusConn, NULL) < 0)
+ if(m_pModbusConnEvent->executeEvent(m_pModbusConn, NULL) < 0) {
DEVLOG_ERROR("Connection to Modbus server failed: %s\n", modbus_strerror(errno));
- else{
+ } else {
DEVLOG_INFO("Connection to Modbus server succeded\n");
delete m_pModbusConnEvent;
diff --git a/src/modules/modbus/modbusclientconnection.h b/src/modules/modbus/modbusclientconnection.h
index a14a785..cb2bea8 100644
--- a/src/modules/modbus/modbusclientconnection.h
+++ b/src/modules/modbus/modbusclientconnection.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbusconnection.cpp b/src/modules/modbus/modbusconnection.cpp
index 0ae7637..9337d58 100644
--- a/src/modules/modbus/modbusconnection.cpp
+++ b/src/modules/modbus/modbusconnection.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbusconnection.h b/src/modules/modbus/modbusconnection.h
index 93a3845..583fefd 100644
--- a/src/modules/modbus/modbusconnection.h
+++ b/src/modules/modbus/modbusconnection.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbushandler.cpp b/src/modules/modbus/modbushandler.cpp
index 69b95e5..faf0ece 100644
--- a/src/modules/modbus/modbushandler.cpp
+++ b/src/modules/modbus/modbushandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbushandler.h b/src/modules/modbus/modbushandler.h
index be34c71..8735434 100644
--- a/src/modules/modbus/modbushandler.h
+++ b/src/modules/modbus/modbushandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2015 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbuslayer.cpp b/src/modules/modbus/modbuslayer.cpp
index 29544ef..c31e6e1 100644
--- a/src/modules/modbus/modbuslayer.cpp
+++ b/src/modules/modbus/modbuslayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Patrick Smejkal, Alois Zoitl, Martin Melik-Merkumians - initial API and implementation and/or initial documentation
@@ -314,8 +315,9 @@
TForteUInt16 *destAr = new TForteUInt16[nrUint16s];
TForteUInt16 *sourceAr = (TForteUInt16*) pa_acDataArray;
- for(unsigned int i = 0; i < nrUint16s; i++)
+ for(unsigned int i = 0; i < nrUint16s; i++) {
destAr[i] = sourceAr[nrUint16s - 1 - i];
+ }
retVal = *((T*) destAr);
@@ -323,15 +325,17 @@
}
else{
TForteByte *tempAr = new TForteByte[currentDataSize];
- for(unsigned int j = 0; j < currentDataSize; j++)
+ for(unsigned int j = 0; j < currentDataSize; j++) {
tempAr[j] = pa_acDataArray[j];
+ }
retVal = *((T*) tempAr);
delete[] tempAr;
}
}
- else
+ else {
retVal = 0;
+ }
return retVal;
}
@@ -644,8 +648,9 @@
const char *pch = strchr(&pa_acParam[pa_nStartIndex], ',');
if(pch != NULL){
- if(pch - &pa_acParam[pa_nStartIndex] < strLength - 1)
+ if(pch - &pa_acParam[pa_nStartIndex] < strLength - 1) {
return pch - &pa_acParam[0] + 1;
+ }
}
@@ -657,14 +662,15 @@
const char *pchComma = strchr(&pa_acParam[pa_nStartIndex], ',');
const char *pchDot = strchr(&pa_acParam[pa_nStartIndex], '.');
- if(pchComma != NULL && pchDot != NULL){
- if(pchDot < pchComma)
- if(pchDot - &pa_acParam[pa_nStartIndex] < strLength - 2)
- return pchDot - &pa_acParam[0] + 2;
- }
- else if(pchDot != NULL)
- if(pchDot - &pa_acParam[pa_nStartIndex] < strLength - 2)
+ if(pchComma != NULL && pchDot != NULL) {
+ if(pchDot < pchComma && (pchDot - &pa_acParam[pa_nStartIndex] < strLength - 2)) {
return pchDot - &pa_acParam[0] + 2;
+ }
+ } else if(pchDot != NULL) {
+ if(pchDot - &pa_acParam[pa_nStartIndex] < strLength - 2) {
+ return pchDot - &pa_acParam[0] + 2;
+ }
+ }
return pa_nStartIndex;
}
diff --git a/src/modules/modbus/modbuslayer.h b/src/modules/modbus/modbuslayer.h
index 5f3d25f..b634545 100644
--- a/src/modules/modbus/modbuslayer.h
+++ b/src/modules/modbus/modbuslayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2015 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbuspoll.cpp b/src/modules/modbus/modbuspoll.cpp
index 6841f59..d4a4044 100644
--- a/src/modules/modbus/modbuspoll.cpp
+++ b/src/modules/modbus/modbuspoll.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbuspoll.h b/src/modules/modbus/modbuspoll.h
index e74f47a..7df7831 100644
--- a/src/modules/modbus/modbuspoll.h
+++ b/src/modules/modbus/modbuspoll.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbustimedevent.cpp b/src/modules/modbus/modbustimedevent.cpp
index 2c9ac78..96afdc5 100644
--- a/src/modules/modbus/modbustimedevent.cpp
+++ b/src/modules/modbus/modbustimedevent.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/modbus/modbustimedevent.h b/src/modules/modbus/modbustimedevent.h
index 44436e3..fe3bfed 100644
--- a/src/modules/modbus/modbustimedevent.h
+++ b/src/modules/modbus/modbustimedevent.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/mqtt_paho/CMakeLists.txt b/src/modules/mqtt_paho/CMakeLists.txt
index 402b5d8..abd3ca4 100644
--- a/src/modules/mqtt_paho/CMakeLists.txt
+++ b/src/modules/mqtt_paho/CMakeLists.txt
@@ -1,9 +1,10 @@
#############################################################################
# Copyright (c) 2013, 2014 ACIN
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Martin Melik Merkumians - initial API and implementation and/or initial documentation
diff --git a/src/modules/mqtt_paho/MQTTComLayer.cpp b/src/modules/mqtt_paho/MQTTComLayer.cpp
index 5a6ed9a..9ef73b8 100644
--- a/src/modules/mqtt_paho/MQTTComLayer.cpp
+++ b/src/modules/mqtt_paho/MQTTComLayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -63,14 +64,15 @@
EComResponse MQTTComLayer::openConnection(char* paLayerParameter) {
EComResponse eRetVal = e_InitInvalidId;
- CParameterParser parser(paLayerParameter, mNoOfParameters);
+ CParameterParser parser(paLayerParameter, ',', mNoOfParameters);
if(mNoOfParameters == parser.parseParameters()){
mTopicName = parser[Topic];
if( MQTTHandler::eRegisterLayerSucceeded ==
getExtEvHandler<MQTTHandler>().registerLayer(parser[Address], parser[ClientID], this)) {
eRetVal = e_InitOk;
+ } else {
+ eRetVal = e_InitInvalidId;
}
- else eRetVal = e_InitInvalidId;
switch (m_poFb->getComServiceType()){
case e_Server:
diff --git a/src/modules/mqtt_paho/MQTTComLayer.h b/src/modules/mqtt_paho/MQTTComLayer.h
index 709488d..82a8d3c 100644
--- a/src/modules/mqtt_paho/MQTTComLayer.h
+++ b/src/modules/mqtt_paho/MQTTComLayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -16,7 +17,7 @@
#include "comlayer.h"
#include "../../core/datatypes/forte_string.h"
extern "C" {
- #include <MQTTAsync.h>
+#include <MQTTAsync.h>
}
#define QOS 0
diff --git a/src/modules/mqtt_paho/MQTTHandler.cpp b/src/modules/mqtt_paho/MQTTHandler.cpp
index ba65c54..ea9b77e 100644
--- a/src/modules/mqtt_paho/MQTTHandler.cpp
+++ b/src/modules/mqtt_paho/MQTTHandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -53,6 +54,14 @@
/*
* START OF CALLBACKS
*/
+
+/** Callback for handling message reception.
+ *
+ * For convenience and performance it would be great to have the paContext param set subscribing topic.
+ * However Paho only allows one callback per client. Therefore we have to search for the layers attached to this topic.
+ * For details see discussion in Bug 545111.
+ *
+ */
int MQTTHandler::onMqttMessageArrived(void* paContext, char* paTopicName, int, MQTTAsync_message* paMessage){
//TODO: Check if handler allowed
if(0 != paContext){
@@ -122,7 +131,7 @@
MQTTHandler& handler = ::getExtEvHandler<MQTTHandler>(*layer->getCommFB());
DEVLOG_INFO("MQTT: Subscription succeed. Topic: -%s-\n", layer->getTopicName());
- handler.popLayerFromList(layer, &handler.mToResubscribe);
+ handler.mToResubscribe.erase(layer);
if(handler.mToResubscribe.isEmpty()){
smMQTTS_STATE = ALL_SUBSCRIBED;
}
@@ -173,26 +182,6 @@
return rc;
}
-void MQTTHandler::popLayerFromList(MQTTComLayer* paLayer, CSinglyLinkedList<MQTTComLayer*> *paList){
- CSinglyLinkedList<MQTTComLayer*>::Iterator itRunner(paList->begin());
- CSinglyLinkedList<MQTTComLayer*>::Iterator itRefNode(paList->end());
- CSinglyLinkedList<MQTTComLayer*>::Iterator itEnd(paList->end());
-
- while(itRunner != itEnd){
- if(*itRunner == paLayer){
- if(itRefNode == itEnd){
- paList->popFront();
- }
- else{
- paList->eraseAfter(itRefNode);
- }
- break;
- }
- itRefNode = itRunner;
- ++itRunner;
- }
-}
-
int MQTTHandler::registerLayer(const char* paAddress, const char* paClientId, MQTTComLayer* paLayer){
if(smClient == 0){
smClientId = paClientId;
@@ -234,7 +223,7 @@
void MQTTHandler::unregisterLayer(MQTTComLayer* paLayer){
CCriticalRegion section(smMQTTMutex);
- popLayerFromList(paLayer, &mlayers);
+ mlayers.erase(paLayer);
}
void MQTTHandler::enableHandler(void){
diff --git a/src/modules/mqtt_paho/MQTTHandler.h b/src/modules/mqtt_paho/MQTTHandler.h
index f1f4d40..f5ebf14 100644
--- a/src/modules/mqtt_paho/MQTTHandler.h
+++ b/src/modules/mqtt_paho/MQTTHandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013, 2014 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians - initial API and implementation and/or initial documentation
@@ -73,8 +74,6 @@
int mqttSubscribe(const MQTTComLayer* paLayer);
int mqttConnect();
- void popLayerFromList(MQTTComLayer* paLayer, CSinglyLinkedList<MQTTComLayer*> *paList);
-
void resumeSelfSuspend();
void selfSuspend();
diff --git a/src/modules/odroid/CMakeLists.txt b/src/modules/odroid/CMakeLists.txt
index 15d0fd3..b0a310d 100644
--- a/src/modules/odroid/CMakeLists.txt
+++ b/src/modules/odroid/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(Odroid "Interacting with GPIOs and analogue inputs of the Odroid device")
diff --git a/src/modules/odroid/processinterface.cpp b/src/modules/odroid/processinterface.cpp
index 007d960..7bd260c 100644
--- a/src/modules/odroid/processinterface.cpp
+++ b/src/modules/odroid/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/odroid/processinterface.h b/src/modules/odroid/processinterface.h
index 453cabc..9bc2c7a 100644
--- a/src/modules/odroid/processinterface.h
+++ b/src/modules/odroid/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/CMakeLists.txt b/src/modules/opc/CMakeLists.txt
index c0ba361..a9df038 100644
--- a/src/modules/opc/CMakeLists.txt
+++ b/src/modules/opc/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012, 2015 AIT, ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2012, 2015 AIT, ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
# OPC Com Layer
diff --git a/src/modules/opc/Cmd_AddConnection.cpp b/src/modules/opc/Cmd_AddConnection.cpp
index dc3c77c..65d0953 100644
--- a/src/modules/opc/Cmd_AddConnection.cpp
+++ b/src/modules/opc/Cmd_AddConnection.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Cmd_AddConnection.h b/src/modules/opc/Cmd_AddConnection.h
index b0cce42..028ea75 100644
--- a/src/modules/opc/Cmd_AddConnection.h
+++ b/src/modules/opc/Cmd_AddConnection.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Cmd_AddOPCProcessVar.cpp b/src/modules/opc/Cmd_AddOPCProcessVar.cpp
index 44f7fc6..9951f8f 100644
--- a/src/modules/opc/Cmd_AddOPCProcessVar.cpp
+++ b/src/modules/opc/Cmd_AddOPCProcessVar.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Cmd_AddOPCProcessVar.h b/src/modules/opc/Cmd_AddOPCProcessVar.h
index df6b3b5..fda6e4b 100644
--- a/src/modules/opc/Cmd_AddOPCProcessVar.h
+++ b/src/modules/opc/Cmd_AddOPCProcessVar.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Cmd_SetProcessVarValue.cpp b/src/modules/opc/Cmd_SetProcessVarValue.cpp
index ba61edd..84111f6 100644
--- a/src/modules/opc/Cmd_SetProcessVarValue.cpp
+++ b/src/modules/opc/Cmd_SetProcessVarValue.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Cmd_SetProcessVarValue.h b/src/modules/opc/Cmd_SetProcessVarValue.h
index 8cac5ea..3d89e2c 100644
--- a/src/modules/opc/Cmd_SetProcessVarValue.h
+++ b/src/modules/opc/Cmd_SetProcessVarValue.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/ICmd.h b/src/modules/opc/ICmd.h
index 78f2b55..33881a4 100644
--- a/src/modules/opc/ICmd.h
+++ b/src/modules/opc/ICmd.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/Variant.h b/src/modules/opc/Variant.h
index 542e287..382df9c 100644
--- a/src/modules/opc/Variant.h
+++ b/src/modules/opc/Variant.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Werner Tremmel - initial API and implementation and/or initial documentation
@@ -134,7 +135,7 @@
case VT_I1:
return cVal != 0 ? true : false;
case VT_UI8:
- return ullVal != 0 ? true : false;
+ return ullVal != 0 ? true : false;
case VT_UI4:
return ulVal != 0 ? true : false;
case VT_UI2:
@@ -142,7 +143,7 @@
case VT_UI1:
return bVal != 0 ? true : false;
case VT_R8:
- return dblVal != 0 ? true : false;
+ return dblVal != 0 ? true : false;
case VT_R4:
return fltVal != 0 ? true : false;
case VT_INT:
@@ -302,8 +303,9 @@
}
bool operator==(const Variant &other) const{
- if(vt != other.vt)
+ if(vt != other.vt) {
return false;
+ }
ULONGLONG mask = ~0ul;
switch (vt){
case VT_I4:
diff --git a/src/modules/opc/opccomlayer.cpp b/src/modules/opc/opccomlayer.cpp
index d311742..4bf43d9 100644
--- a/src/modules/opc/opccomlayer.cpp
+++ b/src/modules/opc/opccomlayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Patrick Smejkal, Alois Zoitl, Martin Melik-Merkumians - initial API and implementation and/or initial documentation
@@ -41,8 +42,9 @@
TOpcProcessVarList::Iterator itEnd = m_lFBInputVars.end();
for(TOpcProcessVarList::Iterator it = m_lFBInputVars.begin(); it != itEnd; ++it){
- if (it->getIsActive())
- m_pOpcConnection->send_sendItemData((*it));
+ if(it->getIsActive()) {
+ m_pOpcConnection->send_sendItemData((*it));
+ }
}
break;
}
@@ -116,9 +118,9 @@
// Successfully connected --> adding OPC items
if(addOpcItems() < 0){
//TODO
- }
- else
+ } else {
m_eConnectionState = e_Connected;
+ }
break;
case COpcConnection::e_ConnectionFailed:
{
@@ -181,7 +183,7 @@
if(m_bLayerParamsOK){
eRetVal = e_InitOk;
m_pOpcConnection = COpcConnectionHandler::getInstance().getOpcConnection(m_acHost, m_acServerName, m_acOpcGroupName, m_nUpdateRate, m_nDeadBand, this);
-
+
m_pOpcConnection->send_connect();
COpcConnection::EOpcConnectionEvents connState = m_pOpcConnection->getConnectionState();
@@ -189,8 +191,9 @@
m_eConnectionState = e_Connected;
addOpcItems();
}
- else if (connState == COpcConnection::e_ConnectionFailed)
+ else if(connState == COpcConnection::e_ConnectionFailed) {
eRetVal = e_InitTerminated;
+ }
}
break;
case e_Publisher:
@@ -291,16 +294,18 @@
// Get Host
chrStorage = strchr(pa_acLayerParams, ':');
- if(chrStorage == 0)
+ if(chrStorage == 0) {
return;
+ }
*chrStorage = '\0';
++chrStorage;
chrHost = (char*) malloc(strlen(pa_acLayerParams) + 1);
strcpy(chrHost, pa_acLayerParams);
- if(strcmp(chrHost, "127.0.0.1") == 0 || strcmp(chrHost, "localhost") == 0)
+ if(strcmp(chrHost, "127.0.0.1") == 0 || strcmp(chrHost, "localhost") == 0) {
m_acHost = "";
- else
- m_acHost = chrHost;
+ } else {
+ m_acHost = chrHost;
+ }
// Get server name
temp = chrStorage;
@@ -375,8 +380,9 @@
pch = strtok(NULL, ",");
}
- if(nrItems > 0)
- m_bLayerParamsOK = true;
+ if(nrItems > 0) {
+ m_bLayerParamsOK = true;
+ }
}
@@ -392,7 +398,7 @@
// CIEC_ANY *dataIn = &apoSDs[sdIndex];
Variant newVariant;
//unsigned int valueSize = 0;
-
+
//valueSize = getInputValueSize(dataIn, &newVariant);;
it_var->setNewValue(newVariant);
diff --git a/src/modules/opc/opccomlayer.h b/src/modules/opc/opccomlayer.h
index a0227ad..fe66889 100644
--- a/src/modules/opc/opccomlayer.h
+++ b/src/modules/opc/opccomlayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2015 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/opcconnection.cpp b/src/modules/opc/opcconnection.cpp
index 6b797df..32d636a 100644
--- a/src/modules/opc/opcconnection.cpp
+++ b/src/modules/opc/opcconnection.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -139,18 +140,19 @@
}
int COpcConnection::send_sendItemData(COpcProcessVar* pa_pItem){
- if (pa_pItem->getIsActive())
+ if(pa_pItem->getIsActive()) {
m_eventHandler->sendCommand(new CCmd_SetProcessVarValue(pa_pItem));
-
+ }
return 0;
}
void COpcConnection::response_connect(bool pa_bConnectionState){
m_bIsConnected = pa_bConnectionState;
- if(pa_bConnectionState)
+ if(pa_bConnectionState) {
m_eConnectionEvent = e_Connected;
- else
+ } else {
m_eConnectionEvent = e_ConnectionFailed;
+ }
//m_eConnectionEvent = e_Disconnected;
if(!m_bBlockingConnect){
@@ -185,19 +187,22 @@
if(strcmp(it_newItem->m_acItemName, it_item->m_acItemName) == 0){
it_item->m_oItemData = it_newItem->m_oItemData;
- if(it_newItem == pa_lItemDataList.begin())
+ if(it_newItem == pa_lItemDataList.begin()) {
pa_lItemDataList.popFront();
- else
+ } else {
pa_lItemDataList.eraseAfter(itErase);
+ }
break;
}
- if(it_newItem != pa_lItemDataList.begin())
+ if(it_newItem != pa_lItemDataList.begin()) {
++itErase;
+ }
}
- if(pa_lItemDataList.isEmpty())
- break;
+ if(pa_lItemDataList.isEmpty()) {
+ break;
+ }
}
// Change state
@@ -218,11 +223,11 @@
for(TOpcGroupMapList::Iterator it_group = m_lOpcGroupMapList.begin(); it_group != itEnd_group; ++it_group){
if(strcmp(it_group->m_acGroupName, pa_pOpcItem->getItemGroupName()) == 0){
// Change state
- if (pa_pOpcItem->getIsActive())
+ if (pa_pOpcItem->getIsActive()) {
m_eConnectionEvent = e_ItemAddedOk;
- else
+ } else {
m_eConnectionEvent = e_ItemAddedFailed;
-
+ }
// Notify Com Layer
m_eventHandler->executeComCallback(it_group->m_nCallbackDesc);
break;
diff --git a/src/modules/opc/opcconnection.h b/src/modules/opc/opcconnection.h
index f9d36ff..af810ca 100644
--- a/src/modules/opc/opcconnection.h
+++ b/src/modules/opc/opcconnection.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/opcconnectionhandler.cpp b/src/modules/opc/opcconnectionhandler.cpp
index b8aac65..910b930 100644
--- a/src/modules/opc/opcconnectionhandler.cpp
+++ b/src/modules/opc/opcconnectionhandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -46,16 +47,18 @@
if(existingCon != NULL){
existingCon->removeGroup(pa_acGroupName);
- if(existingCon->getGroupCount() == 0)
+ if(existingCon->getGroupCount() == 0) {
deleteOpcConnection(pa_acHost, pa_acServerName);
+ }
}
}
COpcConnection* COpcConnectionHandler::findOpcConnection(const char* pa_acHost, const char* pa_acServerName){
TOpcConnectionList::Iterator itEnd = m_lOpcConnectionList.end();
for(TOpcConnectionList::Iterator it = m_lOpcConnectionList.begin(); it != itEnd; ++it){
- if(strcmp(it->getHost(), pa_acHost) == 0 && strcmp(it->getServerName(), pa_acServerName) == 0)
+ if(strcmp(it->getHost(), pa_acHost) == 0 && strcmp(it->getServerName(), pa_acServerName) == 0) {
return (*it);
+ }
}
return NULL;
diff --git a/src/modules/opc/opcconnectionhandler.h b/src/modules/opc/opcconnectionhandler.h
index 060d5e2..4f9825f 100644
--- a/src/modules/opc/opcconnectionhandler.h
+++ b/src/modules/opc/opcconnectionhandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 -2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/opcconnectionimpl.cpp b/src/modules/opc/opcconnectionimpl.cpp
index 27be9ab..2520201 100644
--- a/src/modules/opc/opcconnectionimpl.cpp
+++ b/src/modules/opc/opcconnectionimpl.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -79,8 +80,9 @@
int position = 0;
const char * subStrRead = strstr(c_groupName, "_read");
- if(subStrRead != NULL)
+ if(subStrRead != NULL) {
position = subStrRead - c_groupName;
+ }
else{
//TODO Should not happen error
}
@@ -113,9 +115,9 @@
// TODO
}
free(groupName);
- }
- else
+ } else {
retGroup = it->m_pOpcGroupRead;
+ }
}
else if(pa_eFunction == COpcProcessVar::e_FBInput){
if(!(it->m_bWriteGroupAdded)){
@@ -129,9 +131,9 @@
// TODO
}
free(groupName);
- }
- else
+ } else {
retGroup = it->m_pOpcGroupWrite;
+ }
}
break;
diff --git a/src/modules/opc/opcconnectionimpl.h b/src/modules/opc/opcconnectionimpl.h
index 9a11cdb..7a6d7dc 100644
--- a/src/modules/opc/opcconnectionimpl.h
+++ b/src/modules/opc/opcconnectionimpl.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2015 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/opceventhandler.cpp b/src/modules/opc/opceventhandler.cpp
index 24c322e..f2ec4fc 100644
--- a/src/modules/opc/opceventhandler.cpp
+++ b/src/modules/opc/opceventhandler.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2014 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -40,8 +41,9 @@
if(result == S_OK){
while(isAlive()){
ICmd* nextCommand = getNextCommand();
- if(nextCommand != NULL)
+ if(nextCommand != NULL) {
nextCommand->runCommand();
+ }
MSG msg;
while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)){
@@ -114,9 +116,9 @@
if(itBegin != m_lCommandQueue.end()){
command = (*itBegin);
m_lCommandQueue.popFront();
- }
- else
+ } else {
command = NULL;
+ }
m_oSync.unlock();
return command;
diff --git a/src/modules/opc/opceventhandler.h b/src/modules/opc/opceventhandler.h
index 113ced1..5689d3a 100644
--- a/src/modules/opc/opceventhandler.h
+++ b/src/modules/opc/opceventhandler.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2015 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc/opcprocessvar.cpp b/src/modules/opc/opcprocessvar.cpp
index c7afe6a..ac8af41 100644
--- a/src/modules/opc/opcprocessvar.cpp
+++ b/src/modules/opc/opcprocessvar.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
@@ -19,8 +20,9 @@
void COpcProcessVar::sendItemData(){
try{
- if (getIsActive())
+ if(getIsActive()) {
m_pOpcItem->writeSync(updateValue());
+ }
} catch (OPCException &e){
setIsActive(false);
}
@@ -39,9 +41,9 @@
TVariantList::Iterator itBegin = m_lNewValueQueue.begin();
if(itBegin != m_lNewValueQueue.end()){
retVal = (*itBegin);
- }
- else
+ } else {
retVal = m_oCurrentValue;
+ }
m_oSync.unlock();
@@ -57,9 +59,9 @@
if(itBegin != m_lNewValueQueue.end()){
m_oCurrentValue = retVal = (*itBegin);
m_lNewValueQueue.popFront();
- }
- else
+ } else {
retVal = m_oCurrentValue;
+ }
m_oSync.unlock();
diff --git a/src/modules/opc/opcprocessvar.h b/src/modules/opc/opcprocessvar.h
index c68f1a1..0c5ae51 100644
--- a/src/modules/opc/opcprocessvar.h
+++ b/src/modules/opc/opcprocessvar.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/opc_ua/CMakeLists.txt b/src/modules/opc_ua/CMakeLists.txt
index 2009bdb..0204503 100644
--- a/src/modules/opc_ua/CMakeLists.txt
+++ b/src/modules/opc_ua/CMakeLists.txt
@@ -1,74 +1,93 @@
-#*******************************************************************************
-# * Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>,
-# * fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Florian Froschermeier
-# * - initial integration of OPC Unified Architecture into FORTE
-# * Stefan Profanter
-# * - refactoring and adaption to new concept
-# ******************************************************************************/
-
-#############################################################################
-# OPC Unified Architecture (UA) integration.
-# For integration the open-source OPC-UA communication stack/library
-# from (open62541 - http://open62541.org/) was used.
-#############################################################################
-
-# option to enable OPC UA with cmake
-forte_add_network_layer(OPC_UA OFF "opc_ua" COPC_UA_Layer opcua_layer "Enable OPC UA communication layer")
-
-forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-if (FORTE_COM_OPC_UA)
-
- SET(FORTE_COM_OPC_UA_PORT "4840" CACHE NUMBER "Port where the OPC_UA server will listen")
- SET(FORTE_COM_OPC_UA_MULTICAST OFF CACHE BOOLEAN "Enable multicast support for OPC UA and registering with LDS")
- SET(FORTE_COM_OPC_UA_INCLUDE_DIR "" CACHE PATH "ABSOLUTE path to open62541.h file in the OPC UA project")
- SET(FORTE_COM_OPC_UA_LIB_DIR "" CACHE PATH "ABSOLUTE path to OPC UA folder with object library FORTE_COM_OPC_UA_LIB")
- SET(FORTE_COM_OPC_UA_CUSTOM_HOSTNAME CACHE STRING "Custom hostname which is used for the OPC UA app name and app uri")
-
- # OPEN62541 library to be linked to forte
- IF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
- SET(FORTE_COM_OPC_UA_LIB "open62541.lib" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
- forte_add_link_library("Iphlpapi") #pubsub uses functions in this library
- forte_add_definition("-DUA_ARCHITECTURE_WIN32")
- ELSE ()
- SET(FORTE_COM_OPC_UA_LIB "libopen62541.a" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
- IF ("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
- forte_add_definition("-DUA_ARCHITECTURE_VXWORKS")
- ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "Nios2")
- forte_add_definition("-DUA_ARCHITECTURE_ECOS")
- ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP")
- forte_add_definition("-DUA_ARCHITECTURE_FREERTOSLWIP")
- ELSE()
- forte_add_definition("-DUA_ARCHITECTURE_POSIX")
- ENDIF("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
- ENDIF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
- forte_add_include_system_directories(${FORTE_COM_OPC_UA_INCLUDE_DIR})
- forte_add_link_directories(${FORTE_COM_OPC_UA_LIB_DIR})
- forte_add_link_library_beginning(${FORTE_COM_OPC_UA_LIB})
-
- forte_add_handler(COPC_UA_Handler opcua_handler)
- forte_add_handler(COPC_UA_Client_Handler opcua_client_handler)
- forte_add_sourcefile_hcpp(opcua_layer opcua_handler opcua_helper opcua_client_handler)
- if (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
- message(SEND_ERROR "FORTE_COM_OPC_UA_INCLUDE_DIR not set or does not exist")
- endif (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
-
- file(TO_CMAKE_PATH "${FORTE_COM_OPC_UA_LIB_DIR}/${FORTE_COM_OPC_UA_LIB}" FORTE_COM_OPC_UA_LIB_PATH)
- if (NOT EXISTS ${FORTE_COM_OPC_UA_LIB} AND NOT EXISTS ${FORTE_COM_OPC_UA_LIB_PATH})
- message(SEND_ERROR "OPC UA library not found '${FORTE_COM_OPC_UA_LIB}'. Check the value of FORTE_COM_OPC_UA_LIB_DIR and optionally define an absolute path for FORTE_COM_OPC_UA_LIB.")
- endif()
-
- forte_add_custom_configuration("#define FORTE_COM_OPC_UA_PORT ${FORTE_COM_OPC_UA_PORT}")
- forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_MULTICAST")
- forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_CUSTOM_HOSTNAME \"${FORTE_COM_OPC_UA_CUSTOM_HOSTNAME}\"")
-
-endif (FORTE_COM_OPC_UA)
-
-
+#*******************************************************************************************
+
+# Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Florian Froschermeier
+# - initial integration of OPC Unified Architecture into FORTE
+# Stefan Profanter
+# - refactoring and adaption to new concept
+# ******************************************************************************************
+
+#############################################################################
+# OPC Unified Architecture (UA) integration.
+# For integration the open-source OPC-UA communication stack/library
+# from (open62541 - http://open62541.org/) was used.
+#############################################################################
+
+# option to enable OPC UA with cmake
+forte_add_network_layer(OPC_UA OFF "opc_ua" COPC_UA_Layer opcua_layer "Enable OPC UA communication layer")
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+if (FORTE_COM_OPC_UA)
+
+ forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_nodesets.cpp) # created file
+
+ forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/modules/opc_ua/opcua_types.cpp) # created file
+
+ SET(FORTE_COM_OPC_UA_PORT "4840" CACHE NUMBER "Port where the OPC_UA server will listen")
+ SET(FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL "100.0" CACHE NUMBER "OPC UA Server publishing interval in ms")
+ SET(FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL "100.0" CACHE NUMBER "OPC UA Client requested publishing interval via OPC UA data subscription in ms")
+ SET(FORTE_COM_OPC_UA_MULTICAST OFF CACHE BOOLEAN "Enable multicast support for OPC UA and registering with LDS")
+ SET(FORTE_COM_OPC_UA_INCLUDE_DIR "" CACHE PATH "ABSOLUTE path to open62541.h file in the OPC UA project")
+ SET(FORTE_COM_OPC_UA_LIB_DIR "" CACHE PATH "ABSOLUTE path to OPC UA folder with object library FORTE_COM_OPC_UA_LIB")
+ SET(FORTE_COM_OPC_UA_CUSTOM_HOSTNAME CACHE STRING "Custom hostname which is used for the OPC UA app name and app uri")
+ SET(FORTE_COM_OPC_UA_MASTER_BRANCH OFF CACHE BOOLEAN "Use the master branch")
+
+ # OPEN62541 library to be linked to forte
+ IF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
+ SET(FORTE_COM_OPC_UA_LIB "open62541.lib" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
+ forte_add_link_library("Iphlpapi") #pubsub uses functions in this library
+ forte_add_definition("-DUA_ARCHITECTURE_WIN32")
+ ELSE ()
+ SET(FORTE_COM_OPC_UA_LIB "libopen62541.a" CACHE STRING "OPC_UA Library file in FORTE_COM_OPC_UA_DIR to be linked to forte (normally with name libopen62541 and a extension according to the type and OS)")
+ IF ("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
+ forte_add_definition("-DUA_ARCHITECTURE_VXWORKS")
+ ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "Nios2")
+ forte_add_definition("-DUA_ARCHITECTURE_ECOS")
+ ELSEIF ("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP")
+ forte_add_definition("-DUA_ARCHITECTURE_FREERTOSLWIP")
+ ELSE()
+ forte_add_definition("-DUA_ARCHITECTURE_POSIX")
+ ENDIF("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks")
+ ENDIF ("${FORTE_ARCHITECTURE}" STREQUAL "Win32")
+ forte_add_include_system_directories(${FORTE_COM_OPC_UA_INCLUDE_DIR})
+ forte_add_link_directories(${FORTE_COM_OPC_UA_LIB_DIR})
+ forte_add_link_library_beginning(${FORTE_COM_OPC_UA_LIB})
+
+ forte_add_handler(COPC_UA_Local_Handler opcua_local_handler)
+ forte_add_handler(COPC_UA_Remote_Handler opcua_remote_handler)
+ forte_add_sourcefile_hcpp(opcua_layer opcua_local_handler opcua_helper opcua_remote_handler opcua_handler_abstract opcua_client_information opcua_action_info)
+ if (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
+ message(SEND_ERROR "FORTE_COM_OPC_UA_INCLUDE_DIR not set or does not exist")
+ endif (NOT EXISTS ${FORTE_COM_OPC_UA_INCLUDE_DIR})
+
+ file(TO_CMAKE_PATH "${FORTE_COM_OPC_UA_LIB_DIR}/${FORTE_COM_OPC_UA_LIB}" FORTE_COM_OPC_UA_LIB_PATH)
+ if (NOT EXISTS ${FORTE_COM_OPC_UA_LIB} AND NOT EXISTS ${FORTE_COM_OPC_UA_LIB_PATH})
+ message(SEND_ERROR "OPC UA library not found '${FORTE_COM_OPC_UA_LIB}'. Check the value of FORTE_COM_OPC_UA_LIB_DIR and optionally define an absolute path for FORTE_COM_OPC_UA_LIB.")
+ endif()
+
+ forte_add_custom_configuration("#define FORTE_COM_OPC_UA_PORT ${FORTE_COM_OPC_UA_PORT}")
+ forte_add_custom_configuration("extern TForteUInt16 gOpcuaServerPort\;")
+ forte_add_custom_configuration("#define FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL ${FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL}")
+ forte_add_custom_configuration("#define FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL ${FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL}")
+
+ forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA")
+ forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_MULTICAST")
+ forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_MASTER_BRANCH")
+ forte_add_custom_configuration("#cmakedefine FORTE_COM_OPC_UA_CUSTOM_HOSTNAME \"${FORTE_COM_OPC_UA_CUSTOM_HOSTNAME}\"")
+
+ forte_opcua_add_type(forte_localizedtext LocalizedText UA_TYPES_LOCALIZEDTEXT)
+
+ add_subdirectory(FBs)
+ add_subdirectory(types)
+
+endif (FORTE_COM_OPC_UA)
+
+
diff --git a/src/modules/opc_ua/FBs/CMakeLists.txt b/src/modules/opc_ua/FBs/CMakeLists.txt
new file mode 100644
index 0000000..46bbd21
--- /dev/null
+++ b/src/modules/opc_ua/FBs/CMakeLists.txt
@@ -0,0 +1,18 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# ******************************************************************************/
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(LocalizedText2LocalizedText)
+
+
diff --git a/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.cpp b/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.cpp
new file mode 100644
index 0000000..ca9b098
--- /dev/null
+++ b/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.cpp
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "LocalizedText2LocalizedText.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "LocalizedText2LocalizedText_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_LocalizedText2LocalizedText, g_nStringIdLocalizedText2LocalizedText)
+
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anDataInputNames[] = {g_nStringIdIN};
+
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anDataInputTypeIds[] = {g_nStringIdLocalizedText};
+
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anDataOutputNames[] = {g_nStringIdOUT};
+
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anDataOutputTypeIds[] = {g_nStringIdLocalizedText};
+
+const TForteInt16 FORTE_LocalizedText2LocalizedText::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_LocalizedText2LocalizedText::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TDataIOID FORTE_LocalizedText2LocalizedText::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_LocalizedText2LocalizedText::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_LocalizedText2LocalizedText::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_LocalizedText2LocalizedText::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+
+void FORTE_LocalizedText2LocalizedText::executeEvent(int pa_nEIID){
+ if(scm_nEventREQID == pa_nEIID) {
+ OUT() = IN();
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
+
+
diff --git a/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.h b/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.h
new file mode 100644
index 0000000..b99ab23
--- /dev/null
+++ b/src/modules/opc_ua/FBs/LocalizedText2LocalizedText.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _LOCALIZEDTEXT2LOCALIZEDTEXT_H_
+#define _LOCALIZEDTEXT2LOCALIZEDTEXT_H_
+
+#include <funcbloc.h>
+#include <forte_localizedtext.h>
+
+class FORTE_LocalizedText2LocalizedText: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_LocalizedText2LocalizedText)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_LocalizedText &IN() {
+ return *static_cast<CIEC_LocalizedText*>(getDI(0));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_LocalizedText &OUT() {
+ return *static_cast<CIEC_LocalizedText*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 1, 1, 0);
+
+ void executeEvent(int pa_nEIID);
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_LocalizedText2LocalizedText){
+ };
+
+ virtual ~FORTE_LocalizedText2LocalizedText(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/opc_ua/opcua_action_info.cpp b/src/modules/opc_ua/opcua_action_info.cpp
new file mode 100644
index 0000000..3158a2b
--- /dev/null
+++ b/src/modules/opc_ua/opcua_action_info.cpp
@@ -0,0 +1,388 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "opcua_action_info.h"
+#include "../../core/utils/parameterParser.h"
+#include "../../core/cominfra/basecommfb.h"
+
+const char * const CActionInfo::mActionNames[] = { "READ", "WRITE", "CREATE_METHOD", "CALL_METHOD", "SUBSCRIBE", "CREATE_OBJECT", "DELETE_OBJECT" };
+
+CActionInfo::CActionInfo(COPC_UA_Layer &paLayer, UA_ActionType paAction, CIEC_STRING &paEndpoint) :
+ mAction(paAction), mLayer(paLayer), mEndpoint(paEndpoint) {
+}
+
+CActionInfo::~CActionInfo() {
+ for(CSinglyLinkedList<CNodePairInfo*>::Iterator it = mNodePair.begin(); it != mNodePair.end(); ++it) {
+ if((*it)->mNodeId) {
+ UA_NodeId_delete((*it)->mNodeId);
+ }
+ delete (*it);
+ }
+}
+
+bool CActionInfo::isRemote() {
+ return ("" != mEndpoint);
+}
+
+CActionInfo* CActionInfo::getActionInfoFromParams(const char* paParams, COPC_UA_Layer &paLayer) {
+ CActionInfo *retVal = 0;
+ CParameterParser mainParser(paParams, ';');
+ size_t amountOfParameters = mainParser.parseParameters();
+
+ if(scmMinimumAmounOfParameters <= amountOfParameters) {
+ CActionInfo::UA_ActionType action = CActionParser::getActionEnum(mainParser[IDPositions::eActionType]);
+ if(CActionInfo::eActionUnknown != action) {
+
+ CIEC_STRING endpoint;
+ size_t startOfNodePairs = IDPositions::eNodePairs;
+
+ if(!CActionParser::getEndpoint(mainParser[IDPositions::eEndpoint], endpoint)) {
+ startOfNodePairs--;
+ }
+
+ if(CActionInfo::eCreateMethod == action) {
+ retVal = new CLocalMethodInfo(paLayer, endpoint);
+ } else {
+ retVal = new CActionInfo(paLayer, action, endpoint);
+ }
+
+ bool somethingFailed = false;
+ for(size_t i = startOfNodePairs; i < amountOfParameters; i++) {
+ if(!CActionParser::handlePair(mainParser[i], retVal->getNodePairInfo())) {
+ somethingFailed = true;
+ break;
+ }
+ }
+
+ if(!somethingFailed) {
+ somethingFailed = !retVal->checkAction();
+ }
+
+ if(somethingFailed) {
+ delete retVal;
+ retVal = 0;
+ }
+ }
+
+ } else {
+ DEVLOG_ERROR("[OPC UA ACTION]: Parameters %s should have at least %d parts, separated by a semicolon\n", paParams, scmMinimumAmounOfParameters);
+ }
+
+ return retVal;
+}
+
+const CIEC_ANY *CActionInfo::getDataToSend() {
+ return mLayer.getCommFB()->getSDs();
+}
+
+CIEC_ANY *CActionInfo::getDataToReceive() {
+ return mLayer.getCommFB()->getRDs();
+}
+
+size_t CActionInfo::getSendSize() {
+ return static_cast<size_t>(mLayer.getCommFB()->getNumSD());
+}
+
+size_t CActionInfo::getReceiveSize() {
+ return static_cast<size_t>(mLayer.getCommFB()->getNumRD());
+}
+
+bool CActionInfo::checkAction() {
+ bool retVal = false;
+ if(checkNodePairInfo()) {
+
+ forte::com_infra::EComServiceType fbType = mLayer.getCommFB()->getComServiceType();
+ unsigned int noOfRDs = mLayer.getCommFB()->getNumRD();
+ unsigned int noOfSDs = mLayer.getCommFB()->getNumSD();
+
+ switch(mAction){
+ case eRead:
+ retVal = checkReadAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eWrite:
+ retVal = checkWriteAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eCreateMethod:
+ retVal = checkCreateMethodAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eCallMethod:
+ retVal = checkCallMethodAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eSubscribe:
+ retVal = checkSubscribeAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eCreateObject:
+ retVal = checkCreateObjectAction(fbType, noOfRDs, noOfSDs);
+ break;
+ case eDeleteObject:
+ retVal = checkDeleteObjectAction(fbType, noOfRDs, noOfSDs);
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA ACTION]: Unknown action %d\n", mAction);
+ }
+ }
+
+ return retVal;
+}
+
+bool CActionInfo::checkNodePairInfo() {
+ bool retVal = true;
+ for(CSinglyLinkedList<CNodePairInfo*>::Iterator it = mNodePair.begin(); it != mNodePair.end(); ++it) {
+ if("" == (*it)->mBrowsePath && 0 == (*it)->mNodeId) { //browsePath AND/OR NodeId must be given. If both are empty there's a problem
+ DEVLOG_ERROR("[OPC UA ACTION]: BrowsePath and NodeId are empty in FB %s\n", mLayer.getCommFB()->getInstanceName());
+ retVal = false;
+ break;
+ }
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkReadAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs) {
+ bool retVal = false;
+ if("" == mEndpoint) {
+ if(forte::com_infra::EComServiceType::e_Subscriber == paFbType && paNoOfRDs == getNoOfNodePairs()) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: Local %s action is only allowed using a Subscriber FB and the amount of BrowseName,NodeId pairs should match the number of RDs\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eRead]);
+ }
+ } else {
+ if(forte::com_infra::EComServiceType::e_Client == paFbType && paNoOfRDs == getNoOfNodePairs() && 0 == paNoOfSDs) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: Remote %s action is only allowed using a Client FB, the amount of BrowseName,NodeId pairs should match the number of RDs, and must have no SDs\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eRead]);
+ }
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkWriteAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs) {
+ bool retVal = false;
+ if("" == mEndpoint) {
+ if(forte::com_infra::EComServiceType::e_Publisher == paFbType && paNoOfSDs == getNoOfNodePairs()) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: Local action %s is only allowed using a Publisher FB and the amount of BrowseName,NodeId pairs should match the number of SDs\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eWrite]);
+ }
+ } else {
+ if(forte::com_infra::EComServiceType::e_Client == paFbType && paNoOfSDs == getNoOfNodePairs() && 0 == paNoOfRDs) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: Remote action %s is only allowed using a Client FB, the amount of BrowseName,NodeId pairs should match the number of SDs and must have no RDs\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eWrite]);
+ }
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkCreateMethodAction(forte::com_infra::EComServiceType paFbType, unsigned int, unsigned int) {
+ bool retVal = false;
+ if(forte::com_infra::EComServiceType::e_Server == paFbType && 1 == getNoOfNodePairs()) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR("[OPC UA ACTION]: In FB %s: %s action is only allowed using a Server FB, the amount of BrowseName,NodeId pairs should be 1\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eCreateMethod]);
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkCallMethodAction(forte::com_infra::EComServiceType paFbType, unsigned int, unsigned int) {
+ bool retVal = false;
+ if(forte::com_infra::EComServiceType::e_Client == paFbType && 1 == getNoOfNodePairs() && "" != (*(mNodePair.begin()))->mBrowsePath) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: %s action is only allowed using a Client FB, the amount of BrowseName,NodeId pairs should be 1, and the browsepath shouldn't be empty\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eCallMethod]);
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkSubscribeAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int) {
+ bool retVal = false;
+ if(forte::com_infra::EComServiceType::e_Subscriber == paFbType && paNoOfRDs == getNoOfNodePairs()) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: %s action is only allowed using a Subscribe FB, the amount of BrowseName,NodeId pairs should match the number of RDs\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eSubscribe]);
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkCreateObjectAction(forte::com_infra::EComServiceType paFbType, unsigned int, unsigned int paNoOfSDs) {
+ bool retVal = false;
+ if(forte::com_infra::EComServiceType::e_Publisher == paFbType && 2 == getNoOfNodePairs() && 0 == paNoOfSDs) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: %s action is only allowed using a Publish FB, the amount of BrowseName,NodeId pairs should be 2, and no SD must be provided\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eCreateObject]);
+ }
+ return retVal;
+}
+
+bool CActionInfo::checkDeleteObjectAction(forte::com_infra::EComServiceType paFbType, unsigned int, unsigned int paNoOfSDs) {
+ bool retVal = false;
+ if(forte::com_infra::EComServiceType::e_Publisher == paFbType && 1 == getNoOfNodePairs() && 0 == paNoOfSDs) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: In FB %s: %s action is only allowed using a Publish FB, the amount of BrowseName,NodeId pairs should be 1, and no SD must be provided\n",
+ mLayer.getCommFB()->getInstanceName(), CActionInfo::mActionNames[eDeleteObject]);
+ }
+ return retVal;
+}
+
+// ************** ACTION PARSER ******************* //
+
+CActionInfo::UA_ActionType CActionInfo::CActionParser::getActionEnum(const char *paActionString) {
+ CActionInfo::UA_ActionType action = CActionInfo::eActionUnknown;
+ for(size_t i = 0; i < eActionUnknown; i++) {
+ if(0 == strcmp(paActionString, CActionInfo::mActionNames[i])) {
+ action = static_cast<UA_ActionType>(i);
+ break;
+ }
+ }
+
+ if(eActionUnknown == action) {
+ DEVLOG_ERROR("[OPC UA ACTION]: The action %s is unrecognized\n", paActionString);
+ }
+ return action;
+}
+
+bool CActionInfo::CActionParser::getEndpoint(const char *paEndpoint, CIEC_STRING &paResult) {
+ if(0 != strchr(paEndpoint, '#')) {
+ paResult = paEndpoint;
+ paResult.assign(paResult.getValue(), static_cast<TForteUInt16>(paResult.length() - 1)); //remove #
+ return true;
+ }
+ return false;
+}
+
+bool CActionInfo::CActionParser::handlePair(const char *paPair, CSinglyLinkedList<CNodePairInfo*> &paResult) {
+ bool retVal = false;
+ CParameterParser pairParser(paPair, ',');
+ CIEC_STRING browsePathResult;
+ UA_NodeId* nodeIdResult = 0;
+ size_t noOfParameters = pairParser.parseParameters();
+ if(NodePairPositions::eMaxNumberOfPositions == noOfParameters) {
+ browsePathResult = pairParser[NodePairPositions::eBrowseName];
+ nodeIdResult = parseNodeId(pairParser[NodePairPositions::eNodeId]);
+ retVal = nodeIdResult;
+ } else if(NodePairPositions::eMaxNumberOfPositions - 1 == noOfParameters) { //no NodeId was provided
+ browsePathResult = pairParser[NodePairPositions::eBrowseName];
+ retVal = true;
+ } else {
+ DEVLOG_ERROR("[OPC UA ACTION]: The pair %s doesn't have the proper format BROWSENAME,NODEID\n", paPair);
+ }
+
+ if(retVal) {
+ paResult.pushBack(new CNodePairInfo(nodeIdResult, browsePathResult.getValue()));
+ }
+
+ return retVal;
+}
+
+UA_NodeId* CActionInfo::CActionParser::parseNodeId(const char *paNodeIdString) {
+ bool somethingFailed = false;
+ UA_NodeId *resultNodeId = UA_NodeId_new();
+ UA_NodeId_init(resultNodeId); //will set to default namespace 0. When the nodeId is later used, the default namespace should come from the browsename
+ unsigned int identifierPosition = 0;
+
+ CParameterParser mainParser(paNodeIdString, ':'); //namespace and identifier should be divided by a colon. If first parameter is omitted, namespace 0 is assumed
+ size_t numberOfParameters = mainParser.parseParameters();
+
+ switch(numberOfParameters){
+ case NodeIdPositions::eMaxNumberOfNodeIdPositions: //Namespace is present
+ identifierPosition++;
+ if(!parseNamespace(mainParser[0], *resultNodeId)) {
+ somethingFailed = true;
+ break;
+ }
+ // fall through
+ case NodeIdPositions::eMaxNumberOfNodeIdPositions - 1: //NOSONAR
+ if(!parseIdentifier(mainParser[identifierPosition], *resultNodeId)) {
+ somethingFailed = true;
+ }
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA ACTION]: NodeId %s has wrong number of colon\n", paNodeIdString);
+ somethingFailed = true;
+ break;
+ }
+
+ if(somethingFailed) {
+ DEVLOG_ERROR(
+ "[OPC UA ACTION]: Parsing the NodeId %s failed. The format should follow the notation '<namespaceIndex>:<identifiertype>=<identifier>'. if the part before the : is omitted, namespace 0 is assumed\n",
+ paNodeIdString);
+ UA_NodeId_delete(resultNodeId);
+ resultNodeId = 0;
+ }
+
+ return resultNodeId;
+}
+
+bool CActionInfo::CActionParser::parseNamespace(const char *paNamespace, UA_NodeId &paResult) {
+ paResult.namespaceIndex = static_cast<UA_UInt16>(forte::core::util::strtoul(paNamespace, 0, 10)); //TODO: should we check for return value here?
+ return true;
+}
+
+bool CActionInfo::CActionParser::parseIdentifier(const char *paIdentifier, UA_NodeId &paResult) {
+ CParameterParser identifierParser(paIdentifier, '='); //<identifiertype>=<identifier>
+ if(NodeIdItenfierPositions::eMaxNumberOfNodeIdIdenfiertPositions == identifierParser.parseParameters()) {
+ if(0 == strcmp(identifierParser[NodeIdItenfierPositions::eIdenfierType], "i")) { //numeric
+ paResult.identifierType = UA_NODEIDTYPE_NUMERIC;
+ paResult.identifier.numeric = static_cast<UA_UInt32>(forte::core::util::strtoul(identifierParser[NodeIdItenfierPositions::eIdenfierValue], 0, 10)); //TODO: should we check for return value here?
+ } else if(0 == strcmp(identifierParser[NodeIdItenfierPositions::eIdenfierType], "s")) { //string
+ paResult.identifierType = UA_NODEIDTYPE_STRING;
+ paResult.identifier.string = UA_String_fromChars(identifierParser[NodeIdItenfierPositions::eIdenfierValue]);
+ } else if(0 == strcmp(identifierParser[NodeIdItenfierPositions::eIdenfierType], "g")) { //GUID
+ DEVLOG_ERROR("[OPC UA ACTION]:GUID type is not yet implemented\n");
+ return false;
+ } else if(0 == strcmp(identifierParser[NodeIdItenfierPositions::eIdenfierType], "b")) { //byteString
+ paResult.identifierType = UA_NODEIDTYPE_BYTESTRING;
+ paResult.identifier.byteString = UA_BYTESTRING_ALLOC(identifierParser[NodeIdItenfierPositions::eIdenfierValue]);
+ } else {
+ DEVLOG_ERROR("[OPC UA ACTION]: The identifier type %s wasn't recognized among the possible values [i, s, b]\n", identifierParser[0]);
+ return false;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA ACTION]: Parsing the identifier %s failed. The format should follow the notation '<identifiertype>=<identifier>'\n", paIdentifier);
+ return false;
+ }
+ return true;
+}
+
+// **** METHOD ACTION *****//
+
+CLocalMethodInfo::CLocalMethodInfo(COPC_UA_Layer &paLayer, CIEC_STRING &paEndpoint) :
+ CActionInfo(paLayer, eCreateMethod, paEndpoint) {
+}
+
+CLocalMethodInfo::~CLocalMethodInfo() {
+}
+
+CSyncObject& CLocalMethodInfo::getMutex() {
+ return mMutex;
+}
+
+forte::arch::CSemaphore& CLocalMethodInfo::getResultReady() {
+ return mResultIsReady;
+}
diff --git a/src/modules/opc_ua/opcua_action_info.h b/src/modules/opc_ua/opcua_action_info.h
new file mode 100644
index 0000000..9cb3096
--- /dev/null
+++ b/src/modules/opc_ua/opcua_action_info.h
@@ -0,0 +1,395 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef SRC_MODULES_OPC_UA_OPCUA_ACTION_INFO_H_
+#define SRC_MODULES_OPC_UA_OPCUA_ACTION_INFO_H_
+
+#include <forte_sem.h>
+#include "opcua_layer.h"
+
+/**
+ * Each Communication FB (PUBLISH, SUBSCRIBE, CLIENT, SERVER) is considered an action to be executed in the OPC UA library, either locally or remotely.
+ * This class encapsulates all information needed to perform the action. It has a factory to create a new action from the parameters set in the ID
+ * of the FB
+ */
+class CActionInfo {
+ public:
+
+ /**
+ * Allowed type of actions. If a new action is to be added, it should go before eActionUnknown
+ */
+ enum UA_ActionType {
+ eRead, //!< eRead Read a variable
+ eWrite, //!< eWrite Write to a variable
+ eCreateMethod, //!< eCreateMethod Create a method
+ eCallMethod, //!< eCallMethod Call a method
+ eSubscribe, //!< eSubscribe Subscribe to changes of a variable
+ eCreateObject, //!< eCreateObject Create an object
+ eDeleteObject, //!< eDeleteObject Delete an object
+ eActionUnknown, //!< eActionUnknown The provided action is unknown. This is used also to set the length of known actions
+ };
+
+ /**
+ * 2-Tuple to reference a specific node in an OPC UA server composed of the node ID and browsepath of the node
+ */
+ struct CNodePairInfo {
+ CNodePairInfo(UA_NodeId *paNodeId, const char *paBrowsePath) :
+ mNodeId(paNodeId), mBrowsePath(paBrowsePath) {
+ }
+ UA_NodeId *mNodeId;
+ CIEC_STRING mBrowsePath;
+ };
+
+ /**
+ * Constructor of the class.
+ * @param paLayer The layer that creates and executes the action
+ * @param paAction The action to be executed
+ * @param paEndpoint The endpoint of a remote OPC UA in case the action is to be executed remotely. An empty endpoint means that the action is to be executed locally
+ */
+ explicit CActionInfo(COPC_UA_Layer &paLayer, UA_ActionType paAction, CIEC_STRING &paEndpoint);
+
+ /**
+ * Destructor of the class
+ */
+ virtual ~CActionInfo();
+
+ /**
+ * Getter of the action type
+ * @return Action type
+ */
+ UA_ActionType getAction() {
+ return mAction;
+ }
+
+ /**
+ * Getter of the layer
+ * @return Layer
+ */
+ COPC_UA_Layer& getLayer() {
+ return mLayer;
+ }
+
+ /**
+ * Getter of the enpoint
+ * @return A constant reference of the endpoint
+ */
+ const CIEC_STRING& getEndpoint() {
+ return mEndpoint;
+ }
+
+ /**
+ * Getter of the list of node pair information
+ * @return List of node pair information
+ */
+ CSinglyLinkedList<CNodePairInfo*>& getNodePairInfo() {
+ return mNodePair;
+ }
+
+ /**
+ * Gets the amount of node pair in the action
+ * @return Amount of node pair in the action
+ */
+ size_t getNoOfNodePairs() {
+ size_t noOfPairs = 0;
+ for(CSinglyLinkedList<CNodePairInfo*>::Iterator it = mNodePair.begin(); it != mNodePair.end(); ++it, noOfPairs++)
+ ;
+ return noOfPairs;
+ }
+
+ /**
+ * Indicates if the action is to be executed locally or remotely. This function is used by the layer to decide which handler to use (local or remote)
+ * @return True if the action is to be executed remotely, false otherwise
+ */
+ bool isRemote();
+
+ /**
+ * Factory to retrieve an action type from the parameters defined in the ID data input of the FB. The ID has the format ACTION;[ENDPOINT#];BROWSENAME,NODEID;[BROSWENAME,NODEID];...
+ * @param paParams Parameters set in the ID of the FB (string contained in the square brackets of opc_ua[...])
+ * @param paLayer The layer that creates and executes the action
+ * @param paTypes A list of type converters of the connections of the FB of the action (SDs/RDs)
+ * @return
+ */
+ static CActionInfo* getActionInfoFromParams(const char *paParams, COPC_UA_Layer &paLayer);
+
+ /**
+ * Retrieves the array of CIEC_ANY to be sent
+ * @return the array of CIEC_ANY to be sent
+ */
+ const CIEC_ANY *getDataToSend();
+
+ /**
+ * Retrieves the array of CIEC_ANY where to receive the data
+ * @return array of CIEC_ANY where to receive the data
+ */
+ CIEC_ANY *getDataToReceive();
+
+ /**
+ * Retrieves the size of the array to send
+ * @return size of the array to send
+ */
+ size_t getSendSize();
+
+ /**
+ * Retrieves the size of the array to receive
+ * @return size of the array to receive
+ */
+ size_t getReceiveSize();
+
+ /**
+ * String representations of the actions and which should be provided as the first part of the ID
+ */
+ static const char* const mActionNames[eActionUnknown];
+
+ private:
+
+ /**
+ * Copy constructor is private and not defined to avoid its usage
+ */
+ CActionInfo(const CActionInfo &paObj);
+
+ /**
+ * Assignment operator is private and not defined to avoid its usage
+ */
+ CActionInfo& operator=(const CActionInfo &paOther);
+
+ /**
+ * Checks if the action is valid regarding requirements for the amount of node pairs, endpoint value and the type of action
+ * @return True if the action is valid, false otherwise
+ */
+ bool checkAction();
+
+ /**
+ * Checks if the provided node pair information is valid
+ * @return True if the node pair information is valid, false otherwise
+ */
+ bool checkNodePairInfo();
+
+ /**
+ * Specific check for read action
+ * @param paFbType The type of FB that wants to executed the read action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the read action is valid, false otherwise
+ */
+ bool checkReadAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for write action
+ * @param paFbType The type of FB that wants to executed the write action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the write action is valid, false otherwise
+ */
+ bool checkWriteAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for create method action
+ * @param paFbType The type of FB that wants to executed the create method action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the create method action is valid, false otherwise
+ */
+ bool checkCreateMethodAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for call method action
+ * @param paFbType The type of FB that wants to executed the call method action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the call method action is valid, false otherwise
+ */
+ bool checkCallMethodAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for subscribe action
+ * @param paFbType The type of FB that wants to executed the subscribe action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the subscribe action is valid, false otherwise
+ */
+ bool checkSubscribeAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for create object action
+ * @param paFbType The type of FB that wants to executed the create object action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the create object action is valid, false otherwise
+ */
+ bool checkCreateObjectAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * Specific check for delete object action
+ * @param paFbType The type of FB that wants to executed the delete object action
+ * @param paNoOfRDs Number of RDs present in the FB
+ * @param paNoOfSDs Number of SDs present in the FB
+ * @return True if the delete object action is valid, false otherwise
+ */
+ bool checkDeleteObjectAction(forte::com_infra::EComServiceType paFbType, unsigned int paNoOfRDs, unsigned int paNoOfSDs);
+
+ /**
+ * The type of action to execute
+ */
+ UA_ActionType mAction;
+
+ /**
+ * The layer that created the action
+ */
+ COPC_UA_Layer& mLayer;
+
+ /**
+ * Empty if the action is executed locally, other value otherwise
+ */
+ CIEC_STRING mEndpoint;
+
+ /**
+ * List of the node pair information about the nodes the action is accessing
+ */
+ CSinglyLinkedList<CNodePairInfo*> mNodePair;
+
+ static const size_t scmMinimumAmounOfParameters = 2; //at least two are needed
+
+ enum IDPositions {
+ eActionType = 0,
+ eEndpoint,
+ eNodePairs
+ };
+
+ /**
+ * Internal class to parse the parameters that are passed to the factory
+ */
+ class CActionParser {
+ public:
+ /**
+ * Retrieves the action type from a string defined in mActionNames
+ * @param paParams The string source
+ * @return Type according to the string parameter. eActionUnknown is returned if paParams doesn't match any value in mActionNames
+ */
+ static UA_ActionType getActionEnum(const char *paParams);
+
+ /**
+ * Retrieves the endpoint from a string. The endpoint is signalized by a # character at the end of the string
+ * @param paEndpoint Source where the endpoint is present
+ * @param paResult Place to store the endpoint
+ * @return True if an endpoint was found, false otherwise
+ */
+ static bool getEndpoint(const char *paEndpoint, CIEC_STRING &paResult);
+
+ /**
+ * Checks if a pair in a string form is valid and stores it in the result list. The node pair has format BROWSENAME,NODEID where BROWSENAME is a path string. @see parseNodeId for the format of NODEID
+ * @param paPair Source string containing the node pair information
+ * @param paResult Place to store a new allocated node pair info if the source was valid
+ * @return True if paPair contained a valid node pair information, false otherwise
+ */
+ static bool handlePair(const char *paPair, CSinglyLinkedList<CNodePairInfo*> &paResult);
+
+ private:
+
+ /**
+ * Parse a node ID in a string format and returns a new allocated UA_NodeId pointer. The format of the node ID is as follow: <namespaceIndex>:<identifiertype>=<identifier> where namespaceIndex is a number, identifier depends on identifiertype. @see parseIdentifier for the format of identifiertype
+ * @param paNodeIdString The string source of the node ID
+ * @return 0 if the source string is invalid, a new allocated UA_NodeId with the information from the source otherwise
+ */
+ static UA_NodeId* parseNodeId(const char *paNodeIdString);
+
+ /**
+ * Parse the namespace of the node ID from the string source
+ * @param paNamespace Source string containing the namespace
+ * @param paResult Place to store the result
+ * @return True if the source string has a valid namespace, false otherwise
+ */
+ static bool parseNamespace(const char *paNamespace, UA_NodeId &paResult);
+
+ /**
+ * Parse the identifier of the node ID from the string source. Allowed values for identifier are [i, s, g] (numeric, string and bytestring node ID type respectively). GUID type is not supported
+ * @param paIdentifier Source string containing the identifier
+ * @param paResult Place to store the result
+ * @return True if the source string has a valid identifier, false otherwise
+ */
+ static bool parseIdentifier(const char *paIdentifier, UA_NodeId &paResult);
+
+ enum NodePairPositions {
+ eBrowseName = 0,
+ eNodeId,
+ eMaxNumberOfPositions
+ };
+
+ enum NodeIdPositions {
+ eNamespace = 0,
+ eIdenfier,
+ eMaxNumberOfNodeIdPositions
+ };
+
+ enum NodeIdItenfierPositions {
+ eIdenfierType = 0,
+ eIdenfierValue,
+ eMaxNumberOfNodeIdIdenfiertPositions
+ };
+ };
+};
+
+/**
+ * Special case of an action because more information is needed
+ */
+class CLocalMethodInfo : public CActionInfo {
+ public:
+
+ /**
+ * Constructor of the class
+ * @param paLayer The layer that creates and executes the action
+ * @param paEndpoint The endpoint of a remote OPC UA in case the action is to be executed remotely. An empty endpoint means that the action is to be executed locally
+ * @param paTypes A list of type converters of the connections of the FB of the action (SDs/RDs)
+ */
+ explicit CLocalMethodInfo(COPC_UA_Layer& paLayer, CIEC_STRING& paEndpoint);
+
+ /**
+ * Destructor of the class
+ */
+ ~CLocalMethodInfo();
+
+ /**
+ * Getter of the mutex of the action
+ * @return
+ */
+ CSyncObject& getMutex();
+
+ /**
+ * Getter for the semaphore of the action
+ * @return
+ */
+ forte::arch::CSemaphore& getResultReady();
+
+ private:
+
+ /**
+ * Copy constructor is private and not defined to avoid its usage
+ */
+ CLocalMethodInfo(const CLocalMethodInfo &paObj);
+
+ /**
+ * Assignment operator is private and not defined to avoid its usage
+ */
+ CLocalMethodInfo& operator=(const CLocalMethodInfo& other);
+
+ /**
+ * Mutex from old code. It's used when a method is called in case other thread may currently create nodes for the same path
+ */
+ CSyncObject mMutex;
+
+ /**
+ * When a method is called, it waits with this semaphore until the response comes back to the FB, when this semaphore is increased indicating the method has finished
+ */
+ forte::arch::CSemaphore mResultIsReady;
+};
+
+#endif /* SRC_MODULES_OPC_UA_OPCUA_ACTION_INFO_H_ */
diff --git a/src/modules/opc_ua/opcua_client_handler.cpp b/src/modules/opc_ua/opcua_client_handler.cpp
deleted file mode 100644
index fe13b97..0000000
--- a/src/modules/opc_ua/opcua_client_handler.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral, Kirill Dorofeev - initial implementation
- *******************************************************************************/
-
-#include "opcua_client_handler.h"
-#include "../../core/devexec.h"
-#include "../../core/iec61131_functions.h"
-#include "../../core/cominfra/basecommfb.h"
-#include <criticalregion.h>
-#include <forte_printer.h>
-
-#ifndef FORTE_COM_OPC_UA_CUSTOM_HOSTNAME
-#include <sockhand.h>
-#endif
-
-using namespace forte::com_infra;
-
-DEFINE_HANDLER(COPC_UA_Client_Handler);
-
-COPC_UA_Client_Handler::COPC_UA_Client_Handler(
- CDeviceExecution& pa_poDeviceExecution) :
- CExternalEventHandler(pa_poDeviceExecution), uaClientRunningFlag(UA_FALSE), subscriptionCallbackHandles(), clients() {
-
-}
-
-COPC_UA_Client_Handler::UA_ClientEndpointMap* COPC_UA_Client_Handler::getHandleForClient(
- const UA_Client *client) {
- CCriticalRegion criticalRegion(mClientMapMutex);
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter =
- clients.begin(); iter != clients.end(); ++iter) {
- if ((*iter)->client == client)
- return (*iter);
- }
- return NULL;
-}
-
-void COPC_UA_Client_Handler::setPriority(int) {
-
- //currently we are doing nothing here.
-}
-
-int COPC_UA_Client_Handler::getPriority(void) const {
- //the same as for setPriority
- return 0;
-}
-
-COPC_UA_Client_Handler::~COPC_UA_Client_Handler() {
- stopClient();
- {
- CCriticalRegion criticalRegion(mClientMapMutex);
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter =
- clients.begin(); iter != clients.end(); ++iter) {
- UA_Client_disconnect((*iter)->client);
- UA_Client_delete((*iter)->client);
- delete ((*iter)->clientMutex);
- delete ((*iter)->endpointUrl);
- delete((*iter));
- }
-
- clients.clearAll();
-
- for (CSinglyLinkedList<struct UA_SubscriptionCallback_Handle *>::Iterator iter =
- subscriptionCallbackHandles.begin();
- iter != subscriptionCallbackHandles.end(); ++iter)
- delete(*iter);
- subscriptionCallbackHandles.clearAll();
- }
- //end();
-}
-
-void COPC_UA_Client_Handler::run() {
- DEVLOG_INFO("OPC UA Client: Starting OPC UA Client handler:\n");
- mServerStarted.inc();
- while (uaClientRunningFlag) {
- {
- CCriticalRegion criticalRegion(mClientMapMutex);
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter =
- clients.begin(); iter != clients.end(); ++iter) {
- if(!uaClientRunningFlag){
- break;
- }
- if ((*iter)->subscription) {
- CCriticalRegion criticalRegion(*(*iter)->clientMutex);
- /* if already connected, this will return GOOD and do nothing */
- /* if the connection is closed/errored, the connection will be reset and then reconnected */
- /* Alternatively you can also use UA_Client_getState to get the current state */
- UA_StatusCode retval = UA_Client_connect((*iter)->client, (*iter)->endpointUrl->getValue());
- if(retval != UA_STATUSCODE_GOOD){
- DEVLOG_ERROR("Not connected to %s. Error %s Retrying to connect again soon\n", (*iter)->endpointUrl->getValue(), UA_StatusCode_name(retval));
- /* The connect may timeout after 1 second (see above) or it may fail immediately on network errors */
- /* E.g. name resolution errors or unreachable network. Thus there should be a small sleep here */
- //CThread::sleepThread(1000);
- //continue;
- }else{
- UA_Client_runAsync((*iter)->client, 10);
- }
- }
- if(!uaClientRunningFlag){
- break;
- }
- }
- }
- CThread::sleepThread(100);
- };
- DEVLOG_INFO("OPC UA Client: Stopping OPC UA Client handler:\n");
-}
-
-void COPC_UA_Client_Handler::enableHandler(void) {
- startClient();
-}
-
-void COPC_UA_Client_Handler::disableHandler(void) {
- COPC_UA_Client_Handler::stopClient();
- end();
-}
-
-void COPC_UA_Client_Handler::startClient() {
- if (uaClientRunningFlag)
- return;
- uaClientRunningFlag = UA_TRUE;
-
- if (!isAlive()) {
- start();
- }
-}
-
-void COPC_UA_Client_Handler::stopClient() {
- uaClientRunningFlag = UA_FALSE;
-}
-
-UA_Client *COPC_UA_Client_Handler::getClientForEndpoint(const char *endpointUrl,
- bool createIfNotFound, bool subscription, CSyncObject **clientMutex) {
- CCriticalRegion criticalRegion(mClientMapMutex);
- if (clientMutex == NULL)
- return NULL;
-
- size_t urlLen = strlen(endpointUrl);
- while (urlLen && endpointUrl[urlLen - 1] == '/') {
- urlLen--;
- }
-
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter =
- clients.begin(); iter != clients.end(); ++iter) {
- if (strncmp((*iter)->endpointUrl->getValue(), endpointUrl, urlLen) == 0) {
- if (clientMutex)
- *clientMutex = (*iter)->clientMutex;
- return (*iter)->client;
- }
- }
-
- if (!createIfNotFound)
- return NULL;
-
- struct UA_ClientEndpointMap *clientMap =
- static_cast<UA_ClientEndpointMap *>(forte_malloc(
- sizeof(struct UA_ClientEndpointMap)));
-
- UA_ClientConfig config = UA_ClientConfig_default;
- config.timeout = 8000;
-
- clientMap->client = UA_Client_new(config);
- clientMap->endpointUrl = new CIEC_STRING(endpointUrl);
- clientMap->clientMutex = new CSyncObject();
-
- *clientMutex = clientMap->clientMutex;
-
- // store it in the list so we can delete it to avoid mem leaks
- clients.pushBack(clientMap);
- startClient();
- clientMap->subscription = subscription;
- if (subscription) {
- config.stateCallback = stateCallback;
- }
-
- return clientMap->client;
-
-}
-
-void COPC_UA_Client_Handler::onSubscriptionValueChanged(UA_Client *client,
- UA_UInt32 subscriptionId, void *subContext, UA_UInt32 monId,
- void *monContext, UA_DataValue *data) {
- struct UA_SubscriptionCallback_Handle *handle =
- static_cast<struct UA_SubscriptionCallback_Handle *>(monContext);
- EComResponse retVal;
- forte::com_infra::CComLayer *layer = handle->layer;
-
- struct {
- const struct UA_TypeConvert *convert;
- unsigned int portIndex;
- const UA_Variant *data;
- } handleRecv;
-
- if(data->hasValue){
- handleRecv.data = data->hasValue ? &data->value : NULL;
- handleRecv.portIndex = handle->portIndex;
- handleRecv.convert = handle->convert;
-
- retVal = layer->recvData(static_cast<const void *>(&handleRecv), 0);
-
- }
-
-}
-
-void COPC_UA_Client_Handler::deleteSubscriptionCallback(UA_Client *client,
- UA_UInt32 subscriptionId, void *subscriptionContext) {
- DEVLOG_INFO("Subscription Id %u was deleted\n", subscriptionId);
-}
-
-void COPC_UA_Client_Handler::addMonitoringItem(UA_Client* client,
- forte::com_infra::CComLayer *comLayer, UA_NodeId nodeId,
- const struct UA_TypeConvert *convert, unsigned int portIndex) {
- struct UA_SubscriptionCallback_Handle *handle =
- static_cast<UA_SubscriptionCallback_Handle *>(forte_malloc(
- sizeof(struct UA_SubscriptionCallback_Handle)));
- UA_UInt32 subId;
- startClient();
- UA_ClientEndpointMap* clientEndpoint = getHandleForClient(client);
- if (clientEndpoint && clientEndpoint->clientMutex) {
- bool createNewSub = true;
- /* Add a MonitoredItem */
- handle->convert = convert;
- handle->portIndex = portIndex;
- handle->layer = comLayer;
-
- // store it in the list so we can delete it to avoid mem leaks
- subscriptionCallbackHandles.pushBack(handle);
-
- if (clientEndpoint->subscription) {
- createNewSub = false;
- subId = clientEndpoint->subscriptionId;
- }
-
- unsigned int tries = 0;
- while(createNewSub && tries++ < 3){
- /* A new session was created. We need to create the subscription. */
- /* Create a subscription */
- {
- CCriticalRegion criticalRegion(*clientEndpoint->clientMutex);
- UA_StatusCode retval = UA_Client_connect(clientEndpoint->client, clientEndpoint->endpointUrl->getValue());
- if(UA_STATUSCODE_GOOD == retval){
- UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
- UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(client, request,
- NULL, NULL, deleteSubscriptionCallback);
- if(response.responseHeader.serviceResult == UA_STATUSCODE_GOOD){
- DEVLOG_INFO("Create subscription to %s succeeded, id %u\n", clientEndpoint->endpointUrl->getValue(), response.subscriptionId);
- clientEndpoint->subscriptionId = response.subscriptionId;
- subId = response.subscriptionId;
- clientEndpoint->subscription = true;
- break;
- }
- else{
- DEVLOG_INFO("Create subscription to %s failed, %s\n", clientEndpoint->endpointUrl->getValue(), UA_StatusCode_name(response.responseHeader.serviceResult));
- }
- }else{
- DEVLOG_ERROR("Connecting to %s failed with error %s\n", clientEndpoint->endpointUrl->getValue(), UA_StatusCode_name(retval));
- }
- }
- CThread::sleepThread(300);
- }
-
- {
- CCriticalRegion criticalRegion(*clientEndpoint->clientMutex);
- UA_MonitoredItemCreateRequest monRequest =
- UA_MonitoredItemCreateRequest_default(nodeId); //UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME)
- UA_MonitoredItemCreateResult monResponse =
- UA_Client_MonitoredItems_createDataChange(client, subId,
- UA_TIMESTAMPSTORETURN_BOTH, monRequest, static_cast<void *>(handle),
- onSubscriptionValueChanged,
- NULL);
-
- if (monResponse.statusCode == UA_STATUSCODE_GOOD) {
- DEVLOG_INFO("Monitoring succeeded', id %u\n",
- monResponse.monitoredItemId);
- //startClient(); desperate try
- } else {
- DEVLOG_ERROR("Adding monitoring variable failed: %s\n",
- UA_StatusCode_name(monResponse.statusCode));
- }
- }
- }
-
-}
-
-void COPC_UA_Client_Handler::stateCallback(UA_Client *client,
- UA_ClientState clientState) {
-
- switch (clientState) {
- case UA_CLIENTSTATE_DISCONNECTED:
- DEVLOG_INFO("The client is disconnected");
- break;
- case UA_CLIENTSTATE_CONNECTED:
- DEVLOG_INFO("A TCP connection to the server is open");
- break;
- case UA_CLIENTSTATE_SECURECHANNEL:
- DEVLOG_INFO("A SecureChannel to the server is open");
- break;
- case UA_CLIENTSTATE_SESSION: {
- DEVLOG_INFO("A session with the server is open");
- }
- break;
- case UA_CLIENTSTATE_SESSION_RENEWED:
- DEVLOG_INFO("A session with the server is open (renewed)");
- break;
- }
- return;
-}
diff --git a/src/modules/opc_ua/opcua_client_handler.h b/src/modules/opc_ua/opcua_client_handler.h
deleted file mode 100644
index 938faa2..0000000
--- a/src/modules/opc_ua/opcua_client_handler.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Jose Cabral, Kirill Dorofeev - initial implementation
- *******************************************************************************/
-
-#ifndef SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_
-#define SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_
-
-#include <forte_thread.h>
-#include <extevhan.h>
-#include <conn.h>
-#include <stdio.h>
-#include "comlayer.h"
-#include <forte_config.h>
-#include "opcua_helper.h"
-#include "opcua_layer.h"
-#include <forte_string.h>
-
-struct UA_SubscriptionCallback_Handle {
- forte::com_infra::CComLayer *layer;
- const struct UA_TypeConvert *convert;
- unsigned int portIndex;
-};
-
-typedef struct UA_ClientEndpointMap UA_ClientEndpointMap;
-
-// cppcheck-suppress noConstructor
-class COPC_UA_Client_Handler: public CExternalEventHandler, public CThread {
-
- CSinglyLinkedList<struct UA_SubscriptionCallback_Handle *> subscriptionCallbackHandles;
-
- const UA_NodeId *subscriptionNodeId;
- DECLARE_HANDLER(COPC_UA_Client_Handler)
-
-public:
-
- /* functions needed for the external event handler interface */
- void enableHandler(void);
-
- void disableHandler(void);
-
- void setPriority(int pa_nPriority);
-
- int getPriority(void) const;
-
- void addMonitoringItem(UA_Client* client, forte::com_infra::CComLayer *comLayer, UA_NodeId nodeId,
- const struct UA_TypeConvert *convert, unsigned int portIndex);
-// UA_StatusCode
-// registerSubscriptionCallBack(UA_Client *client);
-
- static UA_StatusCode callMethod(UA_Client *client, const UA_NodeId objectId,
- const UA_NodeId methodId, size_t inputSize, const UA_Variant *input,
- size_t *outputSize, UA_Variant **output);
-
- static void stateCallback(UA_Client *client, UA_ClientState clientState);
-
- static void
- deleteSubscriptionCallback(UA_Client *client, UA_UInt32 subscriptionId,
- void *subscriptionContext);
-
-
- static void onSubscriptionValueChanged(UA_Client *client, UA_UInt32 subId, void *subContext,
- UA_UInt32 monId, void *monContext, UA_DataValue *value);
- /**
- * Get the opc ua client for the given endpoint url. If there exists already an OPC UA client
- * which is connected to the given URL, that one will be returned.
- * If createIfNotFound is false and there is no client yet, NULL will be returned. Otherwise
- * a new client is instantiated and connected.
- *
- * @param endpointUrl The endpoint url for the client
- * @param createIfNotFound if true, a new client will be created if not found
- * @return the (new) client, or NULL of not found and not created.
- */
- UA_Client *
- getClientForEndpoint(const char *endpointUrl, bool createIfNotFound, bool subscription,
- CSyncObject **clientMutex);
-protected:
-
-private:
-
- struct UA_ClientEndpointMap {
- UA_Client *client;
- CSyncObject *clientMutex;
- bool subscription;
- CIEC_STRING* endpointUrl;
- UA_UInt32 subscriptionId;
- };
-
- CSyncObject mClientMapMutex;
- /**
- * Collector list for callback handles to be able to clean them up on destroy.
- */
- CSinglyLinkedList<UA_ClientEndpointMap *> clients;
-
- // OPC UA Client and configuration
- volatile UA_Boolean uaClientRunningFlag;
-
- UA_ClientEndpointMap* getHandleForClient(const UA_Client *client);
- /**
- * Starts the OPC UA server, if it is not already running
- */
- void startClient();
-
- /**
- * Sets the uaServerRunningFlag to false which causes the UA Server to stop.
- */
- void stopClient();
-
- /**
- * Overridden run() from CThread which loops the UA Server.
- */
- virtual void run();
-
-
- struct ReferencedNodeByLayer {
- const UA_NodeId *nodeId;
- CSinglyLinkedList<const COPC_UA_Layer*> referencedByLayer;
- };
- CSinglyLinkedList<struct ReferencedNodeByLayer*> nodeLayerReferences;
- CSyncObject mNodeLayerMutex;
- CSemaphore mServerStarted;
-
-
-};
-
-#endif /* SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_ */
diff --git a/src/modules/opc_ua/opcua_client_information.cpp b/src/modules/opc_ua/opcua_client_information.cpp
new file mode 100644
index 0000000..5fa7937
--- /dev/null
+++ b/src/modules/opc_ua/opcua_client_information.cpp
@@ -0,0 +1,779 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include <forte_architecture_time.h>
+#include "opcua_client_information.h"
+#include <basecommfb.h>
+#include "opcua_handler_abstract.h" //for logger
+
+
+CUA_ClientInformation::CUA_ClientInformation(const CIEC_STRING &paEndpoint) :
+ mEndpointUrl(paEndpoint), mClient(0), mSubscriptionInfo(0), mMissingAsyncCalls(0), mNeedsReconnection(false), mWaitToInitializeActions(false),
+ mLastReconnectionTry(0), mLastActionInitializationTry(0), mSomeActionWasInitialized(false) {
+}
+
+CUA_ClientInformation::~CUA_ClientInformation() {
+ uninitializeClient();
+}
+
+bool CUA_ClientInformation::configureClient() {
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ mClient = UA_Client_new();
+ UA_ClientConfig *configPointer = UA_Client_getConfig(mClient);
+ UA_StatusCode retVal = UA_ClientConfig_setDefault(configPointer);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Error setting default client config. Error: %s\n", UA_StatusCode_name(retVal));
+ UA_Client_delete(mClient);
+ return false;
+ }
+ configPointer->stateCallback = CUA_RemoteCallbackFunctions::clientStateChangeCallback;
+ configPointer->logger = COPC_UA_HandlerAbstract::getLogger();
+ configPointer->timeout = scmClientTimeoutInMilli;
+#else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_ClientConfig config = UA_ClientConfig_default;
+ config.stateCallback = CUA_RemoteCallbackFunctions::clientStateChangeCallback;
+ config.logger = COPC_UA_HandlerAbstract::getLogger();
+ config.timeout = scmClientTimeoutInMilli;
+ mClient = UA_Client_new(config);
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+ return true;
+}
+
+void CUA_ClientInformation::uninitializeClient() {
+ DEVLOG_INFO("[OPC UA CLIENT]: Uninitializing client %s\n", mEndpointUrl.getValue());
+ mActionsToBeInitialized.clearAll();
+ for(CSinglyLinkedList<CActionInfo *>::Iterator itReferencingActions = mActionsReferencingIt.begin(); itReferencingActions != mActionsReferencingIt.end();
+ ++itReferencingActions) {
+ uninitializeAction(**itReferencingActions);
+ mActionsToBeInitialized.pushBack(*itReferencingActions);
+ }
+ UA_Client_disconnect(mClient);
+ UA_Client_delete(mClient);
+ mClient = 0;
+ mWaitToInitializeActions = false;
+ mNeedsReconnection = false;
+ mSomeActionWasInitialized = false;
+ mLastReconnectionTry = 0;
+ mLastActionInitializationTry = 0;
+ mMissingAsyncCalls = 0;
+}
+
+bool CUA_ClientInformation::handleClientState() {
+
+ mSomeActionWasInitialized = false;
+ bool noMoreChangesNeeded = false;
+ bool tryAnotherChangeImmediately = true;
+
+ if(mNeedsReconnection) {
+ uint_fast64_t now = getNanoSecondsMonotonic();
+ if((now - mLastReconnectionTry) < scmConnectionRetryTimeoutNano) { //if connection timeout didn't happen, return that more changes are still needed
+ tryAnotherChangeImmediately = false;
+ }
+ } else if(mWaitToInitializeActions) {
+ uint_fast64_t now = getNanoSecondsMonotonic();
+ if((now - mLastActionInitializationTry) < scmInitializeActionRetryNano) { //if an action failed, wait scmInitializeActionRetryNano until next retry to initialize them
+ tryAnotherChangeImmediately = false;
+ }
+ }
+
+ while(tryAnotherChangeImmediately) {
+ UA_ClientState currentState = UA_Client_getState(mClient);
+ if(UA_CLIENTSTATE_SESSION == currentState) {
+ if(initializeAllActions()) {
+ noMoreChangesNeeded = true;
+ } else {
+ mWaitToInitializeActions = true;
+ mLastActionInitializationTry = getNanoSecondsMonotonic();
+ }
+ tryAnotherChangeImmediately = false;
+ } else if(UA_CLIENTSTATE_SESSION_RENEWED == currentState) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Client state is session renewed. Check what happens with the subscription here\n");
+ } else {
+ if(!connectClient()) {
+ tryAnotherChangeImmediately = false;
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't connect to endpoint %s. Forte will try to reconnect in %u nanoseconds\n", mEndpointUrl.getValue(),
+ scmConnectionRetryTimeoutNano);
+ mNeedsReconnection = true;
+ mLastReconnectionTry = getNanoSecondsMonotonic();
+ } else { //if connection succeeded, don't break the while and try to handle subscriptions immediately
+ mNeedsReconnection = false;
+ DEVLOG_INFO("[OPC UA CLIENT]: Client connected to endpoint %s\n", mEndpointUrl.getValue());
+ }
+ }
+ }
+
+ return noMoreChangesNeeded;
+}
+
+bool CUA_ClientInformation::executeAsyncCalls() {
+ return (UA_STATUSCODE_GOOD ==
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_Client_run_iterate(
+#else
+ UA_Client_runAsync(
+#endif
+ mClient, 10));
+}
+
+UA_StatusCode CUA_ClientInformation::executeRead(CActionInfo& paActionInfo) {
+ CCriticalRegion clientRegion(mClientMutex);
+
+ UA_ReadRequest request;
+ UA_ReadRequest_init(&request);
+ request.nodesToReadSize = paActionInfo.getNoOfNodePairs();
+
+ UA_ReadValueId *ids = static_cast<UA_ReadValueId *>(UA_Array_new(request.nodesToReadSize, &UA_TYPES[UA_TYPES_READVALUEID]));
+ request.nodesToRead = ids;
+
+ size_t indexOfNodePair = 0;
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePair = paActionInfo.getNodePairInfo().begin();
+ itNodePair != paActionInfo.getNodePairInfo().end(); ++itNodePair, indexOfNodePair++) {
+ UA_ReadValueId_init(&ids[indexOfNodePair]);
+ ids[indexOfNodePair].attributeId = UA_ATTRIBUTEID_VALUE;
+ UA_NodeId_copy((*itNodePair)->mNodeId, &ids[indexOfNodePair].nodeId);
+ }
+
+ UA_RemoteCallHandle *remoteCallHandle = new UA_RemoteCallHandle(paActionInfo, *this);
+
+ UA_StatusCode retVal =
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_Client_sendAsyncReadRequest(mClient, &request, CUA_RemoteCallbackFunctions::readAsyncCallback, remoteCallHandle, 0);
+#else
+ UA_Client_AsyncService_read(mClient, &request, CUA_RemoteCallbackFunctions::anyAsyncCallback, remoteCallHandle, 0);
+#endif
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't dispatch read action for FB %s. Error: %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ delete remoteCallHandle;
+#else
+ // v0.3.0 is calling the callback when dispatch fails, where the remoteCallHandle is deleted
+#endif
+ } else {
+ addAsyncCall();
+ }
+
+ UA_ReadRequest_deleteMembers(&request);
+
+ return retVal;
+}
+
+UA_StatusCode CUA_ClientInformation::executeWrite(CActionInfo& paActionInfo) {
+ CCriticalRegion clientRegion(mClientMutex);
+
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ UA_WriteRequest request;
+ UA_WriteRequest_init(&request);
+ request.nodesToWriteSize = paActionInfo.getNoOfNodePairs();
+
+ UA_WriteValue *ids = static_cast<UA_WriteValue *>(UA_Array_new(request.nodesToWriteSize, &UA_TYPES[UA_TYPES_WRITEVALUE]));
+ request.nodesToWrite = ids;
+
+ size_t indexOfNodePair = 0;
+ const CIEC_ANY *dataToSend = paActionInfo.getDataToSend();
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePair = paActionInfo.getNodePairInfo().begin();
+ itNodePair != paActionInfo.getNodePairInfo().end(); ++itNodePair, indexOfNodePair++) {
+
+ UA_WriteValue_init(&ids[indexOfNodePair]);
+ ids[indexOfNodePair].attributeId = UA_ATTRIBUTEID_VALUE;
+ UA_NodeId_copy((*itNodePair)->mNodeId, &ids[indexOfNodePair].nodeId);
+ ids[indexOfNodePair].value.hasValue = true;
+
+ COPC_UA_Helper::fillVariant(ids[indexOfNodePair].value.value, dataToSend[indexOfNodePair]);
+ }
+
+ UA_RemoteCallHandle *remoteCallHandle = new UA_RemoteCallHandle(paActionInfo, *this);
+ retVal =
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_Client_sendAsyncWriteRequest(mClient, &request, CUA_RemoteCallbackFunctions::writeAsyncCallback, remoteCallHandle, 0);
+#else
+ UA_Client_AsyncService_write(mClient, &request, CUA_RemoteCallbackFunctions::anyAsyncCallback, remoteCallHandle, 0);
+#endif
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't dispatch write action for FB %s. Error: %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ delete remoteCallHandle;
+#else
+ // v0.3.0 is calling the callback when dispatch fails, where the remoteCallHandle is deleted
+#endif
+ } else {
+ addAsyncCall();
+ }
+
+ UA_WriteRequest_deleteMembers(&request);
+
+ return retVal;
+}
+
+UA_StatusCode CUA_ClientInformation::executeCallMethod(CActionInfo& paActionInfo) {
+ CCriticalRegion clientRegion(mClientMutex);
+
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ UA_CallRequest request;
+ UA_CallRequest_init(&request);
+ request.methodsToCallSize = 1;
+ request.methodsToCall = static_cast<UA_CallMethodRequest *>(UA_Array_new(request.methodsToCallSize, &UA_TYPES[UA_TYPES_CALLMETHODREQUEST]));
+
+ UA_CallMethodRequest *methodRequest = &request.methodsToCall[0];
+
+ methodRequest->inputArgumentsSize = paActionInfo.getSendSize();
+ methodRequest->inputArguments = static_cast<UA_Variant *>(UA_Array_new(methodRequest->inputArgumentsSize, &UA_TYPES[UA_TYPES_VARIANT]));
+
+ const CIEC_ANY *dataToSend = paActionInfo.getDataToSend();
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePair = paActionInfo.getNodePairInfo().begin();
+ UA_NodeId_copy((*itNodePair)->mNodeId, &methodRequest->methodId);
+ ++itNodePair;
+ UA_NodeId_copy((*itNodePair)->mNodeId, &methodRequest->objectId);
+
+ for(size_t i = 0; i < methodRequest->inputArgumentsSize; i++) {
+ COPC_UA_Helper::fillVariant(methodRequest->inputArguments[i], dataToSend[i]);
+ }
+
+ UA_RemoteCallHandle *remoteCallHandle = new UA_RemoteCallHandle(paActionInfo, *this);
+ retVal =
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_Client_sendAsyncRequest(mClient, &request, &UA_TYPES[UA_TYPES_CALLREQUEST], CUA_RemoteCallbackFunctions::callMethodAsyncCallback,
+ &UA_TYPES[UA_TYPES_CALLRESPONSE], remoteCallHandle, 0);
+#else
+ UA_Client_AsyncService_call(mClient, &request, CUA_RemoteCallbackFunctions::anyAsyncCallback, remoteCallHandle, 0);
+#endif
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't dispatch call action for FB %s. Error %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ delete remoteCallHandle;
+#else
+ // v0.3.0 is calling the callback when dispatch fails, where the remoteCallHandle is deleted
+#endif
+ } else {
+ addAsyncCall();
+ }
+
+ UA_CallRequest_deleteMembers(&request);
+
+ return retVal;
+}
+
+void CUA_ClientInformation::addAction(CActionInfo& paActionInfo) {
+ mActionsReferencingIt.pushBack(&paActionInfo);
+ mActionsToBeInitialized.pushBack(&paActionInfo);
+ mWaitToInitializeActions = false;
+}
+
+void CUA_ClientInformation::removeAction(CActionInfo& paActionInfo) {
+ uninitializeAction(paActionInfo);
+ mActionsReferencingIt.erase(&paActionInfo);
+}
+
+bool CUA_ClientInformation::isActionInitialized(CActionInfo& paActionInfo) {
+ CCriticalRegion clientRegion(mClientMutex);
+ bool retVal = true;
+ for(CSinglyLinkedList<CActionInfo *>::Iterator itClientInformation = mActionsToBeInitialized.begin(); itClientInformation != mActionsToBeInitialized.end();
+ ++itClientInformation) {
+ if((*itClientInformation) == &paActionInfo) {
+ retVal = false;
+ break;
+ }
+ }
+ return retVal;
+}
+
+bool CUA_ClientInformation::connectClient() {
+ return (UA_STATUSCODE_GOOD == UA_Client_connect(mClient, mEndpointUrl.getValue()));
+}
+
+bool CUA_ClientInformation::initializeAllActions() {
+ bool somethingFailed = false;
+
+ CSinglyLinkedList<CActionInfo *> initializedActions;
+ for(CSinglyLinkedList<CActionInfo *>::Iterator itActionInfo = mActionsToBeInitialized.begin(); itActionInfo != mActionsToBeInitialized.end();
+ ++itActionInfo) {
+
+ if(!initializeAction(**itActionInfo)) {
+ initializedActions.pushBack(*itActionInfo);
+ } else {
+ somethingFailed = true;
+ }
+ }
+
+ if(!initializedActions.isEmpty()) { //if one action (FB) related to the client was initialized, copy it to the main thread
+ mSomeActionWasInitialized = true;
+ for(CSinglyLinkedList<CActionInfo *>::Iterator itActionInfo = initializedActions.begin(); itActionInfo != initializedActions.end();
+ ++itActionInfo) {
+ mActionsToBeInitialized.erase(*itActionInfo);
+ }
+ }
+
+ return !somethingFailed;
+}
+
+bool CUA_ClientInformation::initializeAction(CActionInfo& paActionInfo) {
+ bool somethingFailed = false;
+ if(CActionInfo::eCallMethod == paActionInfo.getAction()) {
+ if(!initializeCallMethod(paActionInfo)) {
+ somethingFailed = true;
+ }
+ } else {
+ size_t runnerHelper = 0;
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePair = paActionInfo.getNodePairInfo().begin();
+ itNodePair != paActionInfo.getNodePairInfo().end();
+ ++itNodePair, runnerHelper++) {
+
+ if(!somethingFailed) {
+ if("" != (*itNodePair)->mBrowsePath) { //if browsepath was given, look for NodeId, even if NodeID was also provided
+ UA_NodeId *nodeId;
+ UA_StatusCode retVal = COPC_UA_Helper::getRemoteNodeForPath(*mClient, (*itNodePair)->mBrowsePath.getValue(), 0, &nodeId); //we don't care about the parent
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: The index %u of the FB %s could not be initialized because the requested nodeId was not found. Error: %s\n",
+ runnerHelper, paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+ somethingFailed = true;
+ } else {
+ if((*itNodePair)->mNodeId) {
+ if(!UA_NodeId_equal((*itNodePair)->mNodeId, nodeId)) { //if NodeId was provided, check if found is the same
+ DEVLOG_ERROR("[OPC UA CLIENT]: The call from FB %s failed the found nodeId of the method doesn't match the provided one\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName());
+ somethingFailed = true;
+ }
+ UA_NodeId_delete(nodeId);
+ } else {
+ (*itNodePair)->mNodeId = nodeId;
+ }
+ }
+ }
+ }
+ }
+
+ //for subscription, more things are needed
+ if(!somethingFailed && !initializeSubscription(paActionInfo)) { //won't initialize subscription if some nodeID is missing
+ somethingFailed = true;
+ }
+ }
+ return somethingFailed;
+}
+
+bool CUA_ClientInformation::initializeCallMethod(CActionInfo& paActionInfo) {
+ bool somethingFailed = false;
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePair = paActionInfo.getNodePairInfo().begin();
+ //get parentNodeId and also the method NodeId
+ UA_NodeId *methodNode;
+ UA_NodeId *parentNode;
+
+ UA_StatusCode retVal = COPC_UA_Helper::getRemoteNodeForPath(*mClient, (*itNodePair)->mBrowsePath.getValue(), &parentNode, &methodNode);
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: The method call from FB %s failed because the requested node was not found. Error: %s\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+ somethingFailed = true;
+ } else {
+ if((*itNodePair)->mNodeId) {
+ if(!UA_NodeId_equal((*itNodePair)->mNodeId, methodNode)) { //if NodeId of method was provided, check if found is the same
+ DEVLOG_ERROR("[OPC UA CLIENT]: The method call from FB %s failed the found nodeId of the method doesn't match the provided one\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName());
+ somethingFailed = true;
+ }
+ UA_NodeId_delete(methodNode);
+ } else {
+ (*itNodePair)->mNodeId = methodNode;
+ }
+ if(!somethingFailed) {
+ //store the parentNodeId in the second position. BrowseName is not needed
+ paActionInfo.getNodePairInfo().pushBack(new CActionInfo::CNodePairInfo(parentNode, ""));
+ } else {
+ UA_NodeId_delete(parentNode);
+ }
+ }
+
+ return !somethingFailed;
+}
+
+bool CUA_ClientInformation::initializeSubscription(CActionInfo& paActionInfo) {
+ bool somethingFailed = false;
+ if(CActionInfo::eSubscribe == paActionInfo.getAction() && allocAndCreateSubscription()) {
+
+ size_t itemsAddedToList = 0;
+
+ CSinglyLinkedList<UA_MonitoringItemInfo>::Iterator itFirstNewMonitoringItemInfo = mSubscriptionInfo->mMonitoredItems.end();
+
+ for(size_t i = 0; i < paActionInfo.getNoOfNodePairs(); i++) {
+ UA_MonitoringItemInfo monitoringItemInfo(UA_SubscribeContext_Handle(paActionInfo, itemsAddedToList));
+ mSubscriptionInfo->mMonitoredItems.pushBack(monitoringItemInfo);
+ if(itFirstNewMonitoringItemInfo == mSubscriptionInfo->mMonitoredItems.end()) { //store the first added item
+ itFirstNewMonitoringItemInfo = mSubscriptionInfo->mMonitoredItems.back();
+ }
+ itemsAddedToList++;
+ }
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePairInfo = paActionInfo.getNodePairInfo().begin();
+ size_t itemsAddedToLibrary = 0;
+
+ CSinglyLinkedList<UA_MonitoringItemInfo>::Iterator itAddedMonitoringItemInfo = itFirstNewMonitoringItemInfo;
+
+ for(itemsAddedToLibrary = 0; itemsAddedToLibrary < itemsAddedToList; ++itAddedMonitoringItemInfo, ++itNodePairInfo) {
+ if(!addMonitoringItem(*itAddedMonitoringItemInfo, *(*itNodePairInfo)->mNodeId)) {
+ somethingFailed = true;
+ break;
+ }
+ itemsAddedToLibrary++;
+ }
+
+ if(!somethingFailed) {
+ addAsyncCall();
+ } else { //if something failed, remove added monitoring items and fail the whole action
+
+ for(size_t i = 0; i < itemsAddedToList; i++) {
+ if(i < itemsAddedToLibrary) { //remove items from the library
+ UA_StatusCode retVal = UA_Client_MonitoredItems_deleteSingle(mClient, mSubscriptionInfo->mSubscriptionId,
+ (*itFirstNewMonitoringItemInfo).mMonitoringItemId);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't delete recently added monitored item %u. Error: %s\n", (*itFirstNewMonitoringItemInfo).mMonitoringItemId, UA_StatusCode_name(retVal));
+ }
+ }
+ itAddedMonitoringItemInfo = itFirstNewMonitoringItemInfo;
+ ++itFirstNewMonitoringItemInfo;
+ mSubscriptionInfo->mMonitoredItems.erase(*itAddedMonitoringItemInfo);
+ }
+ }
+ }
+ return !somethingFailed;
+}
+
+bool CUA_ClientInformation::allocAndCreateSubscription() {
+ bool somethingFailed = false;
+ if(!mSubscriptionInfo) {
+ mSubscriptionInfo = new UA_subscriptionInfo();
+ if(!createSubscription()) {
+ delete mSubscriptionInfo;
+ mSubscriptionInfo = 0;
+ somethingFailed = true;
+ }
+ }
+ return !somethingFailed;
+}
+
+bool CUA_ClientInformation::createSubscription() {
+ UA_CreateSubscriptionRequest request = UA_CreateSubscriptionRequest_default();
+ request.requestedPublishingInterval = FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL;
+ UA_CreateSubscriptionResponse response = UA_Client_Subscriptions_create(mClient, request, this, 0, CUA_RemoteCallbackFunctions::deleteSubscriptionCallback);
+ if(UA_STATUSCODE_GOOD == response.responseHeader.serviceResult) {
+ DEVLOG_INFO("[OPC UA CLIENT]: Create subscription to %s succeeded, id %u\n", mEndpointUrl.getValue(), response.subscriptionId);
+ mSubscriptionInfo->mSubscriptionId = response.subscriptionId;
+ return true;
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Create subscription to %s failed. Error: %s\n", mEndpointUrl.getValue(), UA_StatusCode_name(response.responseHeader.serviceResult));
+ }
+
+ return false;
+}
+
+bool CUA_ClientInformation::addMonitoringItem(UA_MonitoringItemInfo& paMonitoringInfo, UA_NodeId& paNodeId) {
+
+ UA_MonitoredItemCreateRequest monRequest = UA_MonitoredItemCreateRequest_default(paNodeId);
+ UA_MonitoredItemCreateResult monResponse = UA_Client_MonitoredItems_createDataChange(mClient, mSubscriptionInfo->mSubscriptionId, UA_TIMESTAMPSTORETURN_BOTH,
+ monRequest, static_cast<void *>(&paMonitoringInfo.mVariableInfo), CUA_RemoteCallbackFunctions::subscriptionValueChangedCallback, 0);
+ if(UA_STATUSCODE_GOOD == monResponse.statusCode) {
+ DEVLOG_INFO("[OPC UA CLIENT]: Monitoring of FB %s at index %u succeeded. The monitoring item id is %u\n",
+ paMonitoringInfo.mVariableInfo.mActionInfo.getLayer().getCommFB()->getInstanceName(), paMonitoringInfo.mVariableInfo.mPortIndex,
+ monResponse.monitoredItemId);
+ paMonitoringInfo.mMonitoringItemId = monResponse.monitoredItemId;
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Monitoring of FB %s at index %u failed. Error: %s\n",
+ paMonitoringInfo.mVariableInfo.mActionInfo.getLayer().getCommFB()->getInstanceName(), paMonitoringInfo.mVariableInfo.mPortIndex,
+ UA_StatusCode_name(monResponse.statusCode));
+ }
+
+ return (UA_STATUSCODE_GOOD == monResponse.statusCode);
+}
+
+void CUA_ClientInformation::addAsyncCall() {
+ mMissingAsyncCalls++;
+}
+
+void CUA_ClientInformation::removeAsyncCall() {
+ mMissingAsyncCalls--;
+}
+
+void CUA_ClientInformation::uninitializeAction(CActionInfo& paActionInfo) {
+ mActionsToBeInitialized.erase(&paActionInfo); //remove in case it is still not initialized
+ if(CActionInfo::eSubscribe == paActionInfo.getAction()) { //only subscription has something to release
+ uninitializeSubscription(paActionInfo);
+ }
+}
+
+void CUA_ClientInformation::uninitializeSubscription(CActionInfo& paActionInfo) {
+ if(mSubscriptionInfo) {
+ CSinglyLinkedList<UA_MonitoringItemInfo> toDelete;
+ for(CSinglyLinkedList<UA_MonitoringItemInfo>::Iterator itMonitoringItemInfo = mSubscriptionInfo->mMonitoredItems.begin();
+ itMonitoringItemInfo != mSubscriptionInfo->mMonitoredItems.end(); ++itMonitoringItemInfo) {
+ if(&(*itMonitoringItemInfo).mVariableInfo.mActionInfo == &paActionInfo) {
+ toDelete.pushBack(*itMonitoringItemInfo);
+ }
+ }
+ for(CSinglyLinkedList<UA_MonitoringItemInfo>::Iterator itMonitoringItemInfo = toDelete.begin(); itMonitoringItemInfo != toDelete.end();
+ ++itMonitoringItemInfo) {
+ UA_StatusCode retVal = UA_Client_MonitoredItems_deleteSingle(mClient, mSubscriptionInfo->mSubscriptionId, (*itMonitoringItemInfo).mMonitoringItemId);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't delete monitored item %u. No further actions will be taken. Error: %s\n",
+ (*itMonitoringItemInfo).mMonitoringItemId, UA_StatusCode_name(retVal));
+ }
+
+ mSubscriptionInfo->mMonitoredItems.erase(*itMonitoringItemInfo);
+ }
+
+ if(mSubscriptionInfo->mMonitoredItems.isEmpty()) {
+ resetSubscription(true);
+ }
+ }
+}
+
+void CUA_ClientInformation::resetSubscription(bool paDeleteSubscription) {
+ if(mSubscriptionInfo) {
+ removeAsyncCall();
+ if(paDeleteSubscription) {
+ UA_StatusCode retval = UA_Client_Subscriptions_deleteSingle(mClient, mSubscriptionInfo->mSubscriptionId);
+ if(UA_STATUSCODE_GOOD != retval) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Couldn't delete subscription %u. Failed with error %s. No further actions will be taken\n",
+ mSubscriptionInfo->mSubscriptionId, UA_StatusCode_name(retval));
+ }
+ }
+
+ delete mSubscriptionInfo;
+ mSubscriptionInfo = 0;
+ }
+}
+
+// ******************** CALLBACKS *************************
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+//not used
+#else
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::anyAsyncCallback(UA_Client *paClient, void *paUserdata, UA_UInt32 paRequestId, void *paResponse, //NOSONAR
+ const UA_DataType *paResponseType) {
+ if(&UA_TYPES[UA_TYPES_READRESPONSE] == paResponseType) {
+ readAsyncCallback(paClient, paUserdata, paRequestId, static_cast<UA_ReadResponse*>(paResponse));
+ } else if(&UA_TYPES[UA_TYPES_WRITERESPONSE] == paResponseType) {
+ writeAsyncCallback(paClient, paUserdata, paRequestId, static_cast<UA_WriteResponse*>(paResponse));
+ } else if(&UA_TYPES[UA_TYPES_CALLRESPONSE] == paResponseType) {
+ callMethodAsyncCallback(paClient, paUserdata, paRequestId, static_cast<UA_CallResponse*>(paResponse));
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Client has a return call from an unknown type %s\n", paResponseType->typeName);
+ }
+}
+#endif
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::readAsyncCallback(UA_Client *, void *paUserdata, UA_UInt32, UA_ReadResponse *paResponse) { //NOSONAR
+ UA_RemoteCallHandle *remoteCallHandle = static_cast<UA_RemoteCallHandle*>(paUserdata);
+ remoteCallHandle->mClientInformation.removeAsyncCall();
+
+ COPC_UA_Helper::UA_RecvVariable_handle varHandle(paResponse->resultsSize);
+ if(UA_STATUSCODE_GOOD == paResponse->responseHeader.serviceResult) {
+ if(paResponse->resultsSize == remoteCallHandle->mActionInfo.getNoOfNodePairs()) {
+ //check if all results are OK first
+ for(size_t i = 0; i < paResponse->resultsSize; i++) {
+ if(paResponse->results[i].hasStatus && UA_STATUSCODE_GOOD != paResponse->results[i].status) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Reading for FB %s in client %s failed because the response for index %u has status %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(), i,
+ UA_StatusCode_name(paResponse->results[i].status));
+ varHandle.mFailed = true;
+ break;
+ }
+ }
+
+ if(!varHandle.mFailed) {
+ size_t indexOfPair = 0;
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itNodePairs = remoteCallHandle->mActionInfo.getNodePairInfo().begin();
+ itNodePairs != remoteCallHandle->mActionInfo.getNodePairInfo().end(); ++itNodePairs, indexOfPair++) {
+ varHandle.mData[indexOfPair] = &paResponse->results[indexOfPair].value;
+ }
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Reading for FB %s in client %s failed because the response size is %u but the FB has %u values to read\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ paResponse->resultsSize, remoteCallHandle->mActionInfo.getNoOfNodePairs());
+ varHandle.mFailed = true;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Reading for FB %s in client %s failed. Error: %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ UA_StatusCode_name(paResponse->responseHeader.serviceResult));
+ varHandle.mFailed = true;
+ }
+
+ remoteCallHandle->mActionInfo.getLayer().recvData(static_cast<const void *>(&varHandle), 0);
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->interruptCommFB(&remoteCallHandle->mActionInfo.getLayer());
+ remoteCallHandle->mActionInfo.getLayer().triggerNewEvent();
+ delete remoteCallHandle;
+}
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::writeAsyncCallback(UA_Client *, void *paUserdata, UA_UInt32, UA_WriteResponse *paResponse) { //NOSONAR
+ UA_RemoteCallHandle *remoteCallHandle = static_cast<UA_RemoteCallHandle*>(paUserdata);
+ remoteCallHandle->mClientInformation.removeAsyncCall();
+ COPC_UA_Helper::UA_RecvVariable_handle varHandle(0);
+ if(UA_STATUSCODE_GOOD == paResponse->responseHeader.serviceResult) {
+ if(paResponse->resultsSize == remoteCallHandle->mActionInfo.getNoOfNodePairs()) {
+ for(size_t i = 0; i < paResponse->resultsSize; i++) {
+ if(UA_STATUSCODE_GOOD != paResponse->results[i]) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Writing for FB %s in client %s failed because the response for index %u has status %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(), i,
+ UA_StatusCode_name(paResponse->results[i]));
+ varHandle.mFailed = true;
+ break;
+ }
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Writing for FB %s in client %s failed because the response size is %u but the FB has %u values to write\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ paResponse->resultsSize, remoteCallHandle->mActionInfo.getNoOfNodePairs());
+ varHandle.mFailed = true;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Writing for FB %s in client %s failed. Error: %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ UA_StatusCode_name(paResponse->responseHeader.serviceResult));
+ varHandle.mFailed = true;
+ }
+
+ remoteCallHandle->mActionInfo.getLayer().recvData(static_cast<const void *>(&varHandle), 0);
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->interruptCommFB(&remoteCallHandle->mActionInfo.getLayer());
+ remoteCallHandle->mActionInfo.getLayer().triggerNewEvent();
+
+ delete remoteCallHandle;
+}
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::callMethodAsyncCallback(UA_Client *, void *paUserdata, UA_UInt32,
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ void *paResponse_) {
+ UA_CallResponse *paResponse = static_cast<UA_CallResponse*>(paResponse_);
+#else
+ UA_CallResponse *paResponse) {
+#endif
+
+ bool somethingFailed = false;
+
+ UA_RemoteCallHandle *remoteCallHandle = static_cast<UA_RemoteCallHandle*>(paUserdata);
+ remoteCallHandle->mClientInformation.removeAsyncCall();
+
+ if(UA_STATUSCODE_GOOD == paResponse->responseHeader.serviceResult) {
+ if(1 == paResponse->resultsSize) {
+ if(UA_STATUSCODE_GOOD == paResponse->results[0].statusCode) {
+
+ if(remoteCallHandle->mActionInfo.getLayer().getCommFB()->getNumRD() != paResponse->results[0].outputArgumentsSize) {
+ DEVLOG_ERROR(
+ "[OPC UA CLIENT]: Calling for FB %s in client %s failed because the number of RD connectors of the client %u does not match the number of returned values %u from the method call\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getNumRD(), paResponse->results->outputArgumentsSize);
+ somethingFailed = true;
+ } else {
+ for(size_t i = 0; i < paResponse->results->inputArgumentResultsSize; i++) {
+ if(UA_STATUSCODE_GOOD != paResponse->results->inputArgumentResults[i]) {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Calling for FB %s in client %s failed because the input response for index %u has status %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(), i,
+ UA_StatusCode_name(paResponse->results->inputArgumentResults[i]));
+ somethingFailed = true;
+ break;
+ }
+ }
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Calling for FB %s in client %s failed with the specific error: %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ UA_StatusCode_name(paResponse->results->statusCode));
+ somethingFailed = true;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Calling for FB %s in client %s failed because the response size is %u, different from 1\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ paResponse->resultsSize);
+ somethingFailed = true;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA CLIENT]: Calling for FB %s in client %s failed with the main error: %s\n",
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->getInstanceName(), remoteCallHandle->mActionInfo.getEndpoint().getValue(),
+ UA_StatusCode_name(paResponse->responseHeader.serviceResult));
+ somethingFailed = true;
+ }
+ size_t outputSize = 0;
+ if(!somethingFailed) {
+ outputSize = paResponse->results->outputArgumentsSize;
+ }
+ //call layer even when it failed, to let the FB know
+ COPC_UA_Helper::UA_SendVariable_handle varHandle(outputSize);
+ varHandle.mFailed = somethingFailed;
+
+ if(!varHandle.mFailed) {
+ for(size_t i = 0; i < outputSize; i++) {
+ varHandle.mData[i] = &paResponse->results->outputArguments[i];
+ }
+ }
+
+ remoteCallHandle->mActionInfo.getLayer().recvData(static_cast<const void *>(&varHandle), 0);
+ remoteCallHandle->mActionInfo.getLayer().getCommFB()->interruptCommFB(&remoteCallHandle->mActionInfo.getLayer());
+ remoteCallHandle->mActionInfo.getLayer().triggerNewEvent();
+
+ delete remoteCallHandle;
+}
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::subscriptionValueChangedCallback(UA_Client *, UA_UInt32, void *, UA_UInt32, void *paMonContext, //NOSONAR
+ UA_DataValue *paData) { //NOSONAR
+ if(paData->hasValue) {
+
+ UA_SubscribeContext_Handle *variableContextHandle = static_cast<UA_SubscribeContext_Handle *>(paMonContext);
+
+ COPC_UA_Helper::UA_RecvVariable_handle handleRecv(1);
+
+ const UA_Variant *value = &paData->value;
+ handleRecv.mData[0] = value;
+ handleRecv.mOffset = variableContextHandle->mPortIndex;
+
+ forte::com_infra::EComResponse retVal = variableContextHandle->mActionInfo.getLayer().recvData(static_cast<const void *>(&handleRecv), 0);
+
+ if(forte::com_infra::e_Nothing != retVal) {
+ variableContextHandle->mActionInfo.getLayer().getCommFB()->interruptCommFB(&variableContextHandle->mActionInfo.getLayer());
+ variableContextHandle->mActionInfo.getLayer().triggerNewEvent();
+ }
+ }
+}
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::deleteSubscriptionCallback(UA_Client *, UA_UInt32 paSubscriptionId, void *paSubscriptionContext) { //NOSONAR
+ DEVLOG_INFO("[OPC UA CLIENT]: Subscription Id %u was deleted in client with endpoint %s\n", paSubscriptionId,
+ static_cast<CUA_ClientInformation*>(paSubscriptionContext)->mEndpointUrl.getValue());
+ static_cast<CUA_ClientInformation*>(paSubscriptionContext)->resetSubscription(false);
+}
+
+void CUA_ClientInformation::CUA_RemoteCallbackFunctions::clientStateChangeCallback(UA_Client *, UA_ClientState paClientState) {
+ //Don't do anything here. If the subscription is deleted, deleteSubscriptionCallback will be called and handled there
+ switch(paClientState){
+ case UA_CLIENTSTATE_DISCONNECTED:
+ DEVLOG_INFO("[OPC UA CLIENT]: The client is disconnected\n");
+ break;
+ case UA_CLIENTSTATE_CONNECTED:
+ DEVLOG_INFO("[OPC UA CLIENT]: A TCP connection to the server is open\n");
+ break;
+ case UA_CLIENTSTATE_SECURECHANNEL:
+ DEVLOG_INFO("[OPC UA CLIENT]: A SecureChannel to the server is open\n");
+ break;
+ case UA_CLIENTSTATE_SESSION:
+ DEVLOG_INFO("[OPC UA CLIENT]: A session with the server is open\n");
+ break;
+ case UA_CLIENTSTATE_SESSION_RENEWED:
+ DEVLOG_INFO("[OPC UA CLIENT]: A session with the server is open (renewed)\n");
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA CLIENT]: Unknown state of client %d\n", paClientState);
+ }
+ return;
+}
diff --git a/src/modules/opc_ua/opcua_client_information.h b/src/modules/opc_ua/opcua_client_information.h
new file mode 100644
index 0000000..0bed3c5
--- /dev/null
+++ b/src/modules/opc_ua/opcua_client_information.h
@@ -0,0 +1,435 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef SRC_MODULES_OPC_UA_OPCUA_CLIENT_INFORMATION_H_
+#define SRC_MODULES_OPC_UA_OPCUA_CLIENT_INFORMATION_H_
+
+#include "opcua_action_info.h"
+#include <fortelist.h>
+#include <forte_sync.h>
+#include <criticalregion.h>
+
+/**
+ * Contains all the information needed for a client to execute remote calls. It's the only class tha access
+ * the OPC UA library for remote calls
+ */
+class CUA_ClientInformation {
+ public:
+
+ /**
+ * Constructor of the class
+ * @param paEndpoint Endpoint of the remote
+ */
+ explicit CUA_ClientInformation(const CIEC_STRING &paEndpoint);
+
+ /**
+ * Destructor of the class
+ */
+ ~CUA_ClientInformation();
+
+ /**
+ * Initialize the client
+ * @return True if no error occurred, false otherwise
+ */
+ bool configureClient();
+
+ /**
+ * Removes all allocated information and sets the client to its default state
+ */
+ void uninitializeClient();
+
+ /**
+ * Try to connect to the remote endpoint and initialized all actions assigned
+ * @return True if all actions were initialized, false otherwise
+ */
+ bool handleClientState();
+
+ /**
+ * Call the OPC UA API to execute all the asyncrhonous calls
+ * @return True if no error ocurred, false otherwise
+ */
+ bool executeAsyncCalls();
+
+ /**
+ * Check if the client needs another async call. If a subscription action is present, this will stay true
+ * @return True if a new async call is needed, false otherwise
+ */
+ inline bool isAsyncNeeded() {
+ return (0 != mMissingAsyncCalls);
+ }
+
+ /**
+ * Check if an action is present in the client
+ * @return True if an action is present in the client, false otherwise
+ */
+ bool hasActions() {
+ return !mActionsReferencingIt.isEmpty();
+ }
+
+ /**
+ * Check if at least one action was initialized in the last iteration of handleClientState()
+ * @return True if at least one action was initialized in the last iteration of handleClientState(), false otherwise
+ */
+ bool someActionWasInitialized() {
+ return mSomeActionWasInitialized;
+ }
+
+ /**
+ * Getter of the endpoint
+ * @return Endpoint of the clinet
+ */
+ const CIEC_STRING& getEndpoint() {
+ return mEndpointUrl;
+ }
+
+ /**
+ * Getter of the mutex of the client
+ * @return Mutex of the clinet
+ */
+ inline CSyncObject& getMutex() {
+ return mClientMutex;
+ }
+
+ /**
+ * Place the request to the OPC UA API for an asynchronous read of a remote variable
+ * @param paActionInfo Action to be performed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeRead(CActionInfo& paActionInfo);
+
+ /**
+ * Place the request to the OPC UA API for an asynchronous write of a remote variable
+ * @param paActionInfo Action to be performed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeWrite(CActionInfo& paActionInfo);
+
+ /**
+ * Place the request to the OPC UA API for an asynchronous method call of a remote variable
+ * @param paActionInfo Action to be performed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeCallMethod(CActionInfo& paActionInfo);
+
+ /**
+ * Add an action to the client
+ * @param paActionInfo Action to be added
+ */
+ void addAction(CActionInfo& paActionInfo);
+
+ /**
+ * Remove an action from the client
+ * @param paActionInfo Action to be removed
+ */
+ void removeAction(CActionInfo& paActionInfo);
+
+ /**
+ * Check if an action was already initialized in the client
+ * @param paActionInfo Action to be checked
+ * @return True if the action was already initialized, false otherwise
+ */
+ bool isActionInitialized(CActionInfo& paActionInfo);
+
+ /**
+ * Class containing all remote callback functions that are called by the OPC UA stack
+ */
+ class CUA_RemoteCallbackFunctions {
+ public:
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ //not used
+#else
+ /**
+ * Common async callback in the v0.3.0 of open62541
+ */
+ static void anyAsyncCallback(UA_Client *paClient, void *paUserdata, UA_UInt32 paRequestId, void *paResponse, const UA_DataType *paResponseType);
+#endif
+ /**
+ * Async callback for read action
+ */
+ static void readAsyncCallback(UA_Client *paClient, void *paUserdata, UA_UInt32 paRequestId, UA_ReadResponse *paResponse);
+
+ /**
+ * Async callback for write action
+ */
+ static void writeAsyncCallback(UA_Client *paClient, void *paUserdata, UA_UInt32 paRequestId, UA_WriteResponse *paResponse);
+
+ /**
+ * Async callback for method call action
+ */
+ static void callMethodAsyncCallback(UA_Client *paClient, void *paUserdata, UA_UInt32 paRequestId,
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ void *paResponse);
+#else
+ UA_CallResponse *paResponse);
+#endif
+
+ /**
+ * Async callback for subscription action
+ */
+ static void subscriptionValueChangedCallback(UA_Client *paClient, UA_UInt32 paSubId, void *paSubContext, UA_UInt32 paMonId, void *paMonContext,
+ UA_DataValue *paValue);
+
+ /**
+ * Callback when the subscription (one for all monitored items) is deleted
+ */
+ static void deleteSubscriptionCallback(UA_Client *paClient, UA_UInt32 paSubscriptionId, void *paSubscriptionContext);
+
+ /**
+ * Function called when the state of the client changed
+ */
+ static void clientStateChangeCallback(UA_Client *paClient, UA_ClientState paClientState);
+ };
+
+ private:
+
+ /**
+ * this is the same structure as UA_VariableContext_Handle in localhandler, but couldn't find where to put without copying
+ * since there's always some include issue
+ */
+ struct UA_SubscribeContext_Handle {
+ UA_SubscribeContext_Handle(CActionInfo& paActionInfo, size_t paPortIndex) :
+ mActionInfo(paActionInfo), mPortIndex(paPortIndex) {
+ }
+
+ //default copy constructor should be enough
+
+ bool operator==(UA_SubscribeContext_Handle const& paRightObject) const {
+ return (&mActionInfo == &paRightObject.mActionInfo && mPortIndex == paRightObject.mPortIndex);
+ }
+
+ CActionInfo& mActionInfo;
+ size_t mPortIndex;
+ };
+
+ /**
+ * Encapsulation of the information needed for a monitoring item (a variable subsription)
+ */
+ struct UA_MonitoringItemInfo {
+ UA_MonitoringItemInfo(const UA_SubscribeContext_Handle& paVariableInfo, UA_UInt32 paMonitoringItemId = 0) :
+ mVariableInfo(paVariableInfo), mMonitoringItemId(paMonitoringItemId) {
+ }
+
+ //default copy constructor should be enough
+
+ bool operator==(UA_MonitoringItemInfo const& paRightObject) const {
+ return (mVariableInfo == paRightObject.mVariableInfo && mMonitoringItemId == paRightObject.mMonitoringItemId);
+ }
+
+ UA_SubscribeContext_Handle mVariableInfo;
+ UA_UInt32 mMonitoringItemId;
+ };
+
+ /**
+ * Encapsulation of the information needed the subscription. In a subscription you can have many monitored items. We have only one sunscription,
+ * and put all monitored items in it
+ */
+ struct UA_subscriptionInfo {
+ UA_subscriptionInfo() :
+ mSubscriptionId(0) {
+ }
+
+ UA_UInt32 mSubscriptionId;
+ CSinglyLinkedList<UA_MonitoringItemInfo> mMonitoredItems;
+ };
+
+ /**
+ * For read, write and call method, this encpasulation is used as a context to know who executed the action
+ */
+ class UA_RemoteCallHandle {
+ public:
+ UA_RemoteCallHandle(CActionInfo& paActionInfo, CUA_ClientInformation& paClientInformation) :
+ mActionInfo(paActionInfo), mClientInformation(paClientInformation) {
+ }
+ ~UA_RemoteCallHandle() {
+
+ }
+
+ CActionInfo& mActionInfo;
+ CUA_ClientInformation& mClientInformation;
+ private:
+ UA_RemoteCallHandle(const UA_RemoteCallHandle &paObj);
+ UA_RemoteCallHandle& operator=(const UA_RemoteCallHandle& other);
+ };
+
+ /**
+ * Try to connect the client
+ * @return True if the connection succeeded, false otherwise
+ */
+ bool connectClient();
+
+ /**
+ * Initialize all actions in the client.
+ * @return True if all actions were initialized, false otherwise
+ */
+ bool initializeAllActions();
+
+ /**
+ * Initialize an action. It looks for the remote node and prepares for future calls
+ * @param paActionInfo Action to be initialized
+ * @return True if no error occurred, false otherwise
+ */
+ bool initializeAction(CActionInfo& paActionInfo);
+
+ /**
+ * A method call method needs special care. This function takes care of it
+ * @param paActionInfo Method call action to be initialized
+ * @return True if no error occurred, false otherwise
+ */
+ bool initializeCallMethod(CActionInfo& paActionInfo);
+
+ /**
+ * A subscription needs special care. This function takes care of it
+ * @param paActionInfo Subscribe action to be initialized
+ * @return True if no error occurred, false otherwise
+ */
+ bool initializeSubscription(CActionInfo& paActionInfo);
+
+ /**
+ * Allocate the memory to store the subscription information and create the subscription in the OPC UA stack
+ * @return True if no error occurred, false otherwise
+ */
+ bool allocAndCreateSubscription();
+
+ /**
+ * Create the subscription in the OPC UA stack
+ * @return True if no error occurred, false otherwise
+ */
+ bool createSubscription();
+
+ /**
+ * Add a monitoring item to the OPC UA stack
+ * @param paMonitoringInfo Contains the needed information to create the monitoring item in the OPC UA Stack
+ * @param paNodeId NodeId of the variable to monitor
+ * @return True if no error occurred, false otherwise
+ */
+ bool addMonitoringItem(UA_MonitoringItemInfo& paMonitoringInfo, UA_NodeId& paNodeId);
+
+ /**
+ * Increments the amount of missing async calls to be performed. A subscription keeps always the missing calls at least at
+ */
+ void addAsyncCall();
+
+ /**
+ * Removes the amount of missing async calls to be performed
+ */
+ void removeAsyncCall();
+
+ /**
+ * Uninitialze an action
+ * @param paActionInfo Action to be uninitialized
+ */
+ void uninitializeAction(CActionInfo& paActionInfo);
+
+ /**
+ * Uninitialze a subscription action
+ * @param paActionInfo Action to be uninitialized
+ */
+ void uninitializeSubscription(CActionInfo& paActionInfo);
+
+ /**
+ * Reset the subscription information.
+ * @param paDeleteSubscription The subscription must be deleted from the OPC UA stack
+ */
+ void resetSubscription(bool paDeleteSubscription);
+
+ /**
+ * Copy constructor is private and not defined to avoid its usage
+ */
+ CUA_ClientInformation(const CUA_ClientInformation &paObj);
+
+ /**
+ * Assignment operator is private and not defined to avoid its usage
+ */
+ CUA_ClientInformation& operator=(const CUA_ClientInformation& other);
+
+ /**
+ * Endpoint of the remote
+ */
+ CIEC_STRING mEndpointUrl;
+
+ /**
+ * Handler of the OPC UA stack client
+ */
+ UA_Client *mClient;
+
+ /**
+ * Mutex of the client
+ */
+ CSyncObject mClientMutex;
+
+ /**
+ * Information needed for subscription
+ */
+ UA_subscriptionInfo *mSubscriptionInfo;
+
+ /**
+ * Amount of missing async calls to be performed. Read, write and method call add one when they are called, and reduced in the callbacks
+ * Subscription increases one when created, and only reduced when no more subscription are present
+ */
+ size_t mMissingAsyncCalls;
+
+ /**
+ * List of actions that use this client
+ */
+ CSinglyLinkedList<CActionInfo *> mActionsReferencingIt;
+
+ /**
+ * List of actions that need to be initialized
+ */
+ CSinglyLinkedList<CActionInfo *> mActionsToBeInitialized;
+
+ /**
+ * Indicates if the client should wait scmConnectionRetryTimeoutNano before trying to reconnect. This is true when an action fails to connect once
+ */
+ bool mNeedsReconnection;
+
+ /**
+ * Indicates if the client should wait scmInitializeActionRetryNano before trying to initialize the actions. This is true when an action fails, so
+ * it doesn't fail too often. If an action is added after another fail, this becomes false, so the new action can be initialized and doesn't have to wait
+ */
+ bool mWaitToInitializeActions;
+
+ /**
+ * Store the time when the connection last failed
+ */
+ uint_fast64_t mLastReconnectionTry;
+
+ /**
+ * Store the time when an action last failed to initialized
+ */
+ uint_fast64_t mLastActionInitializationTry;
+
+ /**
+ * True if an action was initialized in the last iteration of handleClientState()
+ */
+ bool mSomeActionWasInitialized;
+
+ /**
+ * Time in nanoseconds that the client should wait before another reconnection try
+ */
+ static const uint_fast64_t scmConnectionRetryTimeoutNano = 8E9; //8s
+
+ /**
+ * Time in nanoseconds that the client should wait before try to initialize the actions
+ */
+ static const uint_fast64_t scmInitializeActionRetryNano = 3E9; //3s
+
+ /**
+ * Time in milliseconds for connection timeout configured in the OPC UA stack client
+ */
+ static const UA_UInt32 scmClientTimeoutInMilli = 5E3; //5s
+
+};
+
+#endif /* SRC_MODULES_OPC_UA_OPCUA_CLIENT_INFORMATION_H_ */
diff --git a/src/modules/opc_ua/opcua_handler.cpp b/src/modules/opc_ua/opcua_handler.cpp
deleted file mode 100644
index b223223..0000000
--- a/src/modules/opc_ua/opcua_handler.cpp
+++ /dev/null
@@ -1,869 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>,
- * fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Florian Froschermeier
- * - initial integration of the OPC-UA protocol
- * Stefan Profanter
- * - refactoring and adaption to new concept
- *******************************************************************************/
-
-#include "opcua_handler.h"
-#include "opcua_client_handler.h"
-#include "../../core/devexec.h"
-#include "../../core/iec61131_functions.h"
-#include "../../core/cominfra/basecommfb.h"
-#include <criticalregion.h>
-#include <forte_printer.h>
-
-#ifndef FORTE_COM_OPC_UA_CUSTOM_HOSTNAME
-#include <sockhand.h>
-#endif
-
-using namespace forte::com_infra;
-
-DEFINE_HANDLER(COPC_UA_Handler);
-
-const char *LogsLevelNames[6] = {"trace", "debug", "info", "warning", "error", "fatal"};
-const char *LogsCategoryNames[6] = {"network", "channel", "session", "server", "client", "userland"};
-
-struct UA_ClientEndpointMap {
- UA_Client *client;
- char *endpointUrl;
- CSyncObject *clientMutex;
-};
-
-void UA_Log_Forte(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args) {
- char tmpStr[400];
- forte_snprintf(tmpStr, 400, "[OPC UA] %s/%s\t", LogsLevelNames[level], LogsCategoryNames[category]);
- char *start = &tmpStr[strlen(tmpStr)];
-
- vsprintf(start, msg, args);
-
- size_t len = strlen(tmpStr);
- tmpStr[len] = '\n';
- tmpStr[len + 1] = '\0';
-
- switch (level) {
- case UA_LOGLEVEL_TRACE:
- case UA_LOGLEVEL_DEBUG:
- DEVLOG_DEBUG(tmpStr);
- break;
- case UA_LOGLEVEL_INFO:
- DEVLOG_INFO(tmpStr);
- break;
- case UA_LOGLEVEL_WARNING:
- DEVLOG_WARNING(tmpStr);
- break;
- case UA_LOGLEVEL_ERROR:
- case UA_LOGLEVEL_FATAL:
- DEVLOG_ERROR(tmpStr);
- break;
- }
-}
-
-void COPC_UA_Handler::configureUAServer(TForteUInt16 UAServerPort) {
-
- char name[255];
- forte_snprintf(name, 255, "forte_%d", UAServerPort);
-
- uaServerConfig = UA_ServerConfig_new_minimal(UAServerPort, NULL);
- uaServerConfig->logger = UA_Log_Forte;
-
-# ifdef FORTE_COM_OPC_UA_MULTICAST
- uaServerConfig->applicationDescription.applicationType = UA_APPLICATIONTYPE_DISCOVERYSERVER;
- // hostname will be added by mdns library
- UA_String_deleteMembers(&uaServerConfig->mdnsServerName);
- uaServerConfig->mdnsServerName = UA_String_fromChars(name);
-# endif
-
- char hostname[256];
-#ifdef FORTE_COM_OPC_UA_CUSTOM_HOSTNAME
- forte_snprintf(hostname, 255, "%s-%s", FORTE_COM_OPC_UA_CUSTOM_HOSTNAME, name);
-#else
- if(gethostname(hostname, 255) == 0) {
- size_t offset = strlen(hostname);
- size_t nameLen = strlen(name);
- if (offset + nameLen +1 > 255) {
- offset = MAX(255-nameLen-1, (size_t)0);
- }
- forte_snprintf(hostname+offset, 255-offset, "-%s", name);
- }
-#endif
-
- char uri[255];
- forte_snprintf(uri, 255, "org.eclipse.4diac.%s", hostname);
-
- // delete pre-initialized values
- UA_String_deleteMembers(&uaServerConfig->applicationDescription.applicationUri);
- UA_LocalizedText_deleteMembers(&uaServerConfig->applicationDescription.applicationName);
-
- uaServerConfig->applicationDescription.applicationUri = UA_String_fromChars(uri);
- uaServerConfig->applicationDescription.applicationName.locale = UA_STRING_NULL;
- uaServerConfig->applicationDescription.applicationName.text = UA_String_fromChars(hostname);
-
- for (size_t i=0; i<uaServerConfig->endpointsSize; i++) {
- UA_String_deleteMembers(&uaServerConfig->endpoints[i].endpointDescription.server.applicationUri);
- UA_LocalizedText_deleteMembers(&uaServerConfig->endpoints[i].endpointDescription.server.applicationName);
-
- UA_String_copy(&uaServerConfig->applicationDescription.applicationUri,
- &uaServerConfig->endpoints[i].endpointDescription.server.applicationUri);
-
- UA_LocalizedText_copy(&uaServerConfig->applicationDescription.applicationName,
- &uaServerConfig->endpoints[i].endpointDescription.server.applicationName);
- }
-
- // TODO set server capabilities
- // See http://www.opcfoundation.org/UA/schemas/1.03/ServerCapabilities.csv
- //config.serverCapabilitiesSize = 1;
- //UA_String caps = UA_String_fromChars("LDS");
- //config.serverCapabilities = ∩︀
-}
-
-#ifdef FORTE_COM_OPC_UA_MULTICAST
-
-static void serverOnNetworkCallback(const UA_ServerOnNetwork *serverOnNetwork, UA_Boolean isServerAnnounce, UA_Boolean isTxtReceived, void* data) {
- COPC_UA_Handler* handler = static_cast<COPC_UA_Handler*>(data);
-
- const UA_String ownDiscoverUrl = handler->getDiscoveryUrl();
-
- if (UA_String_equal(&serverOnNetwork->discoveryUrl, &ownDiscoverUrl)) {
- // skip self
- return;
- }
-
- if (!isTxtReceived)
- return; // we wait until the corresponding TXT record is announced.
-
- DEVLOG_DEBUG("OPC UA: mDNS %s '%.*s' with url '%.*s'\n",isServerAnnounce?"announce":"remove", serverOnNetwork->serverName.length, serverOnNetwork->serverName.data,
- serverOnNetwork->discoveryUrl.length, serverOnNetwork->discoveryUrl.data);
-
- // check if server is LDS, and then register
- UA_String ldsStr = UA_String_fromChars("LDS");
- for (unsigned int i=0; i<serverOnNetwork->serverCapabilitiesSize; i++) {
- if (UA_String_equal(&serverOnNetwork->serverCapabilities[i], &ldsStr)) {
- if (isServerAnnounce)
- handler->registerWithLds(&serverOnNetwork->discoveryUrl);
- else
- handler->removeLdsRegister(&serverOnNetwork->discoveryUrl);
- break;
- }
- }
- UA_String_deleteMembers(&ldsStr);
-}
-
-void COPC_UA_Handler::registerWithLds(const UA_String *discoveryUrl) {
- // check if already registered with the given LDS
- for (CSinglyLinkedList<const char*>::Iterator iter = registeredWithLds.begin(); iter != registeredWithLds.end(); ++iter) {
- if (strncmp((char*)discoveryUrl->data, *iter, discoveryUrl->length) == 0)
- return;
- }
-
- // will be freed when removed from list
- char *discoveryUrlChar = (char*)forte_malloc(sizeof(char)*discoveryUrl->length+1);
- memcpy(discoveryUrlChar, discoveryUrl->data, discoveryUrl->length);
- discoveryUrlChar[discoveryUrl->length] = 0;
-
- registeredWithLds.pushFront(discoveryUrlChar);
-
- DEVLOG_INFO("OPC UA: Registering with LDS '%.*s'\n", discoveryUrl->length, discoveryUrl->data);
- UA_StatusCode retVal = UA_Server_addPeriodicServerRegisterCallback(uaServer, NULL, discoveryUrlChar , 10 * 60 * 1000, 500, NULL);
- if (retVal != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not register with LDS. Error: %s\n", UA_StatusCode_name(retVal));
- }
-}
-
-void COPC_UA_Handler::removeLdsRegister(const UA_String *discoveryUrl) {
- // check if already registered with the given LDS
- CSinglyLinkedList<const char*>::Iterator itRunner = registeredWithLds.begin();
- CSinglyLinkedList<const char*>::Iterator itRefNode = registeredWithLds.end();
-
- // remove entry from list
- while(itRunner != registeredWithLds.end()){
- if (strncmp((char*)discoveryUrl->data, *itRunner, discoveryUrl->length) == 0) {
- if(itRefNode == registeredWithLds.end()){
- registeredWithLds.popFront();
- }
- else{
- registeredWithLds.eraseAfter(itRefNode);
- }
- // dirty cast to remove const
- forte_free((void *)(*itRunner));
- break;
- }
- itRefNode = itRunner;
- ++itRunner;
- }
-
-}
-
-#endif
-
-COPC_UA_Handler::COPC_UA_Handler(CDeviceExecution& pa_poDeviceExecution) : CExternalEventHandler(pa_poDeviceExecution),
- uaServer(0), uaServerConfig(0), uaServerRunningFlag(UA_FALSE), getNodeForPathMutex(), nodeCallbackHandles(), clients(),
-#ifdef FORTE_COM_OPC_UA_MULTICAST
- registeredWithLds(),
-#endif
- nodeLayerReferences()
-{
-
-}
-
-COPC_UA_Handler::~COPC_UA_Handler() {
- stopServer();
- end();
-
- if(0 != uaServer){
- UA_Server_delete(uaServer);
- }
- UA_ServerConfig_delete(uaServerConfig);
-
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter = clients.begin(); iter != clients.end(); ++iter) {
- UA_Client_disconnect((*iter)->client);
- UA_Client_delete((*iter)->client);
- forte_free((*iter)->endpointUrl);
- forte_free((*iter)->clientMutex);
- forte_free((*iter));
- }
- clients.clearAll();
-
- for (CSinglyLinkedList<struct UA_NodeCallback_Handle *>::Iterator iter = nodeCallbackHandles.begin(); iter != nodeCallbackHandles.end(); ++iter)
- forte_free(*iter);
- nodeCallbackHandles.clearAll();
- {
- CCriticalRegion criticalRegion(mNodeLayerMutex);
- for(CSinglyLinkedList<struct ReferencedNodeByLayer *>::Iterator iter = nodeLayerReferences.begin(); iter != nodeLayerReferences.end(); ++iter){
- // dirty cast to remove const
- UA_NodeId_delete((UA_NodeId*) (void *) ((*iter)->nodeId));
- forte_free((*iter));
- }
- nodeLayerReferences.clearAll();
- }
-
-#ifdef FORTE_COM_OPC_UA_MULTICAST
- for (CSinglyLinkedList<const char *>::Iterator iter = registeredWithLds.begin(); iter != registeredWithLds.end(); ++iter) {
- // dirty cast to remove const
- forte_free((void *)(*iter));
- }
- registeredWithLds.clearAll();
-#endif
-}
-
-void COPC_UA_Handler::run() {
- DEVLOG_INFO("OPC UA: Starting OPC UA Server: opc.tcp://localhost:%d\n", FORTE_COM_OPC_UA_PORT);
-
- if (uaServerConfig == NULL) {
- configureUAServer(FORTE_COM_OPC_UA_PORT);
- uaServer = UA_Server_new(uaServerConfig);
- }
-
-#ifdef FORTE_COM_OPC_UA_MULTICAST
-# ifndef UA_ENABLE_DISCOVERY_MULTICAST
-# error open62541 needs to be built with UA_ENABLE_DISCOVERY_MULTICAST=ON
-# else
- UA_Server_setServerOnNetworkCallback(uaServer, serverOnNetworkCallback, this);
-# endif
-#endif
- mServerStarted.inc();
- UA_StatusCode retVal = UA_Server_run(uaServer, &uaServerRunningFlag); // server keeps iterating as long as running is true;
- if (retVal != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Server exited with error: %s\n", UA_StatusCode_name(retVal));
- } else {
- DEVLOG_INFO("OPC UA: Server successfully stopped\n");
- }
-}
-
-void COPC_UA_Handler::enableHandler(void) {
- startServer();
-}
-
-void COPC_UA_Handler::disableHandler(void) {
- COPC_UA_Handler::stopServer();
- end();
-}
-
-void COPC_UA_Handler::setPriority(int) {
-
- //currently we are doing nothing here.
-}
-
-int COPC_UA_Handler::getPriority(void) const {
- //the same as for setPriority
- return 0;
-}
-
-void COPC_UA_Handler::startServer() {
- if (uaServerRunningFlag)
- return;
- uaServerRunningFlag = UA_TRUE;
-
- if (!isAlive()) {
- start();
- mServerStarted.waitIndefinitely();
- mServerStarted.inc(); //in case someone else wants to wait
- }
-
-}
-
-void COPC_UA_Handler::stopServer() {
- uaServerRunningFlag = UA_FALSE;
-}
-
-UA_StatusCode
-COPC_UA_Handler::getNodeForPath(UA_NodeId **foundNodeId, const char *nodePathConst, bool createIfNotFound,
- const UA_NodeId *startingNode, const UA_NodeId *newNodeType, UA_NodeId **parentNodeId,
- UA_Client *clientInitialized, CSinglyLinkedList<UA_NodeId *> *nodeIdsAlongPath) {
- *foundNodeId = NULL;
- CIEC_STRING nodePathString(nodePathConst);
- char* nodePath = nodePathString.getValue();
-
-
- // remove tailing slash
- size_t pathLen = strlen(nodePath);
- while (pathLen && nodePath[pathLen - 1] == '/') {
- nodePath[pathLen - 1] = 0;
- pathLen--;
- }
- if (pathLen == 0) {
- forte_free(nodePath);
- return UA_STATUSCODE_BADINVALIDARGUMENT;
- }
-
- // count number of folders in node path
- unsigned int folderCnt = 0;
- char *c = nodePath;
- while (*c) {
- if (*c == '/')
- folderCnt++;
- c++;
- }
-
- DEVLOG_ERROR_VAR(CIEC_STRING fullPathString(nodePath));
- char *tok = strtok(nodePath, "/");
- if (startingNode == NULL || (startingNode->namespaceIndex == 0 && startingNode->identifier.numeric == UA_NS0ID_OBJECTSFOLDER)) {
- if (strcmp(tok, "Objects") != 0 && strcmp(tok, "0:Objects") != 0) {
- DEVLOG_ERROR("OPC UA: Node path '%s' has to start with '/Objects'\n", fullPathString.getValue());
- return UA_STATUSCODE_BADINVALIDARGUMENT;
- }
- folderCnt--; //remaining count without Objects folder
- tok = strtok(NULL, "/"); // skip objects folder
- }
-
- startServer();
-
- // for every folder (which is a BrowsePath) we want to get the node id
- UA_BrowsePath *browsePaths = static_cast<UA_BrowsePath *>(UA_Array_new(folderCnt*2, &UA_TYPES[UA_TYPES_BROWSEPATH]));
-
- for (unsigned int i = 0; i < folderCnt; i++) {
- UA_BrowsePath_init(&browsePaths[i]);
- if (startingNode != NULL)
- browsePaths[i].startingNode = *startingNode;
- else
- browsePaths[i].startingNode = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
- browsePaths[i].relativePath.elementsSize = i + 1;
-
- browsePaths[i].relativePath.elements = static_cast<UA_RelativePathElement *>(UA_Array_new(browsePaths[i].relativePath.elementsSize,
- &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]));
-
- for (unsigned int j = 0; j <= i; j++) {
-
- if (j < i) {
- // just copy from before
- UA_RelativePathElement_copy(&browsePaths[i - 1].relativePath.elements[j], &browsePaths[i].relativePath.elements[j]);
- continue;
- }
-
- // the last element is a new one
-
- UA_RelativePathElement_init(&browsePaths[i].relativePath.elements[j]);
- browsePaths[i].relativePath.elements[j].isInverse = UA_FALSE;
-
- // split the qualified name
- char *splitPos = tok;
- while (*splitPos && *splitPos != ':') {
- splitPos++;
- }
-
- // default namespace is 1
- UA_UInt16 ns = 1;
- char *targetName = tok;
-
- if (*splitPos) {
- // namespace given
- ns = static_cast<UA_UInt16>(atoi(tok));
- targetName = ++splitPos;
- }
- browsePaths[i].relativePath.elements[j].targetName = UA_QUALIFIEDNAME_ALLOC(ns, targetName);
- }
- tok = strtok(NULL, "/");
- }
-
- // same browse paths, but inverse reference, to check both directions
- for (unsigned int i = 0; i < folderCnt; i++) {
- UA_BrowsePath_copy(&browsePaths[i], &browsePaths[folderCnt+i]);
- for (unsigned int j = 0; j < browsePaths[folderCnt+i].relativePath.elementsSize; j++) {
- browsePaths[folderCnt+i].relativePath.elements[j].isInverse = !browsePaths[folderCnt+i].relativePath.elements[j].isInverse;
- }
- }
-
- {
- // other thread may currently create nodes for the same path, thus mutex
- CCriticalRegion criticalRegion(this->getNodeForPathMutex);
-
- UA_BrowsePathResult* browsePathsResults = NULL;
-
- if(0 != clientInitialized){
-
- UA_TranslateBrowsePathsToNodeIdsRequest request;
- UA_TranslateBrowsePathsToNodeIdsResponse response;
-
- UA_TranslateBrowsePathsToNodeIdsRequest_init(&request);
-
- request.browsePaths = browsePaths;
- request.browsePathsSize = folderCnt * 2;
-
- response = UA_Client_Service_translateBrowsePathsToNodeIds(clientInitialized, request);
-
- UA_StatusCode retVal = response.responseHeader.serviceResult;
-
- if(retVal != UA_STATUSCODE_GOOD){
- DEVLOG_ERROR("OPC UA: Could not translate browse paths for '%s' to node IDs. Error: %s\n", fullPathString.getValue(), UA_StatusCode_name(retVal));
- }
-
- if(response.resultsSize != folderCnt * 2){
- DEVLOG_ERROR("OPC UA: Could not translate browse paths for '%s' to node IDs. resultSize (%d) != expected count (%d)\n", fullPathString.getValue(), response.resultsSize, folderCnt);
- retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
- }
-
- if(retVal == UA_STATUSCODE_GOOD){
- browsePathsResults = response.results;
- //The following avoids the browsePaths to be deleted when deleting the request. browsePaths are needed later
- request.browsePaths = NULL;
- request.browsePathsSize = 0;
-
- //The following avoids the browsePathsResults to be deleted when deleting the request. browsePathsResults are needed later
- response.results = NULL;
- response.resultsSize = 0;
-
- }
-
- //if an error ocurred, browsePaths and browsePathsResults will be deleted inside
- UA_TranslateBrowsePathsToNodeIdsRequest_deleteMembers(&request);
- UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers(&response);
-
- if(retVal != UA_STATUSCODE_GOOD){
- return retVal;
- }
- }
- else{
- browsePathsResults = static_cast<UA_BrowsePathResult *>(UA_Array_new(folderCnt*2, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]));
- for(unsigned int i = 0; i < folderCnt * 2; i++){
- browsePathsResults[i] = UA_Server_translateBrowsePathToNodeIds(uaServer, &browsePaths[i]);
- }
- }
-
- *foundNodeId = NULL;
- UA_StatusCode retVal = UA_STATUSCODE_GOOD;
-
- int foundFolderOffset = -1;
- if (browsePathsResults[folderCnt - 1].statusCode == UA_STATUSCODE_GOOD) {
- foundFolderOffset = 0;
- } else if (browsePathsResults[folderCnt*2 - 1].statusCode == UA_STATUSCODE_GOOD) {
- foundFolderOffset = folderCnt;
- }
-
- if (foundFolderOffset >= 0) {
- // all nodes exist, so just copy the node ids
- *foundNodeId = UA_NodeId_new();
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset + folderCnt - 1].targets[0].targetId.nodeId, *foundNodeId);
- if (parentNodeId && folderCnt >= 2) {
- *parentNodeId = UA_NodeId_new();
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset + folderCnt - 2].targets[0].targetId.nodeId, *parentNodeId);
- } else if (parentNodeId && !startingNode) {
- *parentNodeId = UA_NodeId_new();
- **parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
- }
- if (nodeIdsAlongPath) {
- for (unsigned int i = 0; i < folderCnt; i++) {
- UA_NodeId *tmp = UA_NodeId_new();
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset + i].targets[0].targetId.nodeId, tmp);
- nodeIdsAlongPath->pushBack(tmp);
- }
- }
- } else if (createIfNotFound) {
- // last node does not exist, and we should create the path
- // skip last node because we already know that it doesn't exist
-
- *foundNodeId = UA_NodeId_new();
- if (parentNodeId && folderCnt >= 2) {
- *parentNodeId = UA_NodeId_new();
- }
- foundFolderOffset = 0;
- // no unsigned, because we need to check for -1
- int i;
- for (i = folderCnt - 2; i >= 0; i--) {
- // find first existing node. Check for isInverse = TRUE
- if (browsePathsResults[i].statusCode == UA_STATUSCODE_GOOD) {
- foundFolderOffset = 0;
- break;
- }
- // and for isInverse = FALSE
- if (browsePathsResults[folderCnt + i].statusCode == UA_STATUSCODE_GOOD) {
- foundFolderOffset = folderCnt;
- break;
- }
- }
- for (; i >= 0; i--) {
- // now we found the first existing node
- if (browsePathsResults[foundFolderOffset+i].targetsSize == 0) {
- DEVLOG_ERROR("OPC UA: Could not translate browse paths for '%s' to node IDs. target size is 0.\n", fullPathString.getValue());
- break;
- }
- if (browsePathsResults[foundFolderOffset+i].targetsSize > 1) {
- DEVLOG_WARNING("OPC UA: The given browse path '%s' has multiple results for the same path. Taking the first result.\n", fullPathString.getValue());
- }
-
- // foundNodeId contains the ID of the parent which exists
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset+i].targets[0].targetId.nodeId, *foundNodeId);
- if (parentNodeId && folderCnt >= 2) {
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset+i].targets[0].targetId.nodeId, *parentNodeId);
- }
- break;
- }
-
- if (i == -1) {
- // no node of the path exists, thus parent is Objects folder
- UA_NodeId_copy(&browsePaths[0].startingNode, *foundNodeId);
- if (parentNodeId && folderCnt >= 2) {
- **parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
- }
- }
- i++;
-
- if (nodeIdsAlongPath) {
- for (int j = 0; j < i; j++) {
- UA_NodeId *tmp = UA_NodeId_new();
- UA_NodeId_copy(&browsePathsResults[foundFolderOffset+j].targets[0].targetId.nodeId, tmp);
- nodeIdsAlongPath->pushBack(tmp);
- }
- }
-
- // create all the nodes on the way
- for (unsigned int j = (unsigned int) i; j < folderCnt; j++) {
-
- // the last browse path contains all relativePath elements.
- UA_QualifiedName *targetName = &browsePaths[folderCnt - 1].relativePath.elements[j].targetName;
-
- UA_ObjectAttributes oAttr;
- UA_ObjectAttributes_init(&oAttr);
- char locale[] = "";
- char *nodeName = static_cast<char *>(forte_malloc(sizeof(char) * (targetName->name.length + 1)));
- memcpy(nodeName, targetName->name.data, targetName->name.length);
- nodeName[targetName->name.length] = 0;
- oAttr.description = UA_LOCALIZEDTEXT_ALLOC(locale, nodeName);
- oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC(locale, nodeName);
- forte_free(nodeName);
-
- UA_NodeId creationType;
- if (newNodeType == NULL || j < folderCnt - 1)
- // the newNodeType is only used for the last node
- creationType = UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE);
- else
- creationType = *newNodeType;
-
- if ((retVal = UA_Server_addObjectNode(uaServer, UA_NODEID_NUMERIC(targetName->namespaceIndex, 0),
- **foundNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
- *targetName, creationType, oAttr, NULL, *foundNodeId)) != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not addObjectNode. Error: %s\n", UA_StatusCode_name(retVal));
- UA_NodeId_delete(*foundNodeId);
- if (parentNodeId && folderCnt >= 2) {
- UA_NodeId_delete(*parentNodeId);
- }
-
- UA_ObjectAttributes_deleteMembers(&oAttr);
- *foundNodeId = NULL;
- break;
- }
-
- if (nodeIdsAlongPath) {
- UA_NodeId *tmp = UA_NodeId_new();
- UA_NodeId_copy(*foundNodeId, tmp);
- nodeIdsAlongPath->pushBack(tmp);
- }
-
- if (j == folderCnt - 1 && parentNodeId) {
- // foundNodeId will be overwritten in next iteration
- UA_NodeId_copy(*foundNodeId, *parentNodeId);
- }
-
-
- UA_ObjectAttributes_deleteMembers(&oAttr);
- }
- }
-
- UA_Array_delete(browsePathsResults, folderCnt * 2, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]);
- UA_Array_delete(browsePaths, folderCnt * 2, &UA_TYPES[UA_TYPES_BROWSEPATH]);
-
- return retVal;
- }
-}
-
-
-CSyncObject *COPC_UA_Handler::getMutexForClient(const UA_Client *client) {
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter = clients.begin(); iter != clients.end(); ++iter) {
- if ((*iter)->client == client)
- return (*iter)->clientMutex;
- }
- return NULL;
-}
-
-UA_Client *COPC_UA_Handler::getClientForEndpoint(const char *endpointUrl, bool createIfNotFound, CSyncObject **clientMutex) {
-
- // remove tailing slash
- size_t urlLen = strlen(endpointUrl);
- while (urlLen && endpointUrl[urlLen - 1] == '/') {
- urlLen--;
- }
-
- for (CSinglyLinkedList<struct UA_ClientEndpointMap *>::Iterator iter = clients.begin(); iter != clients.end(); ++iter) {
- if (strncmp((*iter)->endpointUrl, endpointUrl, urlLen) == 0) {
- if (clientMutex)
- *clientMutex = (*iter)->clientMutex;
- return (*iter)->client;
- }
- }
-
- if (!createIfNotFound)
- return NULL;
-
- struct UA_ClientEndpointMap *clientMap = static_cast<UA_ClientEndpointMap *>(forte_malloc(sizeof(struct UA_ClientEndpointMap)));
-
- UA_ClientConfig config = UA_ClientConfig_default;
- config.timeout = 8000;
-
- UA_Client *client = UA_Client_new(config);
-
- clientMap->client = client;
- clientMap->endpointUrl = static_cast<char *>(forte_malloc(sizeof(char) * (strlen(endpointUrl) + 1)));
- strcpy(clientMap->endpointUrl, endpointUrl);
- clientMap->clientMutex = static_cast<CSyncObject *>(forte_malloc(sizeof(CSyncObject)));
- *clientMap->clientMutex = CSyncObject();
-
- if (clientMutex)
- *clientMutex = clientMap->clientMutex;
-
- // store it in the list so we can delete it to avoid mem leaks
- clients.pushBack(clientMap);
-
- return client;
-}
-
-UA_StatusCode COPC_UA_Handler::createVariableNode(const UA_NodeId *parentNode, const char *varName, const UA_DataType *varType, void *varValue,
- UA_NodeId *returnVarNodeId, bool allowWrite) {
-
-
- // set UA NodeId attributes
- UA_QualifiedName varBrowseName = UA_QUALIFIEDNAME_ALLOC(1, varName);
-
- UA_NodeId typeDefinition = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
-
- // create variable attributes
- UA_VariableAttributes var_attr;
- UA_VariableAttributes_init(&var_attr);
-
- char locale[] = "en-US";
- char description[] = "Digital port of Function Block";
-
- var_attr.dataType = varType->typeId;
- var_attr.valueRank = -1; /* value is a scalar */
- var_attr.displayName = UA_LOCALIZEDTEXT_ALLOC(locale, varName);
- var_attr.description = UA_LOCALIZEDTEXT(locale, description);
- var_attr.userAccessLevel = UA_ACCESSLEVELMASK_READ;
- if (allowWrite)
- var_attr.userAccessLevel |= UA_ACCESSLEVELMASK_WRITE;
- var_attr.accessLevel = var_attr.userAccessLevel;
- UA_Variant_setScalar(&var_attr.value, varValue, varType);
-
- UA_NodeId *returnNodeId = UA_NodeId_new();
-
- // add UA Variable Node to the server address space
- UA_StatusCode retVal = UA_Server_addVariableNode(
- uaServer, // server
- UA_NODEID_NUMERIC(1, 0), // requestedNewNodeId
- *parentNode, // parentNodeId
- UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), // referenceTypeId Reference to the type definition for the variable node
- varBrowseName, // browseName
- typeDefinition, // typeDefinition
- var_attr, // Variable attributes
- NULL, // instantiation callback
- returnNodeId); // return Node Id
-
- UA_QualifiedName_deleteMembers(&varBrowseName);
- UA_LocalizedText_deleteMembers(&var_attr.displayName);
-
- if (retVal == UA_STATUSCODE_GOOD) {
- retVal = UA_NodeId_copy(returnNodeId, returnVarNodeId);
- } else {
- DEVLOG_ERROR("OPC UA: AddressSpace adding Variable Node %s failed. Error: %s\n", varName, UA_StatusCode_name(retVal));
- }
- UA_NodeId_delete(returnNodeId);
- return retVal;
-}
-
-UA_StatusCode COPC_UA_Handler::updateNodeUserAccessLevel(const UA_NodeId *nodeId, UA_Byte newAccessLevel) {
- return UA_Server_writeAccessLevel(uaServer, *nodeId, newAccessLevel);
-}
-
-UA_StatusCode COPC_UA_Handler::createMethodNode(const UA_NodeId *parentNode, UA_UInt16 namespaceIdx, const char *methodName, UA_MethodCallback callback,
- void *callbackHandle, unsigned int inputArgumentsSize, const UA_Argument *inputArguments,
- unsigned int outputArgumentsSize, const UA_Argument *outputArguments, UA_NodeId *returnNodeId) {
-
- UA_MethodAttributes methodAttributes;
- UA_MethodAttributes_init(&methodAttributes);
- methodAttributes.description = UA_LOCALIZEDTEXT_ALLOC("en-US", "Method which can be called");
- methodAttributes.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", methodName);
- methodAttributes.executable = true;
- methodAttributes.userExecutable = true;
- UA_QualifiedName browseName = UA_QUALIFIEDNAME_ALLOC(namespaceIdx, methodName);
- UA_StatusCode retVal = UA_Server_addMethodNode(uaServer,
- UA_NODEID_NUMERIC(1, 0),
- *parentNode,
- UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
- browseName,
- methodAttributes, callback,
- inputArgumentsSize, inputArguments,
- outputArgumentsSize, outputArguments, callbackHandle, returnNodeId);
- UA_QualifiedName_deleteMembers(&browseName);
- UA_LocalizedText_deleteMembers(&methodAttributes.description);
- UA_LocalizedText_deleteMembers(&methodAttributes.displayName);
- return retVal;
-}
-
-UA_StatusCode COPC_UA_Handler::updateNodeValue(const UA_NodeId *nodeId, const CIEC_ANY *data, const UA_TypeConvert *convert) {
- UA_Variant *nodeValue = UA_Variant_new();
- UA_Variant_init(nodeValue);
-
- void *varValue = UA_new(convert->type);
- if (!convert->get(data, varValue)) {
- UA_delete(varValue, convert->type);
- return UA_STATUSCODE_BADUNEXPECTEDERROR;
- }
-
- UA_Variant_setScalarCopy(nodeValue, varValue, convert->type);
- UA_StatusCode retVal = UA_Server_writeValue(uaServer, *nodeId, *nodeValue);
- UA_delete(varValue, convert->type);
- UA_Variant_delete(nodeValue);
- return retVal;
-}
-
-
-UA_StatusCode COPC_UA_Handler::registerNodeCallBack(const UA_NodeId *nodeId, forte::com_infra::CComLayer *comLayer, const struct UA_TypeConvert *convert,
- unsigned int portIndex) {
- // needs new, otherwise it will be removed as soon as registerNodecallBack exits, and thus handle is not valid in the callback
- struct UA_NodeCallback_Handle *handle = static_cast<UA_NodeCallback_Handle *>(forte_malloc(sizeof(struct UA_NodeCallback_Handle)));
-
- handle->convert = convert;
- handle->comLayer = comLayer;
- handle->portIndex = portIndex;
- // store it in the list so we can delete it to avoid mem leaks
- nodeCallbackHandles.pushBack(handle);
- UA_ValueCallback callback = {NULL, this->onWrite};
- UA_Server_setNodeContext(uaServer, *nodeId, handle);
- return UA_Server_setVariableNode_valueCallback(uaServer, *nodeId, callback);
-}
-
-void COPC_UA_Handler::onWrite(UA_Server *, const UA_NodeId *,
- void *, const UA_NodeId *,
- void *nodeContext, const UA_NumericRange *,
- const UA_DataValue *data) {
-
- struct UA_NodeCallback_Handle *handle = static_cast<struct UA_NodeCallback_Handle *>(nodeContext);
-
- CComLayer *layer = handle->comLayer;
-
- EComResponse retVal;
-
- struct {
- const struct UA_TypeConvert *convert;
- unsigned int portIndex;
- const UA_Variant *data;
- } handleRecv;
-
- handleRecv.data = data->hasValue ? &data->value : NULL;
- handleRecv.portIndex = handle->portIndex;
- handleRecv.convert = handle->convert;
-
- retVal = layer->recvData(static_cast<const void *>(&handleRecv), 0); //TODO: add multidimensional data handling with 'range'.
-
- /* Handle return of receive data */
- if (e_ProcessDataOk == retVal) {
- //only update data in item if data could be read
- }
-
- if (e_Nothing != retVal) {
- ::getExtEvHandler<COPC_UA_Handler>(*layer->getCommFB()).startNewEventChain(layer->getCommFB());
- }
-
-}
-
-void COPC_UA_Handler::referencedNodesIncrement(const CSinglyLinkedList<UA_NodeId *> *nodes, const COPC_UA_Layer *layer) {
- CCriticalRegion criticalRegion(mNodeLayerMutex);
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iterNode = nodes->begin(); iterNode != nodes->end(); ++iterNode) {
- bool found = false;
- for (CSinglyLinkedList<struct ReferencedNodeByLayer *>::Iterator iterRef = nodeLayerReferences.begin(); iterRef != nodeLayerReferences.end(); ++iterRef) {
- if (UA_NodeId_equal((*iterRef)->nodeId, (*iterNode))) {
- found = true;
- (*iterRef)->referencedByLayer.pushFront(layer);
- break;
- }
- }
- if (!found) {
- struct ReferencedNodeByLayer *newRef = static_cast<struct ReferencedNodeByLayer *>(forte_malloc(sizeof(struct ReferencedNodeByLayer)));
- UA_NodeId *newNode = UA_NodeId_new();
- UA_NodeId_copy((*iterNode), newNode);
- newRef->nodeId = newNode;
- newRef->referencedByLayer = CSinglyLinkedList<const COPC_UA_Layer*>();
- newRef->referencedByLayer.pushFront(layer);
- nodeLayerReferences.pushFront(newRef);
- }
- }
-}
-
-void COPC_UA_Handler::referencedNodesDecrement(const CSinglyLinkedList<UA_NodeId *> *nodes, const COPC_UA_Layer *layer, bool deleteIfLastReference) {
- CCriticalRegion criticalRegion(mNodeLayerMutex);
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iterNode = nodes->begin(); iterNode != nodes->end(); ++iterNode) {
- for (CSinglyLinkedList<struct ReferencedNodeByLayer *>::Iterator iterRef = nodeLayerReferences.begin(); iterRef != nodeLayerReferences.end(); ++iterRef) {
- if (UA_NodeId_equal((*iterRef)->nodeId, (*iterNode))) {
-
- while ((*iterRef)->referencedByLayer.peekFront() == layer)
- (*iterRef)->referencedByLayer.popFront();
-
- CSinglyLinkedList<const COPC_UA_Layer *>::Iterator iterLayerPrev = (*iterRef)->referencedByLayer.begin();
- for (CSinglyLinkedList<const COPC_UA_Layer *>::Iterator iterLayer = (*iterRef)->referencedByLayer.begin(); iterLayer != (*iterRef)->referencedByLayer.end(); ++iterLayer) {
- if ((*iterLayer) == layer) {
- (*iterRef)->referencedByLayer.eraseAfter(iterLayerPrev);
- // do not break, node may be referenced multiple times
- iterLayer = iterLayerPrev;
- }
- }
-
- if ((*iterRef)->referencedByLayer.isEmpty()) {
- if (deleteIfLastReference) {
- UA_Server_deleteNode(uaServer, *(*iterRef)->nodeId, UA_TRUE);
- }
- }
- break;
- }
- }
- }
-}
-
-void COPC_UA_Handler::forceEventHandling(COPC_UA_Layer* layer){
- startNewEventChain(layer->getCommFB());
-}
-
diff --git a/src/modules/opc_ua/opcua_handler.h b/src/modules/opc_ua/opcua_handler.h
deleted file mode 100644
index c4f6b78..0000000
--- a/src/modules/opc_ua/opcua_handler.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>,
- * fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Florian Froschermeier
- * - initial integration of the OPC-UA protocol
- * Stefan Profanter
- * - refactoring and adaption to new concept
- *******************************************************************************/
-
-
-#ifndef SRC_MODULES_OPC_UA_OPCUAHANDLER_H_
-#define SRC_MODULES_OPC_UA_OPCUAHANDLER_H_
-
-#include <forte_thread.h>
-#include <extevhan.h>
-#include <conn.h>
-#include <stdio.h>
-#include "comlayer.h"
-#include <forte_config.h>
-#include "opcua_helper.h"
-#include "opcua_layer.h"
-
-struct UA_NodeCallback_Handle {
- forte::com_infra::CComLayer *comLayer;
- const struct UA_TypeConvert *convert;
- unsigned int portIndex;
-};
-
-struct UA_ClientEndpointMap;
-typedef struct UA_ClientEndpointMap UA_ClientEndpointMap;
-
-// cppcheck-suppress noConstructor
-class COPC_UA_Handler : public CExternalEventHandler, public CThread {
- DECLARE_HANDLER(COPC_UA_Handler)
-
-public:
-
-
- /* functions needed for the external event handler interface */
- void enableHandler(void);
-
- void disableHandler(void);
-
- void setPriority(int pa_nPriority);
-
- int getPriority(void) const;
-
- /**
- * For a given connection SourcePoint between two 61499 FBs add a variable Node to the OPC UA address space.
- * Node is described by the name of the port and the name of the parent function block.
- * If creation successful the NodeId is returned otherwise
- * UA_StatusCode from node creation with error message.
- * @param parentNode Parent node for the variable
- * @param varName browse name of the variable
- * @param varType Datatype of the varialbe
- * @param varValue initial value of the variable
- * @param returnVarNodeId the node ID of the created variable node
- * @param allowWrite if set to false, writing to variable will be disabled
- * @return UA_STATUSCODE_GOOD on succes, the error code otherwise
- */
- UA_StatusCode createVariableNode(const UA_NodeId *parentNode, const char *varName, const UA_DataType *varType, void *varValue,
- UA_NodeId *returnVarNodeId, bool allowWrite);
-
- /**
- * Sets the user access level attribute of the node to the given new value.
- * @param nodeId the node for which to update the access level
- * @param newAccessLevel new access level of the node
- * @return UA_STATUSCODE_GOOD on succes, the error code otherwise
- */
- UA_StatusCode updateNodeUserAccessLevel(const UA_NodeId *nodeId, UA_Byte newAccessLevel);
-
-
- /**
- * Create a new method node in the OPC UA information model.
- *
- * @param parentNode parent node where the method should be created
- * @param namespaceIdx namespace index for the new method
- * @param methodName browse name and display name of the method
- * @param callback Callback which is called when the method is invoked
- * @param callbackHandle handle passed to the callback
- * @param inputArgumentsSize size of the inputArguments array
- * @param inputArguments list of input arguments for the method. These are normally the RD ports
- * @param outputArgumentsSize size of outputArguments array
- * @param outputArguments list of output arguments for the method. These are normally the SD ports
- * @param returnNodeId node id of the newly created method
- * @return UA_STATUSCODE_GOOD on success. Error otherwise
- */
- UA_StatusCode createMethodNode(const UA_NodeId *parentNode, UA_UInt16 namespaceIdx, const char *methodName, UA_MethodCallback callback,
- void *callbackHandle, unsigned int inputArgumentsSize, const UA_Argument *inputArguments,
- unsigned int outputArgumentsSize, const UA_Argument *outputArguments, UA_NodeId *returnNodeId);
-
-
- /**
- * Update UA Address Space node value given by the data pointer to an IEC61499 data object.
- *
- * @param nodeId node id of the variable to be updated
- * @param data new value for the variable
- * @param convert converter object to convert IEC61499 to OPC UA data value
- * @return UA_STATUSCODE_GOOD on success. Error otherwise
- */
- UA_StatusCode updateNodeValue(const UA_NodeId *nodeId, const CIEC_ANY *data, const UA_TypeConvert *convert);
-
- /**
- * Register a callback routine to a Node in the Address Space that is executed
- * on either write or read access on the node. A handle to the caller communication layer
- * is passed too. This alleviates for the process of searching the
- * originating layer of the external event.
- *
- * @param nodeId
- * @param comLayer
- * @param convert
- * @return
- */
- UA_StatusCode
- registerNodeCallBack(const UA_NodeId *nodeId, forte::com_infra::CComLayer *comLayer, const struct UA_TypeConvert *convert, unsigned int portIndex);
-
- /**
- * Callback when an external client writes to a variable on this server.
- *
- * @param h handle passed to the write method.
- * @param nodeid node id of the changed variable
- * @param data the new data for the variable
- * @param range range indicating the size of the data variant.
- */
- static void onWrite(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *nodeId,
- void *nodeContext, const UA_NumericRange *range,
- const UA_DataValue *data);
-
- /**
- * Get the node id of the node which is represented by the given path.
- * If createIfNotFound is set to true, all nodes which do not exist yet will be created.
- *
- * @param foundNodeId the node ID which corresponds to the nodePath or null if it is not found and createIfNotFound is false.
- * @param nodePath Full path to the node, e.g. '/Objects/FlipFlop'
- * @param createIfNotFound if true all the missing nodes will be created as FolderType objects.
- * @param startingNode the nodeId from where the given browse path starts. If NULL, the starting Node is Root and the path has to
- * start with '/Objects'
- * @param newNodeType type of the new node (only used for the last one), if it has to be created.
- * Default is FolderType which is also used for intermediate nodes, if they don't exist
- * @param clientInitialized optional client which should be used to get the node. The client has to be already connected if given.
- * If no client is given, a new temporary client will be created and connected to localhost
- * @return UA_STATUSCODE_GOOD on success or the corresponding error code.
- */
- UA_StatusCode
- getNodeForPath(UA_NodeId **foundNodeId, const char *nodePath, bool createIfNotFound,
- const UA_NodeId *startingNode = NULL, const UA_NodeId *newNodeType = NULL,
- UA_NodeId **parentNodeId = NULL, UA_Client *clientInitialized = NULL,
- CSinglyLinkedList<UA_NodeId *> *nodeIdsAlongPath = NULL);
-
- /**
- * Get the opc ua client for the given endpoint url. If there exists already an OPC UA client
- * which is connected to the given URL, that one will be returned.
- * If createIfNotFound is false and there is no client yet, NULL will be returned. Otherwise
- * a new client is instantiated and connected.
- *
- * @param endpointUrl The endpoint url for the client
- * @param createIfNotFound if true, a new client will be created if not found
- * @return the (new) client, or NULL of not found and not created.
- */
- UA_Client *
- getClientForEndpoint(const char *endpointUrl, bool createIfNotFound, CSyncObject **clientMutex);
-
-
- CSyncObject *
- getMutexForClient(const UA_Client *client);
-
-
- /**
- * Forces event handling by calling startNewEventChain.
- *
- * @param layer the layer for which the event should be handled
- */
- void forceEventHandling(COPC_UA_Layer *layer);
-
- void referencedNodesIncrement(const CSinglyLinkedList<UA_NodeId *> *nodes, const COPC_UA_Layer* layer);
-
- void referencedNodesDecrement(const CSinglyLinkedList<UA_NodeId *> *nodes, const COPC_UA_Layer* layer, bool deleteIfLastReference);
-
- const UA_String getDiscoveryUrl() const {
- if (uaServerConfig->networkLayersSize == 0)
- return UA_STRING_NULL;
- return uaServerConfig->networkLayers[0].discoveryUrl;
- }
-
-#ifdef FORTE_COM_OPC_UA_MULTICAST
- void registerWithLds(const UA_String *discoveryUrl);
- void removeLdsRegister(const UA_String *discoveryUrl);
-#endif
-protected:
-
-private:
- // OPC UA Server and configuration
- UA_Server *uaServer;
- UA_ServerConfig *uaServerConfig;
-
- // OPC UA Client and configuration
- volatile UA_Boolean uaServerRunningFlag;
-
- /**
- * Starts the OPC UA server, if it is not already running
- */
- void startServer();
-
- /**
- * Sets the uaServerRunningFlag to false which causes the UA Server to stop.
- */
- void stopServer();
-
- /**
- * Creates the configuration for the OPC UA Server.
- * @param UAServerPort port where the OPC UA Server should listen.
- */
- void configureUAServer(TForteUInt16 UAServerPort);
-
- /**
- * Overridden run() from CThread which loops the UA Server.
- */
- virtual void run();
-
- /**
- * Mutex for making sure that getNodeForPath is only called by one layer at a time.
- * If a race condition would occur, two layers may try to create the same node at the same time.
- */
- CSyncObject getNodeForPathMutex;
-
- /**
- * Collector list for callback handles to be able to clean them up on destroy.
- */
- CSinglyLinkedList<struct UA_NodeCallback_Handle *> nodeCallbackHandles;
-
- /**
- * Collector list for callback handles to be able to clean them up on destroy.
- */
- CSinglyLinkedList<struct UA_ClientEndpointMap *> clients;
-
-
-#ifdef FORTE_COM_OPC_UA_MULTICAST
-
- /**
- * List of LDS servers where this instance is already registered.
- */
- CSinglyLinkedList<const char *> registeredWithLds;
-#endif
-
- struct ReferencedNodeByLayer {
- const UA_NodeId *nodeId;
- CSinglyLinkedList<const COPC_UA_Layer*> referencedByLayer;
- };
- CSinglyLinkedList<struct ReferencedNodeByLayer*> nodeLayerReferences;
- CSyncObject mNodeLayerMutex;
- CSemaphore mServerStarted;
-
-};
-
-#endif /* SRC_MODULES_OPC_UA_OPCUAHANDLER_H_ */
diff --git a/src/modules/opc_ua/opcua_handler_abstract.cpp b/src/modules/opc_ua/opcua_handler_abstract.cpp
new file mode 100644
index 0000000..19c0f7e
--- /dev/null
+++ b/src/modules/opc_ua/opcua_handler_abstract.cpp
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+#include "opcua_handler_abstract.h"
+#include <forte_printer.h>
+#include <devlog.h>
+#include <parameterParser.h>
+
+//we tried to use the logLevelNames and logCategoryNames as extern from open62541 but it failed when using with shared libray
+const char *LogLevelNames[6] = { "trace", "debug", "info", "warning", "error", "fatal" };
+const char *LogCategoryNames[7] = { "network", "channel", "session", "server", "client", "userland" };
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+const UA_Logger COPC_UA_HandlerAbstract::UA_Forte_logger = {UA_Log_Forte, 0, UA_Log_Forte_clear};
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+
+COPC_UA_HandlerAbstract::COPC_UA_HandlerAbstract(CDeviceExecution& paDeviceExecution) :
+ CExternalEventHandler(paDeviceExecution) {
+}
+
+COPC_UA_HandlerAbstract::~COPC_UA_HandlerAbstract() {
+ //do nothing
+}
+
+void COPC_UA_HandlerAbstract::triggerNewEvent(CEventSourceFB &paLayer) {
+ startNewEventChain(&paLayer);
+}
+
+void COPC_UA_HandlerAbstract::setPriority(int) {
+ //currently we are doing nothing here.
+}
+
+int COPC_UA_HandlerAbstract::getPriority() const {
+ //the same as for setPriority
+ return 0;
+}
+
+UA_Logger COPC_UA_HandlerAbstract::getLogger() {
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ return UA_Forte_logger;
+#else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ return UA_Log_Forte;
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+}
+
+void COPC_UA_HandlerAbstract::UA_Log_Forte(
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ void*,
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_LogLevel paLevel, UA_LogCategory paCategory, const char *paMsg, va_list paArgs) {
+
+ char tmpStr[mMaxLogLength];
+ forte_snprintf(tmpStr, mMaxLogLength, "[OPC UA LOGGER] %s/%s\t", LogLevelNames[paLevel], LogCategoryNames[paCategory]);
+ char *start = &tmpStr[strlen(tmpStr)];
+
+ forte_vsnprintf(start, mMaxLogLength, paMsg, paArgs);
+
+ size_t len = strlen(tmpStr);
+ tmpStr[len] = '\n';
+ tmpStr[len + 1] = '\0';
+
+ switch(paLevel){
+ case UA_LOGLEVEL_TRACE:
+ case UA_LOGLEVEL_DEBUG:
+ DEVLOG_DEBUG(tmpStr);
+ break;
+ case UA_LOGLEVEL_INFO:
+ DEVLOG_INFO(tmpStr);
+ break;
+ case UA_LOGLEVEL_WARNING:
+ DEVLOG_WARNING(tmpStr);
+ break;
+ case UA_LOGLEVEL_ERROR:
+ case UA_LOGLEVEL_FATAL:
+ DEVLOG_ERROR(tmpStr);
+ break;
+ default:
+ break;
+ }
+}
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+void COPC_UA_HandlerAbstract::UA_Log_Forte_clear(void *) {
+ //do nothing
+}
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+
+
diff --git a/src/modules/opc_ua/opcua_handler_abstract.h b/src/modules/opc_ua/opcua_handler_abstract.h
new file mode 100644
index 0000000..5ecde5b
--- /dev/null
+++ b/src/modules/opc_ua/opcua_handler_abstract.h
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+#ifndef SRC_MODULES_OPC_UA_OPCUA_HANDLER_ABSTRACT_H_
+#define SRC_MODULES_OPC_UA_OPCUA_HANDLER_ABSTRACT_H_
+
+#include <extevhan.h>
+#include <esfb.h>
+#include <opcua_action_info.h>
+
+/**
+ * Base class for the local and remote handler. It defines the three major function to be executed in an action (initialize, execute, uninitialize)
+ */
+class COPC_UA_HandlerAbstract : public CExternalEventHandler {
+ public:
+
+ /**
+ * Constructor of the class
+ */
+ explicit COPC_UA_HandlerAbstract(CDeviceExecution &paDeviceExecution);
+
+ /**
+ * Destructor of the class
+ */
+ virtual ~COPC_UA_HandlerAbstract();
+
+ /**
+ * Trigger a new incoming event in the FB
+ * @param paLayer The communication FB of the layer which received data
+ */
+ void triggerNewEvent(CEventSourceFB &paLayer);
+
+ /**
+ * Perform all the needed initialization of the action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode initializeAction(CActionInfo &paActionInfo) = 0;
+
+ /**
+ * Execute the action
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode executeAction(CActionInfo &paActionInfo) = 0;
+
+ /**
+ * Uninitialize the action
+ * @param paActionInfo Action to be Uninitialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode uninitializeAction(CActionInfo &paActionInfo) = 0;
+
+ /**
+ * Not used
+ */
+ void setPriority(int paPriority);
+
+ /**
+ * Not used
+ */
+ int getPriority() const;
+
+ /**
+ * Get the logger used by the the OPC UA stack
+ * @return Logger used by the OPC UA stack
+ */
+ static UA_Logger getLogger();
+
+ private:
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ static void UA_Log_Forte_clear(void *paLogContext);
+ static const UA_Logger UA_Forte_logger;
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+
+ static void UA_Log_Forte(
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ void*,
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_LogLevel paLevel, UA_LogCategory paCategory, const char *paMsg, va_list paArgs);
+
+ /**
+ * Maximum size of the logging buffer
+ */
+ static const size_t mMaxLogLength = 400;
+};
+
+#endif /* SRC_MODULES_OPC_UA_OPCUA_HANDLER_ABSTRACT_H_ */
diff --git a/src/modules/opc_ua/opcua_helper.cpp b/src/modules/opc_ua/opcua_helper.cpp
index 47fb659..99863c9 100644
--- a/src/modules/opc_ua/opcua_helper.cpp
+++ b/src/modules/opc_ua/opcua_helper.cpp
@@ -1,164 +1,352 @@
/*******************************************************************************
- * Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stefan Profanter
- * - initial implementation
- *******************************************************************************/
+ * Copyright (c) 2016 - 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stefan Profanter
+ * - initial implementation
+ *******************************************************************************/
#include "opcua_helper.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "opcua_helper_gen.cpp"
+#endif
+#include "../../core/utils/parameterParser.h"
+#include "../../arch/devlog.h"
#include "convert_functions.h"
+#include <forte_struct.h>
+#include <forte_array.h>
-#define UA_String_to_char_alloc(str, chars) { \
- chars = static_cast<char*>(forte_malloc(str->length+1)); \
- memcpy(chars, str->data, str->length); \
- chars[str->length] = 0; \
+template<typename T_FORTE_TYPE, typename T_OPCUA_TYPE>
+size_t convertFromIECToOPCUASpecific(const CIEC_ANY &paSrc, void *paDest) {
+ *static_cast<T_OPCUA_TYPE *>(paDest) = static_cast<const T_FORTE_TYPE &>(paSrc);
+ return sizeof(T_OPCUA_TYPE);
+}
+
+template<typename T_FORTE_TYPE, typename T_OPCUA_TYPE>
+size_t convertFromOPCUAToIECSpecific(const void *paSrc, CIEC_ANY &paDest) {
+ static_cast<T_FORTE_TYPE &>(paDest) = *static_cast<const T_OPCUA_TYPE *>(paSrc);
+ return sizeof(T_OPCUA_TYPE);
+}
+
+template<>
+size_t convertFromIECToOPCUASpecific<CIEC_DATE, UA_DateTime>(const CIEC_ANY & paSrc, void *paDest) {
+ *static_cast<UA_DateTime *>(paDest) = DATE_TO_DT(static_cast<const CIEC_DATE&>(paSrc));
+ return sizeof(UA_DateTime);
+}
+
+template<>
+size_t convertFromOPCUAToIECSpecific<CIEC_DATE, UA_DateTime>(const void *paSrc, CIEC_ANY &paDest) {
+ static_cast<CIEC_DATE &>(paDest) = DT_TO_DATE(*reinterpret_cast<const TForteUInt64*>(static_cast<const UA_DateTime*>(paSrc)));
+ return sizeof(UA_DateTime);
+}
+
+template<>
+size_t convertFromIECToOPCUASpecific<CIEC_TIME_OF_DAY, UA_DateTime>(const CIEC_ANY & paSrc, void *paDest) {
+ //TODO how convert TOD to UA_DateTime?
+ return 0;
+}
+
+template<>
+size_t convertFromOPCUAToIECSpecific<CIEC_TIME_OF_DAY, UA_DateTime>(const void *paSrc, CIEC_ANY &paDest) {
+ //TODO how convert UA_DateTime to TOD?
+ return 0;
+}
+
+template<>
+size_t convertFromIECToOPCUASpecific<CIEC_STRING, UA_String>(const CIEC_ANY &paSrc, void *paDest) {
+ *static_cast<UA_String *>(paDest) = UA_String_fromChars(static_cast<const CIEC_STRING &>(paSrc).getValue());
+ return sizeof(UA_String);
+}
+
+template<>
+size_t convertFromOPCUAToIECSpecific<CIEC_STRING, UA_String>(const void *paSrc, CIEC_ANY &paDest) {
+ const UA_String *str = static_cast<const UA_String *>(paSrc);
+ static_cast<CIEC_STRING &>(paDest).assign(reinterpret_cast<const char*>(str->data), static_cast<TForteUInt16>(str->length));
+ return sizeof(UA_String);
+}
+
+template<>
+size_t convertFromIECToOPCUASpecific<CIEC_WSTRING, UA_String>(const CIEC_ANY &paSrc, void *paDest) {
+ CIEC_STRING str = WSTRING_TO_STRING(static_cast<const CIEC_WSTRING &>(paSrc));
+ return convertFromIECToOPCUASpecific<CIEC_STRING, UA_String>(str, paDest);
+}
+
+template<>
+size_t convertFromOPCUAToIECSpecific<CIEC_WSTRING, UA_String>(const void *paSrc, CIEC_ANY &paDest) {
+ const UA_String *str = static_cast<const UA_String *>(paSrc);
+ static_cast<CIEC_WSTRING &>(paDest).assign(reinterpret_cast<const char*>(str->data), static_cast<TForteUInt16>(str->length));
+ return sizeof(UA_String);
+}
+
+const COPC_UA_Helper::UA_TypeConvert COPC_UA_Helper::scmMapForteTypeIdToOpcUa[] = {
+ UA_TypeConvert(0, 0, 0), // dummy for e_ANY
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_BOOLEAN], &convertFromIECToOPCUASpecific<CIEC_BOOL, UA_Boolean>, &convertFromOPCUAToIECSpecific<CIEC_BOOL, UA_Boolean>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_SBYTE], &convertFromIECToOPCUASpecific<CIEC_SINT, UA_SByte>, &convertFromOPCUAToIECSpecific<CIEC_SINT, UA_SByte>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_INT16], &convertFromIECToOPCUASpecific<CIEC_INT, UA_Int16>, &convertFromOPCUAToIECSpecific<CIEC_INT, UA_Int16>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_INT32], &convertFromIECToOPCUASpecific<CIEC_DINT, UA_Int32>, &convertFromOPCUAToIECSpecific<CIEC_DINT, UA_Int32>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_INT64], &convertFromIECToOPCUASpecific<CIEC_LINT, UA_Int64>, &convertFromOPCUAToIECSpecific<CIEC_LINT, UA_Int64>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_BYTE], &convertFromIECToOPCUASpecific<CIEC_USINT, UA_Byte>, &convertFromOPCUAToIECSpecific<CIEC_USINT, UA_Byte>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT16], &convertFromIECToOPCUASpecific<CIEC_UINT, UA_UInt16>, &convertFromOPCUAToIECSpecific<CIEC_UINT, UA_UInt16>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT32], &convertFromIECToOPCUASpecific<CIEC_UDINT, UA_UInt32>, &convertFromOPCUAToIECSpecific<CIEC_UDINT, UA_UInt32>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT64], &convertFromIECToOPCUASpecific<CIEC_ULINT, UA_UInt64>, &convertFromOPCUAToIECSpecific<CIEC_ULINT, UA_UInt64>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_BYTE], &convertFromIECToOPCUASpecific<CIEC_BYTE, UA_Byte>, &convertFromOPCUAToIECSpecific<CIEC_ULINT, UA_Byte>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT16], &convertFromIECToOPCUASpecific<CIEC_WORD, UA_UInt16>, &convertFromOPCUAToIECSpecific<CIEC_WORD, UA_UInt16>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT32], &convertFromIECToOPCUASpecific<CIEC_DWORD, UA_UInt32>, &convertFromOPCUAToIECSpecific<CIEC_DWORD, UA_UInt32>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT64], &convertFromIECToOPCUASpecific<CIEC_LWORD, UA_UInt64>, &convertFromOPCUAToIECSpecific<CIEC_LWORD, UA_UInt64>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_DATETIME], &convertFromIECToOPCUASpecific<CIEC_DATE, UA_DateTime>, &convertFromOPCUAToIECSpecific<CIEC_DATE, UA_DateTime>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_DATETIME], &convertFromIECToOPCUASpecific<CIEC_TIME_OF_DAY, UA_DateTime>,
+ &convertFromOPCUAToIECSpecific<CIEC_TIME_OF_DAY, UA_DateTime>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_UINT64], &convertFromIECToOPCUASpecific<CIEC_LWORD, UA_UInt64>, &convertFromOPCUAToIECSpecific<CIEC_LWORD, UA_UInt64>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_DATETIME], &convertFromIECToOPCUASpecific<CIEC_DATE_AND_TIME, UA_DateTime>,
+ &convertFromOPCUAToIECSpecific<CIEC_DATE_AND_TIME, UA_DateTime>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_FLOAT], &convertFromIECToOPCUASpecific<CIEC_REAL, UA_Float>, &convertFromOPCUAToIECSpecific<CIEC_REAL, UA_Float>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_DOUBLE], &convertFromIECToOPCUASpecific<CIEC_LREAL, UA_Double>, &convertFromOPCUAToIECSpecific<CIEC_LREAL, UA_Double>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_STRING], &convertFromIECToOPCUASpecific<CIEC_STRING, UA_String>, &convertFromOPCUAToIECSpecific<CIEC_STRING, UA_String>),
+ UA_TypeConvert(&UA_TYPES[UA_TYPES_STRING], &convertFromIECToOPCUASpecific<CIEC_WSTRING, UA_String>, &convertFromOPCUAToIECSpecific<CIEC_WSTRING, UA_String>), };
+
+
+const UA_DataType *COPC_UA_Helper::getOPCUATypeFromAny(const CIEC_ANY& paAnyType) {
+ CIEC_ANY::EDataTypeID typeId = paAnyType.getDataTypeID();
+ if(typeId >= CIEC_ANY::e_BOOL && typeId <= CIEC_ANY::e_WSTRING) { //basic type
+ return scmMapForteTypeIdToOpcUa[typeId].mType;
+ } else if(CIEC_ANY::e_ARRAY == typeId) {
+ return getOPCUATypeFromAny(*static_cast<const CIEC_ARRAY&>(paAnyType)[0]);
+ } else {
+ return getExternalOPCUATypeFromAny(paAnyType);
+ }
+ return 0;
+}
+
+size_t COPC_UA_Helper::convertToOPCUAType(const CIEC_ANY& paSrcAny, void *paDest) {
+ size_t retVal = 0;
+
+ CIEC_ANY::EDataTypeID typeId = paSrcAny.getDataTypeID();
+ if(typeId >= CIEC_ANY::e_BOOL && typeId <= CIEC_ANY::e_WSTRING) { //basic type
+ retVal = scmMapForteTypeIdToOpcUa[typeId].mToOPCUA(paSrcAny, paDest);
+ } else if(CIEC_ANY::e_ARRAY == typeId) {
+ for(size_t i = 0; i < static_cast<const CIEC_ARRAY&>(paSrcAny).size(); i++) {
+ retVal += convertToOPCUAType(*static_cast<const CIEC_ARRAY&>(paSrcAny)[static_cast<TForteUInt16>(i)], static_cast<char*>(paDest) + retVal);
+ }
+ } else if(CIEC_ANY::e_STRUCT == typeId) {
+ const CIEC_ANY *members = static_cast<const CIEC_STRUCT&>(paSrcAny).getMembers();
+ for(size_t i = 0; i < static_cast<const CIEC_STRUCT&>(paSrcAny).getStructSize(); i++) {
+ retVal += convertToOPCUAType(members[i], static_cast<char*>(paDest) + retVal);
+ }
+ }
+ return retVal;
+}
+
+size_t COPC_UA_Helper::convertFromOPCUAType(const void *paSrc, CIEC_ANY &paDestAny) {
+ size_t retVal = 0;
+
+ CIEC_ANY::EDataTypeID typeId = paDestAny.getDataTypeID();
+ if(typeId >= CIEC_ANY::e_BOOL && typeId <= CIEC_ANY::e_WSTRING) { //basic type
+ retVal = scmMapForteTypeIdToOpcUa[typeId].mFromOPCUA(paSrc, paDestAny);
+ } else if(CIEC_ANY::e_ARRAY == typeId) {
+ for(size_t i = 0; i < static_cast<CIEC_ARRAY&>(paDestAny).size(); i++) {
+ retVal += convertFromOPCUAType(static_cast<const char*>(paSrc) + retVal, *static_cast<CIEC_ARRAY&>(paDestAny)[static_cast<TForteUInt16>(i)]);
+ }
+ } else if(CIEC_ANY::e_STRUCT == typeId) {
+ CIEC_ANY *members = static_cast<CIEC_STRUCT&>(paDestAny).getMembers();
+ for(size_t i = 0; i < static_cast<CIEC_STRUCT&>(paDestAny).getStructSize(); i++) {
+ retVal += convertFromOPCUAType(static_cast<const char*>(paSrc) + retVal, members[i]);
+ }
+ }
+ return retVal;
+}
+
+void COPC_UA_Helper::fillVariant(UA_Variant &paVariant, const CIEC_ANY &paDataSource) {
+ UA_Variant_init(&paVariant);
+ paVariant.type = COPC_UA_Helper::getOPCUATypeFromAny(paDataSource);
+ void *varValue = UA_new(paVariant.type);
+ UA_init(varValue, paVariant.type);
+ COPC_UA_Helper::convertToOPCUAType(paDataSource, varValue);
+ UA_Variant_setScalarCopy(&paVariant, varValue, paVariant.type);
+ paVariant.storageType = UA_VARIANT_DATA;
+ UA_delete(varValue, paVariant.type);
+}
+
+bool COPC_UA_Helper::isBrowsePathValid(const char *paBrowsepath) {
+ bool retVal = false;
+
+ if('/' == *paBrowsepath) {
+ size_t lenghtOfBrowsename = strlen(paBrowsepath);
+ if('/' == *(paBrowsepath + lenghtOfBrowsename - 1)) { //remove trailing slash
+ lenghtOfBrowsename--;
}
-template<CIEC_ANY::EDataTypeID T_FORTE_E, typename T_FORTE_T, typename T_C>
-bool map_convert_get(const CIEC_ANY *src, void *dst) {
- if (src->getDataTypeID() != T_FORTE_E)
- return false;
- T_C *dstType = static_cast<T_C *>(dst);
- *dstType = *(T_FORTE_T *) (src);
- return true;
-};
+ if(1 < lenghtOfBrowsename) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Browsepath %s doesn't provide a valid nodename\n", paBrowsepath);
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Browsepath %s should start with a slash\n", paBrowsepath);
+ }
-template<CIEC_ANY::EDataTypeID T_FORTE_E, typename T_FORTE_T, typename T_C>
-bool map_convert_set(const void *src, CIEC_ANY *dst) {
- if (dst->getDataTypeID() != T_FORTE_E)
- return false;
- T_FORTE_T *dstType = static_cast<T_FORTE_T *>(dst);
- *dstType = *(T_C *) (src);
- return true;
-};
-
-#define MAP_INSERT_CONVERT(T_FORTE_E, T_FORTE_T, T_UA, T_C) \
- { \
- T_UA, \
- &map_convert_get<T_FORTE_E, T_FORTE_T, T_C>, \
- &map_convert_set<T_FORTE_E, T_FORTE_T, T_C> \
- } \
-
-#define MAP_INSERT_CONVERT_SPECIFIC(T_FORTE_T, T_UA) \
- { \
- T_UA, \
- &map_convert_get_##T_FORTE_T, \
- &map_convert_set_##T_FORTE_T \
- } \
-
-
-
-bool map_convert_get_CIEC_DATE(const CIEC_ANY *src, void *dst) {
- if (src->getDataTypeID() != CIEC_ANY::e_DATE)
- return false;
- UA_DateTime *dstType = static_cast<UA_DateTime *>(dst);
- *dstType = DATE_TO_DT(*(CIEC_DATE *) (src));
- return true;
+ return retVal;
}
-bool map_convert_set_CIEC_DATE(const void *src, CIEC_ANY *dst) {
- if (dst->getDataTypeID() != CIEC_ANY::e_DATE)
- return false;
- CIEC_DATE *dstType = static_cast<CIEC_DATE *>(dst);
- *dstType = DT_TO_DATE(*(TForteUInt64 *) ((const UA_DateTime *) (src)));
- return true;
+UA_StatusCode COPC_UA_Helper::getRemoteNodeForPath(UA_Client &paClient, const char *paNodePathConst, UA_NodeId **paParentNodeId, UA_NodeId **paFoundNodeId) {
+ *paFoundNodeId = NULL;
+ UA_BrowsePath *browsePaths = 0;
+ size_t folderCnt = 0;
+ UA_StatusCode retVal = prepareBrowseArgument(paNodePathConst, &browsePaths, &folderCnt);
+ if(UA_STATUSCODE_GOOD == retVal) {
+
+ UA_TranslateBrowsePathsToNodeIdsRequest request;
+ UA_TranslateBrowsePathsToNodeIdsResponse response;
+
+ UA_TranslateBrowsePathsToNodeIdsRequest_init(&request);
+
+ request.browsePaths = browsePaths;
+ request.browsePathsSize = folderCnt * 2;
+
+ response = UA_Client_Service_translateBrowsePathsToNodeIds(&paClient, request);
+
+ retVal = response.responseHeader.serviceResult;
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(response.resultsSize == folderCnt * 2) {
+ int foundFolderOffset = getFolderOffset(response.results, folderCnt);
+
+ if(foundFolderOffset >= 0) {
+ // all nodes exist, so just copy the node ids
+ copyNodeIds(response.results, folderCnt, foundFolderOffset, paParentNodeId, paFoundNodeId);
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Could not translate browse paths for '%s' to node IDs. Not all nodes exist\n", paNodePathConst);
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Could not translate browse paths for '%s' to node IDs. resultSize (%d) != expected count (%d)\n", paNodePathConst,
+ response.resultsSize, folderCnt);
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Could not translate browse paths for '%s' to node IDs. Error: %s\n", paNodePathConst, UA_StatusCode_name(retVal));
+ }
+
+ //browsePaths is deleted inside
+ UA_TranslateBrowsePathsToNodeIdsRequest_deleteMembers(&request);
+ UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers(&response);
+ }
+
+ return retVal;
}
-bool map_convert_get_CIEC_TIME_OF_DAY(const CIEC_ANY *src, void *) {
- if (src->getDataTypeID() != CIEC_ANY::e_TIME_OF_DAY)
- return false;
- //TODO how convert TOD to DT?
- return false;
+UA_StatusCode COPC_UA_Helper::prepareBrowseArgument(const char *paNodePathConst, UA_BrowsePath **paBrowsePaths, size_t *paFolderCount) {
+
+ if(!isBrowsePathValid(paNodePathConst)) {
+ return UA_STATUSCODE_BADINVALIDARGUMENT;
+ }
+
+ CIEC_STRING copyOfOriginal(paNodePathConst);
+
+ char *nodePath = copyOfOriginal.getValue();
+
+ if('/' == nodePath[copyOfOriginal.length() - 1]) { // remove tailing slash
+ nodePath[copyOfOriginal.length() - 1] = '\0';
+ }
+
+ CParameterParser folderParser(nodePath + 1, '/'); // + 1 to skip the first slash
+
+ (*paFolderCount) = folderParser.parseParameters();
+
+ UA_NodeId startingNode = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+
+ // for every folder (which is a BrowsePath) we want to get the node id
+ *paBrowsePaths = static_cast<UA_BrowsePath *>(UA_Array_new((*paFolderCount) * 2, &UA_TYPES[UA_TYPES_BROWSEPATH]));
+ UA_BrowsePath *browsePaths = *paBrowsePaths;
+
+ for(size_t i = 0; i < (*paFolderCount); i++) {
+ const char *tok = folderParser[i];
+ UA_BrowsePath_init(&browsePaths[i]);
+ browsePaths[i].startingNode = startingNode;
+ browsePaths[i].relativePath.elementsSize = i + 1;
+
+ browsePaths[i].relativePath.elements = static_cast<UA_RelativePathElement *>(UA_Array_new(browsePaths[i].relativePath.elementsSize,
+ &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]));
+
+ for(size_t j = 0; j <= i; j++) {
+ if(j < i) {
+ // just copy from before
+ UA_RelativePathElement_copy(&browsePaths[i - 1].relativePath.elements[j], &browsePaths[i].relativePath.elements[j]);
+ continue;
+ }
+ // the last element is a new one
+ UA_RelativePathElement_init(&browsePaths[i].relativePath.elements[j]);
+ browsePaths[i].relativePath.elements[j].isInverse = UA_FALSE;
+
+ if(!getBrowsenameFromNodeName(tok, i ? 1 : 0, browsePaths[i].relativePath.elements[j].targetName)) { //use the fix 0 only for the first one and then take it from the server
+ UA_Array_delete(browsePaths, *paFolderCount * 2, &UA_TYPES[UA_TYPES_BROWSEPATH]);
+ return UA_STATUSCODE_BADINVALIDARGUMENT;
+ }
+ }
+ }
+
+ // same browse paths, but inverse reference, to check both directions
+ for(size_t i = 0; i < (*paFolderCount); i++) {
+ UA_BrowsePath_copy(&browsePaths[i], &browsePaths[(*paFolderCount) + i]);
+ for(unsigned int j = 0; j < browsePaths[(*paFolderCount) + i].relativePath.elementsSize; j++) {
+ browsePaths[(*paFolderCount) + i].relativePath.elements[j].isInverse = !browsePaths[(*paFolderCount) + i].relativePath.elements[j].isInverse;
+ }
+ }
+ return UA_STATUSCODE_GOOD;
}
-bool map_convert_set_CIEC_TIME_OF_DAY(const void *, CIEC_ANY *dst) {
- if (dst->getDataTypeID() != CIEC_ANY::e_TIME_OF_DAY)
- return false;
- //TODO how convert UA_DateTime to TOD?
- return false;
+UA_StatusCode COPC_UA_Helper::releaseBrowseArgument(UA_BrowsePath &paBrowsePaths, size_t paPathLength) {
+ UA_Array_delete(&paBrowsePaths, paPathLength * 2, &UA_TYPES[UA_TYPES_BROWSEPATH]);
+ return UA_STATUSCODE_GOOD;
}
+bool COPC_UA_Helper::getBrowsenameFromNodeName(const char *paNodeName, UA_UInt16 paDefaultNamespace, UA_QualifiedName &paBrowseName) {
+ bool retVal = true;
-bool map_convert_get_CIEC_STRING(const CIEC_ANY *src, void *dst) {
- if (src->getDataTypeID() != CIEC_ANY::e_STRING)
- return false;
- UA_String *dstType = static_cast<UA_String *>(dst);
- *dstType = UA_String_fromChars(static_cast<const CIEC_STRING *>(src)->getValue());
- return true;
+ UA_UInt16 browsenameNamespace = paDefaultNamespace;
+ CIEC_STRING targetName;
+ CParameterParser browseNameParser(paNodeName, ':');
+ size_t parsingResult = browseNameParser.parseParameters();
+ if(scmMaxNoOfParametersInBrowseName == parsingResult) {
+ browsenameNamespace = static_cast<UA_UInt16>(forte::core::util::strtol(browseNameParser[0], 0, 10));
+ targetName = browseNameParser[1];
+ } else if(1 == parsingResult) {
+ targetName = browseNameParser[0];
+ } else {
+ DEVLOG_ERROR("[OPC UA HELPER]: Error by parsing FB browse path %s\n", paNodeName);
+ retVal = false;
+ }
+
+ if(retVal) {
+ paBrowseName = UA_QUALIFIEDNAME_ALLOC(browsenameNamespace, targetName.getValue());
+ }
+ return retVal;
}
-bool map_convert_set_CIEC_STRING(const void *src, CIEC_ANY *dst) {
- if (dst->getDataTypeID() != CIEC_ANY::e_STRING)
- return false;
- CIEC_STRING *dstType = static_cast<CIEC_STRING *>(dst);
-
- const UA_String *str = static_cast<const UA_String *>(src);
- char *chars;
- UA_String_to_char_alloc(str, chars);
- dstType->fromString(chars);
- forte_free(chars);
- return true;
+int COPC_UA_Helper::getFolderOffset(UA_BrowsePathResult *paBrowsePathsResults, size_t paFolderCnt) {
+ int foundFolderOffset = -1;
+ if(UA_STATUSCODE_GOOD == paBrowsePathsResults[paFolderCnt - 1].statusCode) {
+ foundFolderOffset = 0;
+ } else if(UA_STATUSCODE_GOOD == paBrowsePathsResults[paFolderCnt * 2 - 1].statusCode) {
+ foundFolderOffset = static_cast<int>(paFolderCnt);
+ }
+ return foundFolderOffset;
}
-bool map_convert_get_CIEC_WSTRING(const CIEC_ANY *src, void *dst) {
- if (src->getDataTypeID() != CIEC_ANY::e_WSTRING)
- return false;
- UA_TypeConvert conv = COPC_UA_Helper::mapForteTypeIdToOpcUa[CIEC_ANY::e_STRING];
- CIEC_STRING str = WSTRING_TO_STRING(*static_cast<const CIEC_WSTRING *>(src));
- return conv.get(&str, dst);
+void COPC_UA_Helper::copyNodeIds(UA_BrowsePathResult *paBrowsePathsResults, size_t paFolderCnt, int paFoundFolderOffset, UA_NodeId **paParentNodeId,
+ UA_NodeId **paFoundNodeId) {
+ *paFoundNodeId = UA_NodeId_new();
+ UA_NodeId_copy(&paBrowsePathsResults[paFoundFolderOffset + paFolderCnt - 1].targets[0].targetId.nodeId, *paFoundNodeId);
+ if(paParentNodeId && paFolderCnt >= 2) {
+ *paParentNodeId = UA_NodeId_new();
+ UA_NodeId_copy(&paBrowsePathsResults[paFoundFolderOffset + paFolderCnt - 2].targets[0].targetId.nodeId, *paParentNodeId);
+ } else if(paParentNodeId) {
+ *paParentNodeId = UA_NodeId_new();
+ **paParentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+ }
}
-bool map_convert_set_CIEC_WSTRING(const void *src, CIEC_ANY *dst) {
- if (dst->getDataTypeID() != CIEC_ANY::e_WSTRING)
- return false;
- CIEC_WSTRING *dstType = static_cast<CIEC_WSTRING *>(dst);
-
- const UA_String *str = static_cast<const UA_String *>(src);
- char *chars;
- UA_String_to_char_alloc(str, chars);
- dstType->fromString(chars);
- forte_free(chars);
-
- return true;
-}
-
-/**
- * ATTENTION:
- * This array has to match the enum CIEC_ANY::EDataTypeID.
- * Current maximum index is WSTRING
- */
-const UA_TypeConvert COPC_UA_Helper::mapForteTypeIdToOpcUa[CIEC_ANY::e_WSTRING + 1] = {
- { // dummy for e_ANY
- NULL,
- NULL,
- NULL
- },
- MAP_INSERT_CONVERT(CIEC_ANY::e_BOOL, CIEC_BOOL, &UA_TYPES[UA_TYPES_BOOLEAN], UA_Boolean),
- MAP_INSERT_CONVERT(CIEC_ANY::e_SINT, CIEC_SINT, &UA_TYPES[UA_TYPES_SBYTE], UA_SByte),
- MAP_INSERT_CONVERT(CIEC_ANY::e_INT, CIEC_INT, &UA_TYPES[UA_TYPES_INT16], UA_Int16),
- MAP_INSERT_CONVERT(CIEC_ANY::e_DINT, CIEC_DINT, &UA_TYPES[UA_TYPES_INT32], UA_Int32),
- MAP_INSERT_CONVERT(CIEC_ANY::e_LINT, CIEC_LINT, &UA_TYPES[UA_TYPES_INT64], UA_Int64),
- MAP_INSERT_CONVERT(CIEC_ANY::e_USINT, CIEC_USINT, &UA_TYPES[UA_TYPES_BYTE], UA_Byte),
- MAP_INSERT_CONVERT(CIEC_ANY::e_UINT, CIEC_UINT, &UA_TYPES[UA_TYPES_UINT16], UA_UInt16),
- MAP_INSERT_CONVERT(CIEC_ANY::e_UDINT, CIEC_UDINT, &UA_TYPES[UA_TYPES_UINT32], UA_UInt32),
- MAP_INSERT_CONVERT(CIEC_ANY::e_ULINT, CIEC_ULINT, &UA_TYPES[UA_TYPES_UINT64], UA_UInt64),
- MAP_INSERT_CONVERT(CIEC_ANY::e_BYTE, CIEC_BYTE, &UA_TYPES[UA_TYPES_BYTE], UA_Byte),
- MAP_INSERT_CONVERT(CIEC_ANY::e_WORD, CIEC_WORD, &UA_TYPES[UA_TYPES_UINT16], UA_UInt16),
- MAP_INSERT_CONVERT(CIEC_ANY::e_DWORD, CIEC_DWORD, &UA_TYPES[UA_TYPES_UINT32], UA_UInt32),
- MAP_INSERT_CONVERT(CIEC_ANY::e_LWORD, CIEC_LWORD, &UA_TYPES[UA_TYPES_UINT64], UA_UInt64),
- MAP_INSERT_CONVERT_SPECIFIC(CIEC_DATE, &UA_TYPES[UA_TYPES_DATETIME]),
- MAP_INSERT_CONVERT_SPECIFIC(CIEC_TIME_OF_DAY, &UA_TYPES[UA_TYPES_DATETIME]),
- MAP_INSERT_CONVERT(CIEC_ANY::e_DATE_AND_TIME, CIEC_DATE_AND_TIME, &UA_TYPES[UA_TYPES_DATETIME], UA_DateTime),
- MAP_INSERT_CONVERT(CIEC_ANY::e_TIME, CIEC_TIME, &UA_TYPES[UA_TYPES_DOUBLE], UA_Int64),
- MAP_INSERT_CONVERT(CIEC_ANY::e_REAL, CIEC_REAL, &UA_TYPES[UA_TYPES_FLOAT], UA_Float),
- MAP_INSERT_CONVERT(CIEC_ANY::e_LREAL, CIEC_LREAL, &UA_TYPES[UA_TYPES_DOUBLE], UA_Double),
- MAP_INSERT_CONVERT_SPECIFIC(CIEC_STRING, &UA_TYPES[UA_TYPES_STRING]),
- MAP_INSERT_CONVERT_SPECIFIC(CIEC_WSTRING, &UA_TYPES[UA_TYPES_STRING])
-};
-
-
diff --git a/src/modules/opc_ua/opcua_helper.h b/src/modules/opc_ua/opcua_helper.h
index ebb6d40..adb7b6f 100644
--- a/src/modules/opc_ua/opcua_helper.h
+++ b/src/modules/opc_ua/opcua_helper.h
@@ -1,14 +1,16 @@
/*******************************************************************************
- * Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Stefan Profanter
- * - initial implementation
- *******************************************************************************/
+ * Copyright (c) 2016, 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Stefan Profanter
+ * - initial implementation
+ *******************************************************************************/
#ifndef FORTE_OPCUA_HELPER_H
#define FORTE_OPCUA_HELPER_H
@@ -16,57 +18,221 @@
#include <open62541.h>
#include "forte_any.h"
-struct UA_TypeConvert {
- const UA_DataType *type;
-
- bool (*get)(const CIEC_ANY *src, void *dst);
-
- bool (*set)(const void *src, CIEC_ANY *dst);
-};
-
class COPC_UA_Helper {
-public:
- /**
- * Maps EDataTypeID to OPC UA data types
- */
- static const UA_TypeConvert mapForteTypeIdToOpcUa[CIEC_ANY::e_WSTRING + 1];
+ public:
- /**
- * Check if given type ID is valid an within the range of the array.
- * @param typeId the type ID to check
- * @return true if valid
- */
- static inline bool isTypeIdValid(CIEC_ANY::EDataTypeID typeId) {
- return typeId >= CIEC_ANY::e_BOOL && typeId <= CIEC_ANY::e_WSTRING;
- }
+ /**
+ * Returns the OPC UA data type that correspond to the IEC 61131-3 type
+ * @param paAnyType IEC 61131-3 type
+ * @return The OPC UA type pointer, or 0 if not found
+ */
+ static const UA_DataType *getOPCUATypeFromAny(const CIEC_ANY& paAnyType);
- /**
- * Convert forte DataType (CIEC_...) to the corresponding OPC UA datatype.
- *
- * @param typeId type id of the forte datatype
- * @param src source data
- * @param dst the value of src will be converted and stored in dst. It has to be initialized before.
- * @return false if type is not supported
- */
- static inline bool convertToOpcUa_typeId(CIEC_ANY::EDataTypeID typeId, const CIEC_ANY *src, void *dst) {
- if (!COPC_UA_Helper::isTypeIdValid(typeId))
- return false;
- return COPC_UA_Helper::mapForteTypeIdToOpcUa[typeId].get(src, dst);
- }
+ /**
+ * Converts any IEC 61131-3 type to its OPC UA Type
+ * @param paSrcAny Input to be converted
+ * @param paDest Already allocated memory where to store
+ * @return The size in the destination it was used
+ */
+ static size_t convertToOPCUAType(const CIEC_ANY& paSrcAny, void* paDest);
- /**
- * Convert OPC UA DataType to the corresponding forte DataType (CIEC_...).
- *
- * @param typeId type id of the forte datatype
- * @param src source data
- * @param dst the value of src will be converted and stored in dst. It has to be initialized before.
- * @return false if type is not supported
- */
- static inline bool convertFromUa_typeId(CIEC_ANY::EDataTypeID typeId, const void *src, CIEC_ANY *dst) {
- if (!COPC_UA_Helper::isTypeIdValid(typeId))
- return false;
- return COPC_UA_Helper::mapForteTypeIdToOpcUa[typeId].set(src, dst);
- }
+ /**
+ * Converts an OPC UA Type into its IEC 61131-3 type
+ * @param paSrc Input to be converted
+ * @param paDestAny Place to store
+ * @return The size of the source that was used
+ */
+ static size_t convertFromOPCUAType(const void *paSrc, CIEC_ANY &paDestAny);
+
+ /**
+ * Fills a variant using the information from a CIEC_ANY type
+ * @param paDataValue variant to fill
+ * @param paDataSource source of information
+ */
+ static void fillVariant(UA_Variant &paVariant, const CIEC_ANY &paDataSource);
+
+ /**
+ * Parent class with the information for exchanging data between the layer and the handlers.
+ * This is needed because the two childs, send and receive differs in the fact that the data is
+ * const or no and some ugly cast will be needed. If these is not a problem, the two childs could be
+ * deleted and use just the parent
+ */
+ class UA_Variables_handle {
+ public:
+ explicit UA_Variables_handle(size_t paSize) :
+ mFailed(false), mOffset(0), mSize(paSize) {
+ }
+
+ virtual ~UA_Variables_handle() {
+ }
+
+ bool mFailed;
+ size_t mOffset;
+ size_t mSize;
+ private:
+ UA_Variables_handle(const UA_Variables_handle &paObj);
+ UA_Variables_handle& operator=(const UA_Variables_handle& other);
+
+ };
+
+ /**
+ * Context given to the layer by the handler including the new data that has arrive
+ */
+ class UA_RecvVariable_handle : public UA_Variables_handle {
+ public:
+ explicit UA_RecvVariable_handle(size_t paSize) :
+ UA_Variables_handle(paSize) {
+ mData = new const UA_Variant*[mSize];
+ }
+
+ virtual ~UA_RecvVariable_handle() {
+ delete[] mData;
+ }
+
+ const UA_Variant **mData;
+ private:
+ UA_RecvVariable_handle(const UA_RecvVariable_handle &paObj);
+ UA_RecvVariable_handle& operator=(const UA_RecvVariable_handle& other);
+ };
+
+ /**
+ * Context given to the handler by the layer including the new data to be sent
+ */
+ class UA_SendVariable_handle : public UA_Variables_handle {
+ public:
+ explicit UA_SendVariable_handle(size_t paSize) :
+ UA_Variables_handle(paSize) {
+ mData = new UA_Variant*[mSize];
+ }
+
+ ~UA_SendVariable_handle() {
+ delete[] mData;
+ }
+
+ UA_Variant **mData;
+ private:
+ UA_SendVariable_handle(const UA_SendVariable_handle &paObj);
+ UA_SendVariable_handle& operator=(const UA_SendVariable_handle& other);
+ };
+
+
+ /**
+ * Check if a browsepath is valid
+ * @param paBrowsepath browsepath to be checked
+ * @return True if the browsepath is valid, false otherwise
+ */
+ static bool isBrowsePathValid(const char *paBrowsepath);
+
+ /**
+ * Get the node id of the node which is represented by the given path in a remote server
+ * @param paClient Client to use to look for the node ID
+ * @param paNodePathConst Browsepath of the remote node
+ * @param paParentNodeId Place to store the parent node ID of the requested node
+ * @param paFoundNodeId Place to store the node ID of the requested node
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ static UA_StatusCode getRemoteNodeForPath(UA_Client &paClient, const char *paNodePathConst, UA_NodeId **paParentNodeId, UA_NodeId **paFoundNodeId);
+
+ /**
+ * Prepare the browse request from a browsepath
+ * @param paNodePathConst Browsepath to be looked for
+ * @param paBrowsePaths Place to store the browse request
+ * @param paFolderCount Place to store the amount of folders in the browse request
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ static UA_StatusCode prepareBrowseArgument(const char *paNodePathConst, UA_BrowsePath **paBrowsePaths, size_t *paFolderCount);
+
+ /**
+ * Release all memory alloacted in prepareBrowseArgument. It should be called when paBrowsePaths in prepareBrowseArgument is not used anymore
+ * @param paBrowsePaths Browse request returned by prepareBrowseArgument
+ * @param paPathLength Amount of folders returned by prepareBrowseArgument
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ static UA_StatusCode releaseBrowseArgument(UA_BrowsePath &paBrowsePaths, size_t paPathLength);
+
+ /**
+ * Allocated a UA_QualifiedName from a nodename which can have a semicolon to define the namespace. If no semicolon is found
+ * the passed deafult namespace is used
+ * @param paNodeName String containing the nodename
+ * @param paBrowseName Place to store the qualified name
+ * @param paDefaultNamespace Default namespace to be used if not present in paNodeName
+ * @return True if no error occurred, false otherwise
+ */
+ static bool getBrowsenameFromNodeName(const char *paNodeName, UA_UInt16 paDefaultNamespace, UA_QualifiedName &paBrowseName);
+
+ /**
+ * Maximum number of parameters in a browsename separated by a semicolon
+ */
+ static const size_t scmMaxNoOfParametersInBrowseName = 2;
+
+ private:
+
+ /**
+ * Function pointer definition to convert a IEC 61131-3 type to an OPC UA Type
+ */
+ typedef size_t (*convertFromIECToOPCUA)(const CIEC_ANY &, void *);
+
+ /**
+ * Function pointer definition to convert an OPC UA type to an IEC 61131-3 Type
+ */
+ typedef size_t (*convertFromOPCUAToIEC)(const void *, CIEC_ANY &);
+
+ /**
+ * Class that encapsulates, for each 61131-3 type, the map to the OPC UA type, and a transform to and from functions
+ */
+ class UA_TypeConvert {
+ public:
+ UA_TypeConvert(const UA_DataType *paType, convertFromIECToOPCUA paToOPCUA, convertFromOPCUAToIEC paFromOPCUA) :
+ mType(paType), mToOPCUA(paToOPCUA), mFromOPCUA(paFromOPCUA) {
+ }
+ const UA_DataType *mType;
+ convertFromIECToOPCUA mToOPCUA;
+ convertFromOPCUAToIEC mFromOPCUA;
+ };
+ class UA_TypeConvert_external {
+ public:
+ UA_TypeConvert_external(const UA_DataType *paType, const CStringDictionary::TStringId paStringId) :
+ mType(paType), mStringId(paStringId) {
+ }
+ const UA_DataType *mType;
+ const CStringDictionary::TStringId mStringId;
+ };
+
+ /**
+ * Array of all conversion functions for the basic types
+ */
+ static const UA_TypeConvert scmMapForteTypeIdToOpcUa[];
+
+ /**
+ * Array of conversion functions for added types
+ */
+ static const UA_TypeConvert_external scmExternalMapForteTypeIdToOpcUa[];
+
+ /**
+ * If the type being looked for is not a basic one, it will look in the externally added types
+ * @param paAnyType IEC 61131-3 container which is used to look for the corresponding OPC UA type
+ * @return The OPC UA type pointer, or 0 if not found
+ */
+ static const UA_DataType *getExternalOPCUATypeFromAny(const CIEC_ANY& paAnyType);
+
+ /**
+ * Look for the first occurrence of an existing node from a browse path result
+ * @param paBrowsePathsResults Result of browse path service
+ * @param folderCnt Number of folders in the paBrowsePathsResults
+ * @return The offset to first existing folder, -1 if no folder exist
+ */
+ static int getFolderOffset(UA_BrowsePathResult *paBrowsePathsResults, size_t folderCnt);
+
+ /**
+ * Copy the found node id and its parent from a browse result
+ * @param paFoundNodeId Place to store the found node ID
+ * @param paBrowsePathsResults Browse path results where to look for
+ * @param paBoundFolderOffset Offset to use to copy the node IDs
+ * @param paParentNodeId Place to store the parent node ID
+ * @param paFolderCnt Size of the browse result
+ */
+ static void copyNodeIds(UA_BrowsePathResult *paBrowsePathsResults, size_t paFolderCnt, int paFoundFolderOffset, UA_NodeId **paParentNodeId,
+ UA_NodeId **paFoundNodeId);
};
#endif //FORTE_OPCUA_HELPER_H
diff --git a/src/modules/opc_ua/opcua_layer.cpp b/src/modules/opc_ua/opcua_layer.cpp
index 535c3eb..a23e564 100644
--- a/src/modules/opc_ua/opcua_layer.cpp
+++ b/src/modules/opc_ua/opcua_layer.cpp
@@ -1,1064 +1,227 @@
/*******************************************************************************
- * Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>,
+ * Copyright (c) 2015-2019 Florian Froschermeier <florian.froschermeier@tum.de>,
* fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Froschermeier
* - initial integration of the OPC-UA protocol
* Stefan Profanter
* - refactoring and adaption to new concept
+ * Jose Cabral:
+ * - refactoring to cleaner architecture
*******************************************************************************/
#include "opcua_layer.h"
-#include "opcua_handler.h"
-#include "opcua_client_handler.h"
-#include "../../core/datatypes/forte_date_and_time.h"
+#include "opcua_helper.h"
+#include "opcua_local_handler.h"
#include "../../core/cominfra/basecommfb.h"
#include "../../arch/devlog.h"
#include <forte_string.h>
-#include <forte_printer.h>
#include <criticalregion.h>
-#include <string>
+#include "opcua_action_info.h"
+#include "opcua_remote_handler.h"
using namespace forte::com_infra;
-// method call timeout in seconds. Within this time the method call has to return a value
-#define METHOD_CALL_TIMEOUT 4
-
-struct AsyncCallPayload {
- UA_Variant *variants;
- unsigned int variantsSize;
-};
-
-UA_Boolean running = true;
-UA_Boolean clientRunning = false;
-
COPC_UA_Layer::COPC_UA_Layer(CComLayer *paUpperLayer, CBaseCommFB *paComFB) :
- CComLayerAsync(paUpperLayer, paComFB), useClient(false), clientSdConverter(
- NULL), clientRdConverter(NULL), mInterruptResp(e_Nothing), fbNodeId(
- NULL), fbNodeIdParent(NULL), methodNodeId(NULL), remoteNodeClass(
- UA_NODECLASS_UNSPECIFIED), sendDataNodeIds(NULL), readDataNodeIds(
- NULL), clientEndpointUrl(NULL), clientNodePath(NULL), clientMutex(
- NULL), mutexServerMethodCall(), serverMethodCallResultReady(false), referencedNodes() {
- // constructor list initialization
-
+ CComLayer(paUpperLayer, paComFB), mInterruptResp(e_Nothing), mHandler(0), mActionInfo(0), mDataAlreadyPresent(false) {
}
COPC_UA_Layer::~COPC_UA_Layer() {
- // all the stuff is cleaned up in closeConnection()
-}
-
-void COPC_UA_Layer::splitUrlAndPath(const char *fullUrl, const char** endpoint,
- const char **nodePath, CIEC_STRING& paResult) {
-
- paResult.clear();
- if (strlen(fullUrl) == 0) {
- return;
- }
-
- paResult = fullUrl;
- char *idStr = paResult.getValue();
-
- char *endpointPtr = strtok(idStr, "#");
-
- if (endpointPtr == NULL) {
- return;
- }
-
- if (endpoint) {
- *endpoint = endpointPtr;
- }
-
- if (nodePath != NULL) {
- *nodePath = strtok(NULL, "#");
- }
- if (nodePath != NULL && *nodePath == NULL) {
- // # not found, check if it is path or endpoint
- if (idStr[0] == '/') {
- // full url is only node path
- if (endpoint) {
- *endpoint = NULL;
- }
- *nodePath = idStr;
- } else {
- // full url is only endpoint
- if (endpoint) {
- *endpoint = idStr;
- }
- *nodePath = NULL;
- }
- }
}
EComResponse COPC_UA_Layer::openConnection(char *paLayerParameter) {
+ EComResponse response = e_InitTerminated;
- getExtEvHandler<COPC_UA_Handler>().referencedNodesDecrement(&referencedNodes, this, true);
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iter = referencedNodes.begin(); iter != referencedNodes.end(); ++iter) {
- UA_NodeId_delete((*iter));
- }
- referencedNodes.clearAll();
+ if(checkTypesFromInterface()) {
+ mActionInfo = CActionInfo::getActionInfoFromParams(paLayerParameter, *this);
+ if(mActionInfo) {
+ mHandler =
+ (mActionInfo->isRemote()) ? static_cast<COPC_UA_HandlerAbstract*>(&getExtEvHandler<COPC_UA_Remote_Handler>()) :
+ static_cast<COPC_UA_HandlerAbstract*>(&getExtEvHandler<COPC_UA_Local_Handler>());
- if (fbNodeId != NULL) {
- DEVLOG_WARNING("OPC UA: Already connected. Nothing to do.\n");
- return e_InitTerminated;
- }
-
- const char *endpoint = NULL;
- const char *nodePath = NULL;
- CIEC_STRING lastNode;
- CIEC_STRING result;
- splitUrlAndPath(paLayerParameter, &endpoint, &nodePath, result);
-
- useClient = getCommFB()->getComServiceType() == e_Client ||
- ((getCommFB()->getComServiceType() == e_Subscriber || getCommFB()->getComServiceType() == e_Publisher) && endpoint != NULL);
-
- if (useClient && !endpoint) {
- DEVLOG_ERROR("OPC UA: Invalid client identifier. Endpoint URL must be separated by hash '#' from the node path. Given: %s\n", paLayerParameter);
- return e_InitTerminated;
- }
-
- if (useClient && !nodePath) {
- DEVLOG_ERROR("OPC UA: Invalid client identifier. Node path must be given after the hash '#'. Given: %s\n", paLayerParameter);
- return e_InitTerminated;
- }
-
- // Create all the nodes up to the given node (ID parameter of the FB)
- if (!useClient) {
- UA_StatusCode retVal;
- CSinglyLinkedList<UA_NodeId *> nodesAlongPath = CSinglyLinkedList<UA_NodeId *>();
- if ((retVal = getExtEvHandler<COPC_UA_Handler>().getNodeForPath(&fbNodeId, paLayerParameter, true, NULL, NULL, NULL, NULL, &nodesAlongPath)) != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not get node for path: '%s': %s\n", paLayerParameter, UA_StatusCode_name(retVal));
- return e_InitTerminated;
- }
- getExtEvHandler<COPC_UA_Handler>().referencedNodesIncrement(&nodesAlongPath, this);
-
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iter = nodesAlongPath.begin(); iter != nodesAlongPath.end(); ++iter) {
- referencedNodes.pushBack((*iter));
- }
- }
-
- EComResponse response = e_InitOk;
- switch (getCommFB()->getComServiceType()) {
- case e_Publisher:
- if (useClient) {
- if (getCommFB()->getNumSD() != 1) {
- DEVLOG_ERROR("OPC UA: A Publisher for writing an OPC UA variable only supports one SD. %s\n", getCommFB()->getInstanceName());
- response = e_InitTerminated;
- break;
+ if(UA_STATUSCODE_GOOD == mHandler->initializeAction(*mActionInfo)) {
+ response = e_InitOk;
}
- DEVLOG_DEBUG("OPC UA: Creating OPC UA Client %s\n", getCommFB()->getInstanceName());
- response = this->createClient(endpoint, nodePath, false);
- } else {
- // Make sure all the nodes exist and have the corresponding variable
- DEVLOG_DEBUG("OPC UA: Creating OPC UA Nodes for publisher %s\n", getCommFB()->getInstanceName());
- response = this->createPubSubNodes(&this->sendDataNodeIds, getCommFB()->getNumSD(), true);
}
- break;
- case e_Subscriber:
- {
- char* subNodeParameter = strrchr(paLayerParameter, '/');
- *subNodeParameter='\0';
- subNodeParameter++;
- lastNode = subNodeParameter;
- if (useClient) {
- if (getCommFB()->getNumRD() != 1) {
- DEVLOG_ERROR("OPC UA: A Subscriber for subscribing on an OPC UA variable only supports one RD. %s\n", getCommFB()->getInstanceName());
- response = e_InitTerminated;
- break;
- }
- DEVLOG_DEBUG("OPC UA: Creating subscription. %s\n", getCommFB()->getInstanceName());
- this->createClient(endpoint, nodePath, true);
- lastNode = nodePath;
- response = this->createSubscription(&this->sendDataNodeIds, getCommFB()->getNumSD(), false, lastNode.getValue());
- } else {
- DEVLOG_DEBUG("OPC UA: Creating OPC UA Nodes for subscriber %s\n", getCommFB()->getInstanceName());
- response = this->createPubSubNodes(&this->readDataNodeIds, getCommFB()->getNumRD(), false);
- }
- break;
- }
- case e_Server:
- DEVLOG_DEBUG("OPC UA: Creating OPC UA Method for server %s\n", getCommFB()->getInstanceName());
- response = this->createMethodNode();
- break;
- case e_Client:
- DEVLOG_DEBUG("OPC UA: Creating OPC UA Client %s\n", getCommFB()->getInstanceName());
- response = this->createClient(endpoint, nodePath, false);
- break;
- default:
- DEVLOG_WARNING("OPC UA: Invalid Comm Service Type for Function Block\n");
}
return response;
}
void COPC_UA_Layer::closeConnection() {
-
- getExtEvHandler<COPC_UA_Handler>().referencedNodesDecrement(&referencedNodes, this, true);
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iter = referencedNodes.begin(); iter != referencedNodes.end(); ++iter) {
- UA_NodeId_delete((*iter));
- }
- referencedNodes.clearAll();
-
- if (fbNodeId != NULL) {
- UA_NodeId_delete(fbNodeId);
- fbNodeId = NULL;
- }
- if (methodNodeId != NULL) {
- UA_NodeId_delete(methodNodeId);
- methodNodeId = NULL;
- }
- this->deleteNodeIds(&sendDataNodeIds, getCommFB()->getNumSD());
- this->deleteNodeIds(&readDataNodeIds, getCommFB()->getNumRD());
- if (clientSdConverter) {
- forte_free(clientSdConverter);
- clientSdConverter = NULL;
- }
- if (clientRdConverter) {
- forte_free(clientRdConverter);
- clientRdConverter = NULL;
- }
- if (clientEndpointUrl) {
- forte_free(clientEndpointUrl);
- clientEndpointUrl = NULL;
- }
- if (clientNodePath) {
- forte_free(clientNodePath);
- clientNodePath = NULL;
- }
- if (fbNodeIdParent) {
- UA_NodeId_delete(fbNodeIdParent);
- fbNodeIdParent = NULL;
+ if(mHandler) {
+ mHandler->uninitializeAction(*mActionInfo);
+ mHandler = 0;
+ delete mActionInfo;
}
}
-/**
- * This method is required to inline initialize the connection point.
- */
-static const SConnectionPoint& getFirstListEntry(
- const CSinglyLinkedList<SConnectionPoint>& list) {
- CSinglyLinkedList<SConnectionPoint>::Iterator it = list.begin();
- return *it;
-}
+EComResponse COPC_UA_Layer::recvData(const void *paData, unsigned int) {
+ mInterruptResp = e_ProcessDataOk;
-void COPC_UA_Layer::deleteNodeIds(struct FB_NodeIds **nodeIds,
- unsigned int currentSize) {
- if (*nodeIds == NULL)
- return;
- for (unsigned int j = 0; j < currentSize; j++) {
- if ((*nodeIds)[j].functionBlockId != NULL)
- UA_NodeId_delete((*nodeIds)[j].functionBlockId);
- if ((*nodeIds)[j].functionBlockId != NULL)
- UA_NodeId_delete((*nodeIds)[j].variableId);
- }
- forte_free(*nodeIds);
- (*nodeIds) = NULL;
-}
+ const COPC_UA_Helper::UA_RecvVariable_handle *handleRecv = static_cast<const COPC_UA_Helper::UA_RecvVariable_handle *>(paData);
-bool COPC_UA_Layer::getPortConnectionInfo(unsigned int portIndex, bool isSD,
- const CFunctionBlock **connectedToFb, const char **connectedToPortName,
- const UA_TypeConvert **convert) const {
- int portId = portIndex + 2;
- /* Retrieve Publisher, Connection and Signals Source Function Block Information */
- const SFBInterfaceSpec *interfaceSpec = getCommFB()->getFBInterfaceSpec();
- const CStringDictionary::TStringId portNameId =
- isSD ?
- interfaceSpec->m_aunDINames[portId] :
- interfaceSpec->m_aunDONames[portId];
-
- DEVLOG_DEBUG("OPC UA: Processing %s signal %s at port %i.\n",
- isSD ? "publish" : "subscribe",
- CStringDictionary::getInstance().get(portNameId), portId);
-
- const CDataConnection *portConnection =
- isSD ?
- getCommFB()->getDIConnection(portNameId) :
- getCommFB()->getDOConnection(portNameId);
- if (portConnection == NULL) {
- DEVLOG_ERROR(
- "OPC UA: Got invalid port connection on FB %s at port %s. It must be connected to another FB.\n",
- this->getCommFB()->getInstanceName(),
- CStringDictionary::getInstance().get(portNameId));
- return false;
- }
-
- //TODO for now we assume that the subscriber connection only has one destination. Needs fix!
-
- if (!isSD && portConnection->getDestinationList().isEmpty()) {
- DEVLOG_WARNING("OPC UA: Subscriber does not have any connection.\n");
- return false;
- }
-
- const SConnectionPoint remoteConnectionPoint =
- isSD ?
- portConnection->getSourceId() :
- getFirstListEntry(portConnection->getDestinationList());
- if ((*connectedToFb = remoteConnectionPoint.mFB) == NULL) {
- return false;
- }
- const SFBInterfaceSpec *sourceInterfaceSpec =
- (*connectedToFb)->getFBInterfaceSpec();
- const CStringDictionary::TStringId sourceNameId =
- isSD ?
- sourceInterfaceSpec->m_aunDONames[remoteConnectionPoint.mPortId] :
- sourceInterfaceSpec->m_aunDINames[remoteConnectionPoint.mPortId];
- *connectedToPortName = CStringDictionary::getInstance().get(sourceNameId);
-
- const CIEC_ANY *remotePort =
- isSD ?
- (*connectedToFb)->getDOFromPortId(remoteConnectionPoint.mPortId) :
- (*connectedToFb)->getDIFromPortId(remoteConnectionPoint.mPortId);
-
- if (!COPC_UA_Helper::isTypeIdValid(remotePort->getDataTypeID())) {
- DEVLOG_ERROR_VAR(
- const CStringDictionary::TStringId connectedToType = isSD ? sourceInterfaceSpec->m_aunDODataTypeNames[remoteConnectionPoint.mPortId] : sourceInterfaceSpec->m_aunDIDataTypeNames[remoteConnectionPoint.mPortId]);
- DEVLOG_ERROR("OPC UA: Mapping of type %s to OPC UA not defined.\n",
- CStringDictionary::getInstance().get(connectedToType));
- return false;
- }
- *convert =
- &COPC_UA_Helper::mapForteTypeIdToOpcUa[remotePort->getDataTypeID()];
-
- return true;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::createSubscription(
- struct FB_NodeIds **nodeIds, unsigned int numPorts, bool isSD,
- char* subnodePath) {
- UA_NodeId objectsFolder = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
-
- const UA_TypeConvert *conv;
- const CFunctionBlock *connectedToFb = NULL;
- const char *connectedToName = NULL;
-
- if (!getPortConnectionInfo(0, isSD, &connectedToFb, &connectedToName,
- &conv)) {
- deleteNodeIds(nodeIds, 0);
- return e_InitInvalidId;
- }
-
- size_t len = strlen(subnodePath) + 1; // include nullbyte
- char *sourceVarBrowseName = static_cast<char *>(forte_malloc(
- sizeof(char) * len));
- forte_snprintf(sourceVarBrowseName, len, "%s", subnodePath);
- UA_StatusCode retVal = getExtEvHandler<COPC_UA_Handler>().getNodeForPath(&fbNodeId, sourceVarBrowseName, false,
- &objectsFolder);
- forte_free(sourceVarBrowseName);
-
- const UA_TypeConvert *convert = conv;
- void *varValue = UA_new(conv->type);
- UA_init(varValue, conv->type);
-
- UA_NodeId monItem = UA_NODEID_NUMERIC(1, 50217);
- getExtEvHandler<COPC_UA_Client_Handler>().addMonitoringItem(uaClient, this, monItem, conv ,0);
-
- return e_InitOk;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::createPubSubNodes(
- struct FB_NodeIds **nodeIds, unsigned int numPorts, bool isSD) {
- if (*nodeIds != NULL) {
- DEVLOG_ERROR("OPC UA: Publish/Subscribe Nodes already initialized.\n");
- return e_InitInvalidId;
- }
-
- if (numPorts == 0) {
- DEVLOG_ERROR(
- "OPC UA: OPC UA Publisher/Subscriber without SD/RD Signal, pure event handling\n");
- return e_InitInvalidId;
- }
-
- *nodeIds = static_cast<struct FB_NodeIds *>(forte_malloc(
- sizeof(struct FB_NodeIds) * numPorts));
-
- const CIEC_ANY *initData =
- isSD ? getCommFB()->getSDs() : getCommFB()->getRDs();
-
- for (unsigned int i = 0; i < numPorts; i++) {
-
- const CFunctionBlock *connectedToFb = NULL;
- const char *connectedToName = NULL;
- const UA_TypeConvert *conv;
-
- if (!getPortConnectionInfo(i, isSD, &connectedToFb, &connectedToName,
- &conv)) {
- deleteNodeIds(nodeIds, i);
- return e_InitInvalidId;
- }
-
- UA_StatusCode retVal;
-
- {
- const char *subnodePath = connectedToFb->getInstanceName();
- // create/get node for connected FB
- size_t len = strlen(subnodePath) + 2; // include slash and nullbyte
- char *fbBrowseName = static_cast<char *>(forte_malloc(sizeof(char) * len));
- forte_snprintf(fbBrowseName, len, "/%s", subnodePath);
- UA_NodeId newNodeType = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
- CSinglyLinkedList<UA_NodeId *> nodesAlongPath = CSinglyLinkedList<
- UA_NodeId *>();
- retVal = getExtEvHandler<COPC_UA_Handler>().getNodeForPath(&(*nodeIds)[i].functionBlockId, fbBrowseName, true, fbNodeId, &newNodeType, NULL, NULL,
- &nodesAlongPath);
- forte_free(fbBrowseName);
-
- getExtEvHandler<COPC_UA_Handler>().referencedNodesIncrement(&nodesAlongPath, this);
-
- for (CSinglyLinkedList<UA_NodeId *>::Iterator iter =
- nodesAlongPath.begin(); iter != nodesAlongPath.end(); ++iter) {
- referencedNodes.pushBack((*iter));
- }
- }
-
- if (retVal == UA_STATUSCODE_GOOD) {
- // create/get variable node for port on connected FB
- size_t len = strlen(connectedToName) + 2; // include slash and nullbyte
- char *sourceVarBrowseName = static_cast<char *>(forte_malloc(
- sizeof(char) * len));
- forte_snprintf(sourceVarBrowseName, len, "/%s", connectedToName);
- retVal = getExtEvHandler<COPC_UA_Handler>().getNodeForPath(&(*nodeIds)[i].variableId, sourceVarBrowseName, false,
- (*nodeIds)[i].functionBlockId);
- forte_free(sourceVarBrowseName);
- if (retVal == UA_STATUSCODE_GOOD) {
- if ((*nodeIds)[i].variableId == NULL) {
- // we need to create the variable
-
- (*nodeIds)[i].convert = conv;
- void *varValue = UA_new(conv->type);
- UA_init(varValue, conv->type);
- (*nodeIds)[i].variableId = UA_NodeId_new();
- if (!conv->get(&initData[i], varValue)) {
- DEVLOG_WARNING(
- "OPC UA: Cannot convert value of port %d for initialization",
- i);
+ if(!handleRecv->mFailed) {
+ if(handleRecv->mSize) {
+ if(handleRecv->mSize + handleRecv->mOffset <= getCommFB()->getNumRD()) {
+ CIEC_ANY *RDs = getCommFB()->getRDs() + handleRecv->mOffset;
+ for(size_t i = 0; i < handleRecv->mSize; i++) {
+ if(UA_Variant_isScalar(handleRecv->mData[i]) && handleRecv->mData[i]->data
+ && handleRecv->mData[i]->type == COPC_UA_Helper::getOPCUATypeFromAny(RDs[i])) {
+ COPC_UA_Helper::convertFromOPCUAType(handleRecv->mData[i]->data, RDs[i]);
+ } else {
+ DEVLOG_ERROR("[OPC UA LAYER]: RD_%d of FB %s has no data, is not a scalar or there is a type mismatch\n", handleRecv->mOffset + i,
+ getCommFB()->getInstanceName());
+ mInterruptResp = e_ProcessDataRecvFaild;
+ break;
}
- retVal = getExtEvHandler<COPC_UA_Handler>().createVariableNode((*nodeIds)[i].functionBlockId, connectedToName, conv->type,
- varValue, (*nodeIds)[i].variableId, !isSD);
- UA_delete(varValue, conv->type);
- if (retVal == UA_STATUSCODE_GOOD && !isSD) {
- getExtEvHandler<COPC_UA_Handler>().registerNodeCallBack((*nodeIds)[i].variableId, this, conv, i);
- }
- } else if (!isSD) {
- // the node already exists. It could be the case that the node was previously created
- // for a subscribe FB, which sets the access to read only. Since this is now a publish FB
- // we need to change the access to read & write
- if (UA_STATUSCODE_GOOD != getExtEvHandler<COPC_UA_Handler>().updateNodeUserAccessLevel((*nodeIds)[i].variableId,
- UA_ACCESSLEVELMASK_READ & UA_ACCESSLEVELMASK_WRITE)) {
- DEVLOG_WARNING("OPC UA: Cannot set write permission of node for port %d", i);
- }
- }
- } // else if retVal = UA_STATUSCODE_GOOD the node already exists
-
- }
-
- if (retVal != UA_STATUSCODE_GOOD) {
- deleteNodeIds(nodeIds, i + 1);
- return e_InitInvalidId;
- }
- }
- return e_InitOk;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::createMethodNode() {
-
- DEVLOG_DEBUG("OPC UA: OPC UA creating method for %s\n",
- getCommFB()->getInstanceName());
-
- if (sendDataNodeIds != NULL || readDataNodeIds != NULL) {
- DEVLOG_ERROR("OPC UA: Method node already initialized.\n");
- return e_InitInvalidId;
- }
-
- if (this->getCommFB()->getNumRD() == 0
- && this->getCommFB()->getNumSD() == 0) {
- DEVLOG_INFO(
- "OPC UA: OPC UA Method without SD/RD Signal, pure event handling\n");
- }
-
- // create the list of input arguments of the method which corresponds to the RD ports (i.e. output of the FB)
- UA_Argument *inputArguments;
- if (createMethodArguments(&inputArguments, getCommFB()->getNumRD(), false)
- != e_InitOk) {
- return e_InitInvalidId;
- }
-
- UA_Argument *outputArguments;
- if (createMethodArguments(&outputArguments, getCommFB()->getNumSD(), true)
- != e_InitOk) {
- UA_Array_delete(inputArguments, getCommFB()->getNumRD(),
- &UA_TYPES[UA_TYPES_ARGUMENT]);
- return e_InitInvalidId;
- }
-
- forte::com_infra::EComResponse result = e_InitOk;
-
- UA_StatusCode retVal;
- const char* subnodePath = getCommFB()->getInstanceName();
- if ((retVal = getExtEvHandler<COPC_UA_Handler>().createMethodNode(fbNodeId, 1, subnodePath, COPC_UA_Layer::onServerMethodCall, this,
- getCommFB()->getNumRD(),
- inputArguments, getCommFB()->getNumSD(), outputArguments, methodNodeId)) !=
- UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: OPC UA could not create method node: %s\n", UA_StatusCode_name(retVal));
- result = e_InitInvalidId;
- }
- UA_Array_delete(inputArguments, getCommFB()->getNumRD(),
- &UA_TYPES[UA_TYPES_ARGUMENT]);
- UA_Array_delete(outputArguments, getCommFB()->getNumSD(),
- &UA_TYPES[UA_TYPES_ARGUMENT]);
-
- return result;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::createMethodArguments(
- UA_Argument **arguments, unsigned int numPorts, bool isSD) {
- *arguments = static_cast<UA_Argument *>(UA_Array_new(numPorts,
- &UA_TYPES[UA_TYPES_ARGUMENT]));
-
- for (unsigned int i = 0; i < numPorts; i++) {
-
- UA_Argument *arg = &(*arguments)[i];
- UA_Argument_init(arg);
- arg->arrayDimensionsSize = 0;
- arg->arrayDimensions = NULL;
-
- const CFunctionBlock *connectedToFb = NULL;
- const char *connectedToName = NULL;
- const UA_TypeConvert *conv;
-
- if (!getPortConnectionInfo(i, isSD, &connectedToFb, &connectedToName,
- &conv)) {
- UA_Array_delete(*arguments, numPorts, &UA_TYPES[UA_TYPES_ARGUMENT]);
- return e_InitInvalidId;
- }
-
- arg->dataType = conv->type->typeId;
- arg->description = UA_LOCALIZEDTEXT_ALLOC("en-US", "Method parameter");
- arg->name = UA_STRING_ALLOC(connectedToFb->getInstanceName());
- arg->valueRank = -1;
-
- }
-
- return e_InitOk;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::clientCreateConverter(
- const UA_TypeConvert **converterList[], unsigned int numPorts, bool isSD) {
- if (*converterList != NULL) {
- DEVLOG_ERROR("OPC UA: Converter list already initialized.\n");
- return e_InitInvalidId;
- }
-
- if (numPorts == 0)
- return e_InitOk;
-
- *converterList = static_cast<const UA_TypeConvert **>(forte_malloc(
- sizeof(UA_TypeConvert *) * numPorts));
-
- for (unsigned int i = 0; i < numPorts; i++) {
-
- const CFunctionBlock *connectedToFb = NULL;
- const char *connectedToName = NULL;
-
- if (!getPortConnectionInfo(i, isSD, &connectedToFb, &connectedToName,
- &(*converterList)[i])) {
- forte_free(*converterList);
- return e_InitInvalidId;
- }
- }
- return e_InitOk;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::clientConnect() {
- UA_ClientState state = UA_Client_getState(uaClient);
-
- if (state
- == UA_CLIENTSTATE_CONNECTED&& fbNodeId != NULL && fbNodeIdParent != NULL)
- // ready. Nothing to do
- return e_InitOk;
-
- // other thread may currently create nodes for the same path, thus mutex
- CCriticalRegion criticalRegion(*this->clientMutex);
-
- if (state != UA_CLIENTSTATE_CONNECTED) {
- if (fbNodeId != NULL) {
- UA_NodeId_delete(fbNodeId);
- fbNodeId = NULL;
- }
- if (fbNodeIdParent != NULL) {
- UA_NodeId_delete(fbNodeIdParent);
- fbNodeIdParent = NULL;
- }
-
- DEVLOG_INFO("OPC UA: Client connecting to %s\n", clientEndpointUrl);
- UA_StatusCode retVal = UA_Client_connect(uaClient, clientEndpointUrl);
-
- if (retVal != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR(
- "OPC UA: Could not connect client to endpoint %s. Error: %s\n",
- clientEndpointUrl, UA_StatusCode_name(retVal));
- return e_InitTerminated;
- }
- }
-
- UA_StatusCode retVal = getExtEvHandler<COPC_UA_Handler>().getNodeForPath(&fbNodeId, clientNodePath, false, NULL, NULL, &fbNodeIdParent, this->uaClient);
- if (retVal != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR(
- "OPC UA: Could not get node for path from server '%s': '%s'. %s\n",
- clientEndpointUrl, clientNodePath, UA_StatusCode_name(retVal));
- return e_InitTerminated;
- }
-
- if (fbNodeId == NULL) {
- DEVLOG_ERROR(
- "OPC UA: Could not find the method node on the server '%s': '%s'\n",
- clientEndpointUrl, clientNodePath);
- return e_InitTerminated;
- }
-
- if (fbNodeIdParent == NULL) {
- DEVLOG_ERROR(
- "OPC UA: Could not find the parent node of the method on the server '%s': '%s'\n",
- clientEndpointUrl, clientNodePath);
- return e_InitTerminated;
- }
-
- return e_InitOk;
-}
-
-forte::com_infra::EComResponse COPC_UA_Layer::createClient(const char* endpoint,
- const char* nodePath, bool subscription) {
-
- if (clientEndpointUrl != NULL || clientNodePath != NULL) {
- DEVLOG_ERROR("OPC UA: Client already initialized.");
- return e_InitTerminated;
- }
-
- // start the async call thread
- this->start();
-
- this->uaClient = getExtEvHandler<COPC_UA_Client_Handler>().getClientForEndpoint(endpoint, true, subscription, &clientMutex);
- if (!this->uaClient) {
- return e_InitTerminated;
- }
-
- size_t nodePathLen = strlen(nodePath);
- this->clientNodePath = (char*) forte_malloc(nodePathLen + 1);
- strcpy(this->clientNodePath, nodePath);
- while (nodePathLen && this->clientNodePath[nodePathLen - 1] == '/') {
- this->clientNodePath[nodePathLen - 1] = 0;
- nodePathLen--;
- }
-
- this->clientEndpointUrl = (char*) forte_malloc(strlen(endpoint) + 1);
- strcpy(this->clientEndpointUrl, endpoint);
-
- forte::com_infra::EComResponse resp = clientCreateConverter(
- &clientRdConverter, getCommFB()->getNumRD(), false);
- if (resp != e_InitOk)
- return resp;
-
- return clientCreateConverter(&clientSdConverter, getCommFB()->getNumSD(),
- true);
-
-}
-
-EComResponse COPC_UA_Layer::sendData(void *paData, unsigned int paSize) {
-
- EComResponse retVal = e_ProcessDataOk;
-
- if (getCommFB()->getComServiceType() == e_Server) {
- // continue method call
- serverMethodCallResultReady.inc();
- return retVal;
- }
-
- if (getCommFB()->getComServiceType() == e_Client) {
- return this->clientCallAsync(
- paSize ? static_cast<CIEC_ANY *>(paData) : NULL, paSize);
- }
-
- if (paSize == 0) {
- } else {
- const CIEC_ANY *SDs(static_cast<CIEC_ANY *>(paData));
-
- if (useClient) {
- // write variable value to remote server
- if (getCommFB()->getComServiceType() == e_Publisher)
- return this->clientCallAsync(static_cast<CIEC_ANY *>(paData), paSize);
- } else {
- // change variable value in locale server
- for (unsigned int i = 0; i < paSize; i++) {
- FB_NodeIds *ni = &this->sendDataNodeIds[i];
- if (getExtEvHandler<COPC_UA_Handler>().updateNodeValue(ni->variableId, &SDs[i], ni->convert) != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not convert publisher value for port %d to OPC UA.\n", i);
- retVal = e_ProcessDataDataTypeError;
- }
- }
- }
- }
- return retVal;
-}
-
-EComResponse COPC_UA_Layer::recvData(const void *pa_pvData, unsigned int) {
- mInterruptResp = e_ProcessDataRecvFaild;
-
- struct recvData_handle {
- const struct UA_TypeConvert *convert;
- unsigned int portIndex;
- const UA_Variant *data;
- };
-
- this->start();
-
-// if (getCommFB()->getNumRD() == 0) {
-// mInterruptResp = e_ProcessDataOk;
-// } else {
- const struct recvData_handle *handleRecv =
- static_cast<const recvData_handle *>(pa_pvData);
- if (!useClient) {
-
- if (getCommFB()->getNumRD() == 0) {
- mInterruptResp = e_ProcessDataOk;
- } else {
- const struct recvData_handle *handleRecv =
- static_cast<const recvData_handle *>(pa_pvData);
- // map variable value from local opc ua server to the FB
- if (UA_Variant_isScalar(handleRecv->data)
- && handleRecv->data->type == handleRecv->convert->type
- && handleRecv->data->data) {
- if (handleRecv->convert->set(handleRecv->data->data,
- &getCommFB()->getRDs()[handleRecv->portIndex])) {
- mInterruptResp = e_ProcessDataOk;
- getCommFB()->interruptCommFB(this);
}
} else {
- if (UA_Variant_isScalar(handleRecv->data) && handleRecv->data->data) {
- if (handleRecv->convert->set(handleRecv->data->data,
- &getCommFB()->getRDs()[handleRecv->portIndex])) {
- mInterruptResp = e_ProcessDataOk;
- handleAsyncEvent();
- }
-
- }
+ DEVLOG_ERROR("[OPC UA LAYER]: Receiving data for FB %s failed because the response size is %u with an offset of %u but the FB has %u RDs\n",
+ getCommFB()->getInstanceName(), handleRecv->mSize, handleRecv->mOffset, getCommFB()->getNumRD());
+ mInterruptResp = e_ProcessDataRecvFaild;
}
+ } else { //no data received. When remote writing this will happen
+ mInterruptResp = e_ProcessDataOk;
}
- } else {
- if (UA_Variant_isScalar(handleRecv->data) && handleRecv->data->data) {
- if (handleRecv->convert->set(handleRecv->data->data,
- &getCommFB()->getRDs()[handleRecv->portIndex])) {
- mInterruptResp = e_ProcessDataOk;
- handleAsyncEvent();
- }
+ } else { //this fail is logged in the handler
+ mInterruptResp = e_ProcessDataRecvFaild;
+ }
+
+ if(e_ProcessDataOk == mInterruptResp) {
+ if(getDataAlreadyPresentRead()) {
+ return e_Nothing; //won't trigger another external event on subscription
+ } else {
+ setDataAlreadyPresentRead(true);
+ return e_ProcessDataOk; //will trigger an external event on subscription
}
}
+
return mInterruptResp;
}
-forte::com_infra::EComResponse COPC_UA_Layer::clientCallAsync(
- const CIEC_ANY *sd, unsigned int sdSize) {
-
- UA_Variant *inputs = NULL;
-
- if (sdSize > 0) {
- inputs = static_cast<UA_Variant *>(UA_Array_new(sdSize,
- &UA_TYPES[UA_TYPES_VARIANT]));
-
- for (unsigned int i = 0; i < sdSize; i++) {
- UA_Variant_init(&inputs[i]);
- void *varValue = UA_new(clientSdConverter[i]->type);
- UA_init(varValue, clientSdConverter[i]->type);
- if (!clientSdConverter[i]->get(&sd[i], varValue)) {
- DEVLOG_ERROR(
- "OPC UA: Client could not convert input SD_%d to OPC UA.\n", i + 1);
- UA_delete(varValue, clientSdConverter[i]->type);
- UA_Array_delete(inputs, sdSize, &UA_TYPES[UA_TYPES_VARIANT]);
- return e_ProcessDataDataTypeError;
- }
- UA_Variant_setScalarCopy(&inputs[i], varValue,
- clientSdConverter[i]->type);
- UA_delete(varValue, clientSdConverter[i]->type);
- }
- }
-
- struct AsyncCallPayload *payload =
- static_cast<struct AsyncCallPayload *>(forte_malloc(
- sizeof(AsyncCallPayload)));
- payload->variants = inputs;
- payload->variantsSize = sdSize;
- if (callAsync(payload) == 0)
- return e_ProcessDataSendFailed;
- else
- return e_Nothing;
+EComResponse COPC_UA_Layer::sendData(void *, unsigned int) {
+ return (UA_STATUSCODE_GOOD == mHandler->executeAction(*mActionInfo) ? e_ProcessDataOk : e_ProcessDataDataTypeError);
}
-EComResponse COPC_UA_Layer::processInterruptChild() {
+
+EComResponse COPC_UA_Layer::processInterrupt() {
+ setDataAlreadyPresentRead(false);
return mInterruptResp;
}
-UA_StatusCode COPC_UA_Layer::onServerMethodCall(UA_Server *, const UA_NodeId *,
- void *, const UA_NodeId *, void *methodContext, const UA_NodeId *, void *,
- size_t inputSize, const UA_Variant *input, size_t outputSize,
- UA_Variant *output) {
- COPC_UA_Layer *self = static_cast<COPC_UA_Layer *>(methodContext);
+void COPC_UA_Layer::triggerNewEvent() {
+ mHandler->triggerNewEvent(*this->getCommFB());
+}
- // other thread may currently create nodes for the same path, thus mutex
- CCriticalRegion criticalRegion(self->mutexServerMethodCall);
-
- do {
- } while (self->serverMethodCallResultReady.tryNoWait()); //get semaphore to zero before start method, since application can trigger wrongly RSP many times increasing the semaphore
-
- if (inputSize != self->getCommFB()->getNumRD()
- || outputSize != self->getCommFB()->getNumSD()) {
- DEVLOG_ERROR(
- "OPC UA: method call got invalid number of arguments. In: %d==%d, Out: %d==%d\n",
- self->getCommFB()->getNumRD(), inputSize, self->getCommFB()->getNumSD(),
- outputSize);
- return UA_STATUSCODE_BADINVALIDARGUMENT;
+bool COPC_UA_Layer::checkTypesFromInterface() {
+ bool somethingFailed = false;
+ for(unsigned int i = 0; i < getCommFB()->getNumSD(); i++) {
+ if(!checkPortConnectionInfo(i + 2, true)) {
+ somethingFailed = true;
+ break;
+ }
}
-
- self->mInterruptResp = e_ProcessDataOk;
-
- // put the input values on the wire, i.e. on the RD ports
- for (unsigned int i = 0; i < self->getCommFB()->getNumRD(); i++) {
- if (UA_Variant_isScalar(&input[i]) && input[i].data != NULL) {
- if (!COPC_UA_Helper::convertFromUa_typeId(
- self->getCommFB()->getRDs()[i].getDataTypeID(), input[i].data,
- &self->getCommFB()->getRDs()[i])) {
- self->mInterruptResp = e_ProcessDataRecvFaild;
- DEVLOG_ERROR(
- "OPC UA: can not convert method inputArgument at idx %d to forte type\n",
- i);
+ if(!somethingFailed) {
+ for(unsigned int i = 0; i < getCommFB()->getNumRD(); i++) {
+ if(!checkPortConnectionInfo(i + 2, false)) {
+ somethingFailed = true;
break;
}
}
}
- if (self->mInterruptResp == e_ProcessDataOk) {
- self->getCommFB()->interruptCommFB(self);
- ::getExtEvHandler<COPC_UA_Handler>(*self->getCommFB()).forceEventHandling(self);
+ return !somethingFailed;
+}
+
+bool COPC_UA_Layer::checkPortConnectionInfo(unsigned int paPortIndex, bool paIsSD) const {
+ const SFBInterfaceSpec *localInterfaceSpec = getCommFB()->getFBInterfaceSpec();
+ const CStringDictionary::TStringId localPortNameId = paIsSD ? localInterfaceSpec->m_aunDINames[paPortIndex] : localInterfaceSpec->m_aunDONames[paPortIndex];
+
+ const CDataConnection *localPortConnection = paIsSD ? getCommFB()->getDIConnection(localPortNameId) : getCommFB()->getDOConnection(localPortNameId);
+ if(!localPortConnection) {
+ DEVLOG_ERROR("[OPC UA LAYER]: Got invalid port connection on FB %s at port %s. It must be connected to another FB.\n", getCommFB()->getInstanceName(),
+ CStringDictionary::getInstance().get(localPortNameId));
+ return false;
+ }
+
+ if(!localPortConnection->isConnected()) {
+ DEVLOG_ERROR("[OPC UA LAYER]: Connection %s of FB %s is not connected to anything.\n", CStringDictionary::getInstance().get(localPortNameId),
+ getCommFB()->getInstanceName());
+ return false;
+ }
+
+ CIEC_ANY *remoteType = 0;
+ if(paIsSD) {
+ const CConnectionPoint &remoteConnectionPoint = localPortConnection->getSourceId();
+ if(!getRemoteAny(&remoteType, remoteConnectionPoint, paIsSD)) {
+ return false;
+ }
} else {
- return UA_STATUSCODE_BADINVALIDARGUMENT;
+ if(!checkFanOutTypes(*localPortConnection, &remoteType)) {
+ return false;
+ }
}
- if (!self->serverMethodCallResultReady.timedWait(METHOD_CALL_TIMEOUT * 1E9)) {
+ if(!COPC_UA_Helper::getOPCUATypeFromAny(*remoteType)) {
+ DEVLOG_ERROR("[OPC UA LAYER]: Invalid type %d in FB %s at connection %s\n", remoteType, getCommFB()->getInstanceName(),
+ CStringDictionary::getInstance().get(localPortNameId));
+ return false;
+ }
+
+ return true;
+}
+
+bool COPC_UA_Layer::getRemoteAny(CIEC_ANY **paResult, const CConnectionPoint &paRemoteConnectionPoint, bool paIsSD) const {
+ if(!paRemoteConnectionPoint.mFB) {
DEVLOG_ERROR(
- "OPC UA: method call did not get result values within timeout.\n");
- return UA_STATUSCODE_BADTIMEOUT;
+ "[OPC UA LAYER]: FB %s has a problem. The connected FB in the current data input is a null pointer. Check last debug logging for more information\n",
+ getCommFB()->getInstanceName());
+ return false;
}
- // copy SD values to output
- for (unsigned int i = 0; i < self->getCommFB()->getNumSD(); i++) {
+ *paResult =
+ paIsSD ? paRemoteConnectionPoint.mFB->getDOFromPortId(paRemoteConnectionPoint.mPortId) :
+ paRemoteConnectionPoint.mFB->getDIFromPortId(paRemoteConnectionPoint.mPortId);
- if (!COPC_UA_Helper::isTypeIdValid(
- self->getCommFB()->getSDs()[i].getDataTypeID())) {
- DEVLOG_ERROR(
- "OPC UA: can not convert forte type to method outputArgument at idx %d\n",
- i);
- break;
- }
+ return true;
+}
- const UA_TypeConvert *convert =
- &COPC_UA_Helper::mapForteTypeIdToOpcUa[self->getCommFB()->getSDs()[i].getDataTypeID()];
+bool COPC_UA_Layer::checkFanOutTypes(const CDataConnection &paPortConnection, CIEC_ANY **paResult) const {
- void *varValue = UA_new(convert->type);
- if (!convert->get(&self->getCommFB()->getSDs()[i], varValue)) {
- self->mInterruptResp = e_ProcessDataRecvFaild;
- DEVLOG_ERROR(
- "OPC UA: can not convert forte type to method outputArgument at idx %d\n",
- i);
+ for(CSinglyLinkedList<CConnectionPoint>::Iterator it = paPortConnection.getDestinationList().begin(); it != paPortConnection.getDestinationList().end();
+ ++it) {
+ if(paPortConnection.getDestinationList().begin() == it) { //first one
+ if(!getRemoteAny(paResult, *it, false)) {
+ return false;
+ }
} else {
- UA_Variant_setScalarCopy(&output[i], varValue, convert->type);
- }
-
- UA_delete(varValue, convert->type);
-
- if (self->mInterruptResp != e_ProcessDataOk)
- break;
- }
-
- return
- self->mInterruptResp == e_ProcessDataOk ?
- UA_STATUSCODE_GOOD : UA_STATUSCODE_BADUNEXPECTEDERROR;
-}
-
-UA_NodeClass COPC_UA_Layer::getNodeClass(const UA_NodeId nodeId) {
-
- UA_NodeClass nodeClass = UA_NODECLASS_UNSPECIFIED;
-
- clientMutex->lock();
- UA_StatusCode retVal = UA_Client_readNodeClassAttribute(this->uaClient,
- nodeId, &nodeClass);
- clientMutex->unlock();
-
- if (retVal != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not determine NodeClass. %s\n",
- UA_StatusCode_name(retVal));
- return UA_NODECLASS_UNSPECIFIED;
- }
-
- return nodeClass;
-}
-
-void *COPC_UA_Layer::handleAsyncCall(const unsigned int /*callId*/,
- void *payload) {
-
- struct AsyncCallPayload *callPayload =
- static_cast<struct AsyncCallPayload *>(payload);
-
- if (this->clientConnect() != e_InitOk) {
- return NULL;
- }
-
- if (this->remoteNodeClass == UA_NODECLASS_UNSPECIFIED) {
- this->remoteNodeClass = getNodeClass(*this->fbNodeId);
- if (this->remoteNodeClass == UA_NODECLASS_UNSPECIFIED)
- return NULL;
- }
-
- if (getCommFB()->getComServiceType() == e_Client) {
-
- if (this->remoteNodeClass == UA_NODECLASS_METHOD) {
- size_t outputSize;
- UA_Variant *output;
- clientMutex->lock();
-
- UA_StatusCode retval = UA_STATUSCODE_BADCONNECTIONCLOSED;
- // if the connection to the server is broken between last call and now, try a second time
- for (int i = 0; i < 2 && retval == UA_STATUSCODE_BADCONNECTIONCLOSED;
- i++) {
- retval = UA_Client_call(this->uaClient, *this->fbNodeIdParent,
- *this->fbNodeId, callPayload->variantsSize, callPayload->variants,
- &outputSize, &output);
- if (retval == UA_STATUSCODE_BADCONNECTIONCLOSED) {
- // try to reconnect
- if (this->clientConnect() != e_InitOk) {
- return NULL;
- }
- }
- }
- clientMutex->unlock();
- if (retval == UA_STATUSCODE_GOOD) {
- DEVLOG_DEBUG(
- "OPC UA: Method call was successfull, and %lu returned values available.\n",
- (unsigned long ) outputSize);
-
- if (getCommFB()->getNumRD() != outputSize) {
- DEVLOG_ERROR(
- "OPC UA: The number of RD connectors of the client does not match the number of returned values from the method call.\n");
- } else {
-
- struct AsyncCallPayload *outputData =
- static_cast<struct AsyncCallPayload *>(forte_malloc(
- sizeof(struct AsyncCallPayload)));
-
- outputData->variants = output;
- outputData->variantsSize = static_cast<unsigned int>(outputSize);
-
- return outputData;
- }
-
- }
-
- DEVLOG_ERROR("OPC UA: Could not call method. Error: %s\n",
- UA_StatusCode_name(retval));
- } else if (this->remoteNodeClass == UA_NODECLASS_VARIABLE) {
- if (callPayload->variantsSize != 0) {
- DEVLOG_INFO(
- "OPC UA: Ignoring unsupported SD input values for CLIENT FB.");
- }
- UA_Variant *output = UA_Variant_new();
- clientMutex->lock();
- UA_StatusCode retval = UA_Client_readValueAttribute(this->uaClient,
- *this->fbNodeId, output);
- clientMutex->unlock();
-
- if (retval != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not read variable node value. Error: %s\n",
- UA_StatusCode_name(retval));
+ CIEC_ANY* newRemoteType;
+ if(!getRemoteAny(&newRemoteType, *it, false)) {
+ return false;
} else {
- struct AsyncCallPayload *outputData =
- static_cast<struct AsyncCallPayload *>(forte_malloc(
- sizeof(struct AsyncCallPayload)));
-
- outputData->variants = output;
- outputData->variantsSize = 1;
-
- return outputData;
+ if(newRemoteType->getDataTypeID() != (*paResult)->getDataTypeID()) {
+ DEVLOG_ERROR("[OPC UA LAYER]: FB %s has one RD which is connected to many data inputs and the types are not the same.\n",
+ getCommFB()->getInstanceName());
+ return false;
+ }
}
- } else {
- DEVLOG_ERROR(
- "OPC UA: Remote node class for client needs to be of class VARIABLE or METHOD.\n");
- return NULL;
- }
-
- } else if (getCommFB()->getComServiceType() == e_Publisher) {
-
- if (this->remoteNodeClass != UA_NODECLASS_VARIABLE) {
- DEVLOG_ERROR(
- "OPC UA: Remote node class for publisher needs to be of class VARIABLE.\n");
- return NULL;
- }
- if (callPayload->variantsSize == 0) {
- DEVLOG_ERROR("OPC UA: The PUBLISH FB needs at least one input SD.");
- return NULL;
- }
- if (callPayload->variantsSize > 1) {
- DEVLOG_INFO(
- "OPC UA: Ignoring unsupported SD input values for Publish FB.");
- }
-
- // this is a Publish FB and we need a variable write
-
- clientMutex->lock();
- UA_StatusCode retval = UA_Client_writeValueAttribute(this->uaClient,
- *this->fbNodeId, callPayload->variants);
- clientMutex->unlock();
-
- if (retval != UA_STATUSCODE_GOOD) {
- DEVLOG_ERROR("OPC UA: Could not write variable node value. Error: %s\n",
- UA_StatusCode_name(retval));
}
}
- return NULL;
+ return true;
}
-void COPC_UA_Layer::handleAsyncCallResult(const unsigned int /*callId*/,
- void *payload, void *result) {
-
- struct AsyncCallPayload *inputData =
- static_cast<struct AsyncCallPayload *>(payload);
- UA_Array_delete(inputData->variants, inputData->variantsSize,
- &UA_TYPES[UA_TYPES_VARIANT]);
- forte_free(payload);
-
- if (result == NULL)
- return;
-
- struct AsyncCallPayload *outputData =
- static_cast<struct AsyncCallPayload *>(result);
- bool failed = false;
- for (unsigned int i = 0; i < outputData->variantsSize; i++) {
- if (!clientRdConverter[i]->set(outputData->variants[i].data,
- &getCommFB()->getRDs()[i])) {
- DEVLOG_ERROR(
- "OPC UA: Client could not convert returned data from OPC UA to RD_%d.\n",
- i + 1);
- failed = true;
- break;
- }
- }
- UA_Array_delete(outputData->variants, outputData->variantsSize,
- &UA_TYPES[UA_TYPES_VARIANT]);
- forte_free(result);
- if (!failed) {
- mInterruptResp = e_ProcessDataOk;
- }
-
+bool COPC_UA_Layer::getDataAlreadyPresentRead() {
+ CCriticalRegion dataReadRegion(mDataAlreadyPresentMutex);
+ return mDataAlreadyPresent;
}
-
-void COPC_UA_Layer::handleAsyncEvent() {
- getCommFB()->interruptCommFB(this);
- getExtEvHandler<COPC_UA_Handler>().forceEventHandling(this);
+void COPC_UA_Layer::setDataAlreadyPresentRead(bool paDataRead) {
+ CCriticalRegion dataReadRegion(mDataAlreadyPresentMutex);
+ mDataAlreadyPresent = paDataRead;
}
diff --git a/src/modules/opc_ua/opcua_layer.h b/src/modules/opc_ua/opcua_layer.h
index 33ffe2b..c2a251c 100644
--- a/src/modules/opc_ua/opcua_layer.h
+++ b/src/modules/opc_ua/opcua_layer.h
@@ -1,237 +1,148 @@
/*******************************************************************************
- * Copyright (c) 2015-2016 Florian Froschermeier <florian.froschermeier@tum.de>,
+ * Copyright (c) 2015-2019 Florian Froschermeier <florian.froschermeier@tum.de>,
* fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Froschermeier
* - initial integration of the OPC-UA protocol
* Stefan Profanter
* - refactoring and adaption to new concept
+ * Jose Cabral:
+ * - refactoring to cleaner architecture
*******************************************************************************/
-
#ifndef SRC_MODULES_OPC_UA_OPCUA_LAYER_H_
#define SRC_MODULES_OPC_UA_OPCUA_LAYER_H_
-#include "comlayer.h"
-#include <forte_any.h>
-#include "comlayer_async.h"
+#include "../../core/cominfra/comlayer.h"
#include "opcua_helper.h"
-class CIEC_STRING;
+class COPC_UA_HandlerAbstract;
+class CActionInfo;
+/**
+ * Layer for the OPC UA communication. It is responsible for getting the type converters from its SDs/RDs,
+ * creating an action out of its parameter, and calling the local/remote handler when the action is to be executed
+ and
+ */
+class COPC_UA_Layer : public forte::com_infra::CComLayer {
+ public:
-class COPC_UA_Layer : public forte::com_infra::CComLayerAsync {
-public:
- COPC_UA_Layer(forte::com_infra::CComLayer *pa_poUpperLayer, forte::com_infra::CBaseCommFB *pa_poComFB);
+ /**
+ * Class constructor
+ * @param paUpperLayer
+ * @param paComFB
+ */
+ COPC_UA_Layer(forte::com_infra::CComLayer *paUpperLayer, forte::com_infra::CBaseCommFB *paComFB);
- virtual ~COPC_UA_Layer();
+ /**
+ * Class destructor
+ */
+ virtual ~COPC_UA_Layer();
- forte::com_infra::EComResponse sendData(void *pa_pvData, unsigned int pa_unSize);
+ /**
+ * The handler uses this functions to let the layer know that some data has arrived
+ * @param paData Data of type COPC_UA_Helper::UA_RecvVariable_handle passed from the handler
+ * @param paSize not used
+ * @return
+ */
+ forte::com_infra::EComResponse recvData(const void *paData, unsigned int paSize);
- forte::com_infra::EComResponse recvData(const void *pa_pvData, unsigned int pa_unSize);
+ /**
+ * Executes the action in the handler
+ * @param paData not used
+ * @param paSize not used
+ * @return
+ */
+ forte::com_infra::EComResponse sendData(void *paData, unsigned int paSize);
- virtual forte::com_infra::EComResponse processInterruptChild();
+ /**
+ * Function called when the external event (triggered when data is received) is executed in the FB
+ * @return
+ */
+ virtual forte::com_infra::EComResponse processInterrupt();
-private:
+ /**
+ * Trigger a new incoming event. This is needed here because the CUA_ClientInformation needs to trigger, but it doesn't know the handler
+ */
+ void triggerNewEvent();
- struct FB_NodeIds {
- UA_NodeId *functionBlockId;
- UA_NodeId *variableId;
- const UA_TypeConvert *convert;
- };
+ private:
- /**
- * set to true if we are connecting to a remote OPC UA server, i.e., we need to use a client
- */
- bool useClient;
+ /**
+ * Response for the processInterrupt() method
+ */
+ forte::com_infra::EComResponse mInterruptResp;
- /**
- * Delete/free the node ids up to the given maxIndex index.
- *
- * @param nodeIds list of node ids
- * @param maxIndex size of the nodeIds array to be freed
- */
- void deleteNodeIds(struct FB_NodeIds **nodeIds, unsigned int maxIndex);
+ /**
+ * Pointer to the base class of the OPC UA handlers. Depending on the action, the local or remote will be set, and later used to execute the action
+ */
+ COPC_UA_HandlerAbstract *mHandler;
- forte::com_infra::EComResponse openConnection(char *paLayerParameter);
+ /**
+ * Information about the action that's returned from the CActionInfo factory, and which is later passed to the handler when initializing, executing and uninitializing the action
+ */
+ CActionInfo *mActionInfo;
- void closeConnection();
+ /**
+ * Called when INIT is triggered in the FB and QI is set to true
+ * @param paLayerParameter String conatained between the square brackets in the ID data input (opc_ua[...])
+ * @return e_InitOk is initialization was ok, e_InitTerminated otherwise
+ */
+ forte::com_infra::EComResponse openConnection(char *paLayerParameter);
- /**
- * Get the counterpart function block and port for a given port index.
- *
- * This is achieved by following the connection and reading out the interface specification.
- *
- * @param portIndex port index of the local port in the SD/RD array.
- * @param isSD indicates if portIndex is for SD or for RD array
- * @param connectedToFb function block to which the port is connected to
- * @param connectedToPortName name of the remote port
- * @param convert convert information to convert IEC61499 to OPC UA data type based on the connected to port type
- * @return true if all the information is successfully retrieved. false otherwise. If false, some or all of the passed pointers may be nullptr
- */
- bool getPortConnectionInfo(unsigned int portIndex, bool isSD, const CFunctionBlock **connectedToFb, const char **connectedToPortName,
- const UA_TypeConvert **convert) const;
+ /**
+ * Called when INIT is triggered in the FB and QI is set to false
+ */
+ void closeConnection();
- /**
- * Create OPC UA nodes in the information model of the server for every connected function block and port combination.
- *
- * @param nodeIds list of node ids of the newly created nodes
- * @param numPorts number of RD/SD ports
- * @param isSD should the nodes be created for the RD or SD ports
- * @return e_InitOk on success
- */
- forte::com_infra::EComResponse createPubSubNodes(struct FB_NodeIds **nodeIds, unsigned int numPorts, bool isSD);
+ /**
+ * Check that all types of the SDs/RDs of the FBs are correct
+ * @return True if no problem occurred, false otherwise
+ */
+ bool checkTypesFromInterface();
- forte::com_infra::EComResponse createSubscription(struct FB_NodeIds **nodeIds,
- unsigned int numPorts, bool isSD, char* subnodePath);
+ /**
+ * Check the type for a specific data input or output of the FB
+ * @param paPortIndex Index of the port to be gotten
+ * @param paIsSD True if the port to get is an SD, false othewise
+ * @return True if no error ocurred while looking for the type, false otherwise
+ */
+ bool checkPortConnectionInfo(unsigned int paPortIndex, bool paIsSD) const;
- /**
- * Creates the OPC UA method node for the SERVER function block.
- * The method's name is the same as the name of the SERVER FB. The input and output arguments are initialized based on the RD (input) and SD (output) ports.
- *
- * @return e_InitOk on success
- * @see createMethodArguments
- */
- forte::com_infra::EComResponse createMethodNode();
+ /**
+ * Get the remote data input/output
+ * @param paResult Place to store the pointer to the result
+ * @param paRemoteConnectionPoint Connection point of the other end
+ * @param paIsSD true if the local port is an SD, false otherwise
+ * @return True if no problem occurred, false otherwise
+ */
+ bool getRemoteAny(CIEC_ANY **paResult, const CConnectionPoint &paRemoteConnectionPoint, bool paIsSD) const;
- /**
- * Called by createMethodNode to get the list of input/output arguments based on the RD (input) and SD (output) ports.
- * @param arguments newly created array of arguments
- * @param numPorts number of RD/SD ports which is at the same time the number of arguments
- * @param isSD if true, output arguments are created, based on SD ports. If false, input arguments based on RD are created.
- * @return e_InitOk on success
- */
- forte::com_infra::EComResponse createMethodArguments(UA_Argument **arguments, unsigned int numPorts, bool isSD);
+ /**
+ * RDs can have many output connections to different data input. This function checks if all output connections have the same type
+ * @param paPortConnection Local port connection to be checked
+ * @param paRemoteType Type of the remote end if all output connections are the same
+ * @return True if all output connections are the same and valid, fall otherwise
+ */
+ bool checkFanOutTypes(const CDataConnection &paPortConnection, CIEC_ANY **paRemoteType) const;
-
- const UA_TypeConvert **clientSdConverter;
- const UA_TypeConvert **clientRdConverter;
- forte::com_infra::EComResponse clientCreateConverter(const UA_TypeConvert **converterList[], unsigned int numPorts, bool isSD);
-
- /**
- * Creates the OPC UA client for the CLIENT function block.
- * The client's endpoint is defined by the ID field of the FB. Clients will be reused if they have the same endpoint url.
- *
- * @return e_InitOk on success
- */
- forte::com_infra::EComResponse createClient(const char* endpoint, const char* nodePath, bool subscription);
-
- /**
- * Response for the processInterrupt() method
- */
- forte::com_infra::EComResponse mInterruptResp;
-
- /**
- * Node id of the folder node represented by the ID browse path setting of the FB.
- */
- UA_NodeId *fbNodeId;
-
- /**
- * Node id of the parent folder node represented by the ID browse path setting of the FB.
- */
- UA_NodeId *fbNodeIdParent;
-
- /**
- * On SERVER FB this is set to the node id of the method which is created in the information model
- */
- UA_NodeId *methodNodeId;
-
- /**
- * Node class of the node on the remote server identified by the ID field of the FB.
- * Can be either Variable or Method
- */
- UA_NodeClass remoteNodeClass;
-
- /**
- * On CLIENT FB a client is created for communication with a remote OPC UA server.
- */
- UA_Client *uaClient;
-
- /**
- * List of node ids created for the SD ports (PUBLISHER)
- */
- struct FB_NodeIds *sendDataNodeIds;
-
- /**
- * List of node ids created for the RD ports (SUBSCRIBER)
- */
- struct FB_NodeIds *readDataNodeIds;
-
- /**
- * Callback for the SERVER FB method from OPC UA.
- * If a client calls the method, this callback will be executed. It uses mutex to make sure clients can call the method only sequentially, not in parallel.
- * The RD ports are set to the input arguments, IND is fired and then it waits until RSP is triggered. Note that the default timeout for OPC UA method calls
- * is 5 seconds. This means that the RSP should be triggered within this time to ensure the call does not time out.
- *
- * @param methodHandle points to the COPC_UA_Layer
- * @param objectId parent object, on which the method was called. This should be identical to fbNodeId.
- * @param inputSize number of input arguments. Should be identical to the number of RD ports
- * @param input value of input arguments. The RD ports are set to these values.
- * @param outputSize number of output arguments. Should be identical to the number of SD ports
- * @param output value of output arguments. These will be read from SD ports
- * @return UA_STATUSCODE_GOOD on success. The return value is passed to the caller, i.e., the client.
- */
- static UA_StatusCode onServerMethodCall(UA_Server *server, const UA_NodeId *sessionId,
- void *sessionContext, const UA_NodeId *methodId,
- void *methodContext, const UA_NodeId *objectId,
- void *objectContext, size_t inputSize,
- const UA_Variant *input, size_t outputSize,
- UA_Variant *output);
-
- char *clientEndpointUrl;
- char *clientNodePath;
- CSyncObject *clientMutex;
-
- forte::com_infra::EComResponse clientConnect();
-
- forte::com_infra::EComResponse clientCallAsync(const CIEC_ANY *sd, unsigned int sdSize);
-
- /**
- * Mutex to ensure clients can call the server method not in parallel.
- */
- CSyncObject mutexServerMethodCall;
-
- /**
- * Flag used by the server method call to wait for the data to be ready.
- * It is set to false in the beginning. As soon as the RSP port is triggered, it is set to true and the method callback can process SD ports.
- */
- CSemaphore serverMethodCallResultReady;
-
-
-
- virtual void* handleAsyncCall(const unsigned int callId, void *payload);
-
- virtual void handleAsyncCallResult(const unsigned int callId, void *payload, void *result);
-
- virtual void handleAsyncEvent();
-
- CSinglyLinkedList<UA_NodeId *> referencedNodes;
-
- /**
- * split the ID parameter:
- * opc.tcp://10.100.1.0:4840#/Objects/1:Adder
- * between the hash sign
- *
- * @param fullUrl The full url which is splitted. This parameter will be changed due to the use of strtok
- * @param endpoint the endpoint part pointing at the beginning within the returned char, or NULL if no endpoint part
- * @param nodePath the path part pointing at the beginning within the returned char, or NULL if no path part
- * @return duplicated string of fullUrl where endpoint and nodePath point to. Needs to be freed.
- */
- static void splitUrlAndPath(const char *fullUrl, const char** endpoint, const char **nodePath, CIEC_STRING& paResult);
-
- /**
- * Get the node class of the given node from the remote server using the already initialized uaClient member.
- *
- */
- UA_NodeClass getNodeClass(const UA_NodeId nodeId);
+ /**
+ * The following functions and variables are used because if many subscription are present in one FB, and all of them are updated,
+ * we'll get one external event for each, when only one is needed.
+ * TODO: this is a quick fix. This is a problem for any FB which has many RDs, meaning that if any of the RDs changes, an IND is triggered. It's not wrong,
+ * but the tests lead to an overflow of external events, and this reduces a little.
+ */
+ void setDataAlreadyPresentRead(bool paDataRead);
+ bool getDataAlreadyPresentRead();CSyncObject mDataAlreadyPresentMutex;
+ bool mDataAlreadyPresent;
};
-
#endif /* SRC_MODULES_OPC_UA_OPCUA_LAYER_H_ */
diff --git a/src/modules/opc_ua/opcua_local_handler.cpp b/src/modules/opc_ua/opcua_local_handler.cpp
new file mode 100644
index 0000000..832fc75
--- /dev/null
+++ b/src/modules/opc_ua/opcua_local_handler.cpp
@@ -0,0 +1,1415 @@
+/*******************************************************************************
+ * Copyright (c) 2015-2019 Florian Froschermeier <florian.froschermeier@tum.de>,
+ * fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Florian Froschermeier
+ * - initial integration of the OPC-UA protocol
+ * Stefan Profanter
+ * - refactoring and adaption to new concept
+ * Jose Cabral:
+ * - refactoring to cleaner architecture
+ *******************************************************************************/
+
+#include "../../core/devexec.h"
+#include "../../core/iec61131_functions.h"
+#include "../../core/cominfra/basecommfb.h"
+#include "../../core/utils/parameterParser.h"
+#include "../../core/utils/string_utils.h"
+#include <criticalregion.h>
+#include <forte_printer.h>
+#include "../../arch/utils/mainparam_utils.h"
+#include "opcua_local_handler.h"
+
+#ifndef FORTE_COM_OPC_UA_CUSTOM_HOSTNAME
+#include <sockhand.h>
+#endif
+
+const char * const COPC_UA_Local_Handler::mEnglishLocaleForNodes = "en-US";
+const char * const COPC_UA_Local_Handler::mDefaultDescriptionForVariableNodes = "Digital port of Function Block";
+
+TForteUInt16 gOpcuaServerPort = FORTE_COM_OPC_UA_PORT;
+
+using namespace forte::com_infra;
+
+DEFINE_HANDLER(COPC_UA_Local_Handler);
+
+COPC_UA_Local_Handler::COPC_UA_Local_Handler(CDeviceExecution &paDeviceExecution) :
+ COPC_UA_HandlerAbstract(paDeviceExecution), mUaServer(0), mUaServerRunningFlag(UA_FALSE)
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+# ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+//do nothing
+# else //FORTE_COM_OPC_UA_MASTER_BRANCH
+, mServerConfig(0)
+# endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+#endif //FORTE_COM_OPC_UA_MULTICAST
+{
+}
+
+COPC_UA_Local_Handler::~COPC_UA_Local_Handler() {
+ stopServer();
+
+ CCriticalRegion criticalRegion(mNodesReferencesMutex);
+ for(CSinglyLinkedList<nodesReferencedByActions *>::Iterator iter = mNodesReferences.begin(); iter != mNodesReferences.end(); ++iter) {
+ UA_NodeId_delete(const_cast<UA_NodeId*>((*iter)->mNodeId));
+ delete *iter;
+ }
+ mNodesReferences.clearAll();
+
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+ for(CSinglyLinkedList<UA_String*>::Iterator iter = mRegisteredWithLds.begin(); iter != mRegisteredWithLds.end(); ++iter) {
+ UA_String_delete(*iter);
+ }
+#endif //FORTE_COM_OPC_UA_MULTICAST
+}
+
+void COPC_UA_Local_Handler::enableHandler(void) {
+ startServer();
+}
+
+void COPC_UA_Local_Handler::disableHandler(void) {
+ COPC_UA_Local_Handler::stopServer();
+ end();
+}
+
+void COPC_UA_Local_Handler::run() {
+ DEVLOG_INFO("[OPC UA LOCAL]: Starting OPC UA Server: opc.tcp://localhost:%d\n", gOpcuaServerPort);
+
+ UA_ServerConfig *uaServerConfig = 0;
+
+ UA_ServerStrings serverStrings;
+ generateServerStrings(gOpcuaServerPort, serverStrings);
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ mUaServer = UA_Server_new();
+ if(mUaServer) {
+ uaServerConfig = UA_Server_getConfig(mUaServer);
+ UA_ServerConfig_setMinimal(uaServerConfig, gOpcuaServerPort, 0);
+ configureUAServer(gOpcuaServerPort, serverStrings, *uaServerConfig);
+#else
+ uaServerConfig = UA_ServerConfig_new_minimal(gOpcuaServerPort, 0);
+ configureUAServer(gOpcuaServerPort, serverStrings, *uaServerConfig);
+ mUaServer = UA_Server_new(uaServerConfig);
+ if(mUaServer) {
+#endif
+
+ if(initializeNodesets(*mUaServer)) {
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+# ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ //do nothing
+# else
+ mServerConfig = uaServerConfig;
+# endif
+ UA_Server_setServerOnNetworkCallback(mUaServer, serverOnNetworkCallback, this);
+#endif //FORTE_COM_OPC_UA_MULTICAST
+ mUaServerRunningFlag = UA_TRUE;
+ mServerStarted.inc();
+ UA_StatusCode retVal = UA_Server_run(mUaServer, &mUaServerRunningFlag); // server keeps iterating as long as running is true
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Server exited. Error: %s\n", UA_StatusCode_name(retVal));
+ } else {
+ DEVLOG_INFO("[OPC UA LOCAL]: Server successfully stopped\n");
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Couldn't initialize Nodesets\n", gOpcuaServerPort);
+ }
+ UA_Server_delete(mUaServer);
+ mUaServer = 0;
+ }
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ //nothing to do in master branch. Config is deleted with the server
+#else
+ UA_ServerConfig_delete(uaServerConfig);
+#endif
+ mServerStarted.inc(); //this will avoid locking startServer() for all cases where the starting of server failed
+}
+
+void COPC_UA_Local_Handler::startServer() {
+ if(!isAlive()) {
+ start();
+ mServerStarted.waitIndefinitely();
+ }
+}
+
+void COPC_UA_Local_Handler::stopServer() {
+ mUaServerRunningFlag = UA_FALSE;
+ end();
+}
+
+void COPC_UA_Local_Handler::generateServerStrings(TForteUInt16 paUAServerPort, UA_ServerStrings &paServerStrings) {
+ char helperBuffer[scmMaxServerNameLength + 1];
+ forte_snprintf(helperBuffer, scmMaxServerNameLength, "forte_%d", paUAServerPort);
+
+ char hostname[scmMaxServerNameLength + 1];
+#ifdef FORTE_COM_OPC_UA_CUSTOM_HOSTNAME
+ forte_snprintf(hostname, scmMaxServerNameLength, "%s-%s", FORTE_COM_OPC_UA_CUSTOM_HOSTNAME, helperBuffer);
+#else
+ if(gethostname(hostname, scmMaxServerNameLength) == 0) {
+ size_t offset = strlen(hostname);
+ size_t nameLen = strlen(helperBuffer);
+ if(offset + nameLen + 1 > scmMaxServerNameLength) {
+ offset = MAX(scmMaxServerNameLength - nameLen - 1, (size_t) 0);
+ }
+ forte_snprintf(hostname + offset, scmMaxServerNameLength - offset, "-%s", helperBuffer);
+ }
+#endif
+
+ forte_snprintf(helperBuffer, scmMaxServerNameLength, "org.eclipse.4diac.%s", hostname);
+
+ paServerStrings.mAppURI = helperBuffer;
+ paServerStrings.mHostname = hostname;
+}
+
+void COPC_UA_Local_Handler::configureUAServer(TForteUInt16 paUAServerPort, UA_ServerStrings &paServerStrings, UA_ServerConfig &paUaServerConfig) {
+
+ paUaServerConfig.logger = COPC_UA_HandlerAbstract::getLogger();
+
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+ paUaServerConfig.applicationDescription.applicationType = UA_APPLICATIONTYPE_DISCOVERYSERVER;
+ // hostname will be added by mdns library
+# ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_String_deleteMembers(&paUaServerConfig.discovery.mdns.mdnsServerName);
+ paUaServerConfig.discovery.mdns.mdnsServerName = UA_String_fromChars(helperBuffer);
+# else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_String_deleteMembers(&paUaServerConfig.mdnsServerName);
+ paUaServerConfig.mdnsServerName = UA_String_fromChars(helperBuffer);
+# endif//FORTE_COM_OPC_UA_MASTER_BRANCH
+#endif //FORTE_COM_OPC_UA_MULTICAST
+
+ UA_String customHost = UA_STRING(paServerStrings.mHostname.getValue());
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_ServerConfig_setCustomHostname(&paUaServerConfig, customHost);
+#else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_ServerConfig_set_customHostname(&paUaServerConfig, customHost);
+#endif//FORTE_COM_OPC_UA_MASTER_BRANCH
+
+ // delete pre-initialized values
+ UA_LocalizedText_deleteMembers(&paUaServerConfig.applicationDescription.applicationName);
+ UA_String_deleteMembers(&paUaServerConfig.applicationDescription.applicationUri);
+
+ paUaServerConfig.applicationDescription.applicationUri = UA_String_fromChars(paServerStrings.mAppURI.getValue());
+ paUaServerConfig.applicationDescription.applicationName.locale = UA_STRING_NULL;
+ paUaServerConfig.applicationDescription.applicationName.text = UA_String_fromChars(paServerStrings.mHostname.getValue());
+ paUaServerConfig.publishingIntervalLimits.min = FORTE_COM_OPC_UA_SERVER_PUB_INTERVAL;
+
+ for(size_t i = 0; i < paUaServerConfig.endpointsSize; i++) {
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_String_deleteMembers(&paUaServerConfig.endpoints[i].server.applicationUri);
+ UA_LocalizedText_deleteMembers(&paUaServerConfig.endpoints[i].server.applicationName);
+ UA_String_copy(&paUaServerConfig.applicationDescription.applicationUri, &paUaServerConfig.endpoints[i].server.applicationUri);
+ UA_LocalizedText_copy(&paUaServerConfig.applicationDescription.applicationName, &paUaServerConfig.endpoints[i].server.applicationName);
+#else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_String_deleteMembers(&paUaServerConfig.endpoints[i].endpointDescription.server.applicationUri);
+ UA_LocalizedText_deleteMembers(&paUaServerConfig.endpoints[i].endpointDescription.server.applicationName);
+ UA_String_copy(&paUaServerConfig.applicationDescription.applicationUri, &paUaServerConfig.endpoints[i].endpointDescription.server.applicationUri);
+ UA_LocalizedText_copy(&paUaServerConfig.applicationDescription.applicationName, &paUaServerConfig.endpoints[i].endpointDescription.server.applicationName);
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+ }
+}
+
+void COPC_UA_Local_Handler::referencedNodesIncrement(const CSinglyLinkedList<UA_NodeId *> &paNodes, CActionInfo &paActionInfo) {
+ CCriticalRegion criticalRegion(mNodesReferencesMutex);
+ for(CSinglyLinkedList<UA_NodeId *>::Iterator iterNode = paNodes.begin(); iterNode != paNodes.end(); ++iterNode) {
+ bool found = false;
+ for(CSinglyLinkedList<nodesReferencedByActions *>::Iterator iterRef = mNodesReferences.begin(); iterRef != mNodesReferences.end(); ++iterRef) {
+ if(UA_NodeId_equal((*iterRef)->mNodeId, (*iterNode))) {
+ found = true;
+ (*iterRef)->mActionsReferencingIt.pushFront(&paActionInfo);
+ break;
+ }
+ }
+ if(!found) {
+ nodesReferencedByActions *newRef = new nodesReferencedByActions();
+ UA_NodeId *newNode = UA_NodeId_new();
+ UA_NodeId_copy((*iterNode), newNode);
+ newRef->mNodeId = newNode;
+ newRef->mActionsReferencingIt = CSinglyLinkedList<CActionInfo*>();
+ newRef->mActionsReferencingIt.pushFront(&paActionInfo);
+ mNodesReferences.pushFront(newRef);
+ }
+ }
+}
+
+void COPC_UA_Local_Handler::referencedNodesDecrement(const CActionInfo &paActionInfo) {
+ CCriticalRegion criticalRegion(mNodesReferencesMutex);
+ CSinglyLinkedList<const UA_NodeId *> nodesReferencedByAction;
+ getNodesReferencedByAction(paActionInfo, nodesReferencedByAction);
+
+ for(CSinglyLinkedList<const UA_NodeId *>::Iterator iterNode = nodesReferencedByAction.begin(); iterNode != nodesReferencedByAction.end(); ++iterNode) {
+ CSinglyLinkedList<nodesReferencedByActions *>::Iterator nodeReferencedToDelete = mNodesReferences.end();
+ for(CSinglyLinkedList<nodesReferencedByActions *>::Iterator iterRef = mNodesReferences.begin(); iterRef != mNodesReferences.end(); ++iterRef) {
+ if(UA_NodeId_equal((*iterRef)->mNodeId, (*iterNode))) {
+
+ bool stillSomethingThere = true;
+ while(stillSomethingThere) {
+ CSinglyLinkedList<CActionInfo *>::Iterator itActionToDelete = (*iterRef)->mActionsReferencingIt.end();
+ for(CSinglyLinkedList<CActionInfo *>::Iterator itAction = (*iterRef)->mActionsReferencingIt.begin();
+ itAction != (*iterRef)->mActionsReferencingIt.end(); ++itAction) {
+ if((*itAction) == &paActionInfo) {
+ itActionToDelete = itAction;
+ break;
+ }
+ }
+
+ if((*iterRef)->mActionsReferencingIt.end() == itActionToDelete) {
+ stillSomethingThere = false;
+ } else {
+ (*iterRef)->mActionsReferencingIt.erase(*itActionToDelete);
+ }
+ }
+
+ if((*iterRef)->mActionsReferencingIt.isEmpty()) {
+ nodeReferencedToDelete = iterRef;
+ if(0 != (*iterRef)->mNodeId->namespaceIndex && mUaServer) {
+ UA_Server_deleteNode(mUaServer, *(*iterRef)->mNodeId, UA_TRUE);
+ }
+ }
+ break;
+ }
+ }
+ if(mNodesReferences.end() != nodeReferencedToDelete) {
+ nodesReferencedByActions *toDelete = *nodeReferencedToDelete;
+ mNodesReferences.erase(toDelete);
+ UA_NodeId_delete(const_cast<UA_NodeId*>(toDelete->mNodeId));
+ delete toDelete;
+ }
+ }
+}
+
+void COPC_UA_Local_Handler::getNodesReferencedByAction(const CActionInfo &paActionInfo, CSinglyLinkedList<const UA_NodeId *> &paNodes) {
+ for(CSinglyLinkedList<nodesReferencedByActions *>::Iterator iterRef = mNodesReferences.begin(); iterRef != mNodesReferences.end(); ++iterRef) {
+ for(CSinglyLinkedList<CActionInfo *>::Iterator iterAction = (*iterRef)->mActionsReferencingIt.begin();
+ iterAction != (*iterRef)->mActionsReferencingIt.end(); ++iterAction) {
+ if((*iterAction) == &paActionInfo) {
+ paNodes.pushFront((*iterRef)->mNodeId);
+ break;
+ }
+ }
+ }
+}
+
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+
+const UA_String* COPC_UA_Local_Handler::getDiscoveryUrl() const {
+
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ UA_ServerConfig *mServerConfig = UA_Server_getConfig(mUaServer); //change mServerConfig to serverConfig when only master branch is present
+#else
+ //do nothing
+#endif
+ if(0 == mServerConfig->networkLayersSize) {
+ return 0;
+ }
+ return &mServerConfig->networkLayers[0].discoveryUrl;
+}
+
+void COPC_UA_Local_Handler::serverOnNetworkCallback(const UA_ServerOnNetwork *paServerOnNetwork, UA_Boolean paIsServerAnnounce, UA_Boolean paIsTxtReceived,
+ void *paData) { //NOSONAR
+ COPC_UA_Local_Handler *handler = static_cast<COPC_UA_Local_Handler*>(paData);
+
+ const UA_String *ownDiscoverUrl = handler->getDiscoveryUrl();
+
+ if(!ownDiscoverUrl || UA_String_equal(&paServerOnNetwork->discoveryUrl, ownDiscoverUrl)) {
+ // skip self
+ return;
+ }
+
+ if(!paIsTxtReceived) {
+ return; // we wait until the corresponding TXT record is announced.
+ }
+
+ DEVLOG_DEBUG("[OPC UA LOCAL]: mDNS %s '%.*s' with url '%.*s'\n", paIsServerAnnounce ? "announce" : "remove", paServerOnNetwork->serverName.length,
+ paServerOnNetwork->serverName.data, paServerOnNetwork->discoveryUrl.length, paServerOnNetwork->discoveryUrl.data);
+
+ // check if server is LDS, and then register
+ UA_String ldsStr = UA_String_fromChars("LDS");
+ for(unsigned int i = 0; i < paServerOnNetwork->serverCapabilitiesSize; i++) {
+ if(UA_String_equal(&paServerOnNetwork->serverCapabilities[i], &ldsStr)) {
+ if(paIsServerAnnounce) {
+ handler->registerWithLds(&paServerOnNetwork->discoveryUrl);
+ } else {
+ handler->removeLdsRegister(&paServerOnNetwork->discoveryUrl);
+ }
+ break;
+ }
+ }
+ UA_String_deleteMembers(&ldsStr);
+}
+
+void COPC_UA_Local_Handler::registerWithLds(const UA_String *paDiscoveryUrl) {
+ // check if already registered with the given LDS
+ for(CSinglyLinkedList<UA_String*>::Iterator iter = mRegisteredWithLds.begin(); iter != mRegisteredWithLds.end(); ++iter) {
+ if(UA_String_equal(paDiscoveryUrl, *iter)) {
+ return;
+ }
+ }
+
+ // will be freed when removed from list
+ UA_String *discoveryUrlChar = 0;
+ UA_String_copy(paDiscoveryUrl, discoveryUrlChar);
+
+ mRegisteredWithLds.pushFront(discoveryUrlChar);
+ DEVLOG_INFO("[OPC UA LOCAL]: Registering with LDS '%.*s'\n", paDiscoveryUrl->length, paDiscoveryUrl->data);
+ UA_StatusCode retVal = UA_Server_addPeriodicServerRegisterCallback(mUaServer,
+#ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ 0,
+#else //FORTE_COM_OPC_UA_MASTER_BRANCH
+ //nothing here
+#endif //FORTE_COM_OPC_UA_MASTER_BRANCH
+ reinterpret_cast<const char*>(discoveryUrlChar->data), 10 * 60 * 1000, 500, 0);
+ if( UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not register with LDS. Error: %s\n", UA_StatusCode_name(retVal));
+ }
+}
+
+void COPC_UA_Local_Handler::removeLdsRegister(const UA_String *paDiscoveryUrl) {
+ UA_String *toDelete = 0;
+ for(CSinglyLinkedList<UA_String*>::Iterator iter = mRegisteredWithLds.begin(); iter != mRegisteredWithLds.end(); ++iter) {
+ if(UA_String_equal(paDiscoveryUrl, *iter)) {
+ toDelete = *iter;
+ break;
+ }
+ }
+ if(toDelete) {
+ mRegisteredWithLds.erase(toDelete);
+ UA_String_delete(toDelete);
+ }
+}
+
+#endif //FORTE_COM_OPC_UA_MULTICAST
+
+UA_StatusCode COPC_UA_Local_Handler::initializeAction(CActionInfo &paActionInfo) {
+ enableHandler();
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ if(mUaServer) { //if the server failed at starting, nothing will be initialized
+ // other thread may currently create nodes, thus mutex
+ CCriticalRegion criticalRegion(mCreateNodesMutex);
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eRead:
+ retVal = initializeVariable(paActionInfo, false);
+ break;
+ case CActionInfo::eWrite:
+ retVal = initializeVariable(paActionInfo, true);
+ break;
+ case CActionInfo::eCreateMethod:
+ retVal = initializeCreateMethod(paActionInfo);
+ break;
+ case CActionInfo::eCreateObject:
+ retVal = initializeCreateObject(paActionInfo);
+ break;
+ case CActionInfo::eDeleteObject:
+ retVal = initializeDeleteObject(paActionInfo);
+ break;
+ case CActionInfo::eCallMethod:
+ case CActionInfo::eSubscribe:
+ DEVLOG_ERROR("[OPC UA LOCAL]: Cannot perform action %s locally. Initialization failed\n", CActionInfo::mActionNames[paActionInfo.getAction()]);
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA LOCAL]: Unknown action %d to be initialized\n", paActionInfo.getAction());
+ break;
+ }
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::executeAction(CActionInfo &paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eWrite:
+ retVal = executeWrite(paActionInfo);
+ break;
+ case CActionInfo::eCreateMethod:
+ retVal = executeCreateMethod(paActionInfo);
+ break;
+ case CActionInfo::eCreateObject:
+ retVal = executeCreateObject(paActionInfo);
+ break;
+ case CActionInfo::eDeleteObject:
+ retVal = executeDeleteObject(paActionInfo);
+ break;
+ default: //eCallMethod, eSubscribe will never reach here since they weren't initialized. eRead is a Subscribe FB
+ DEVLOG_ERROR("[OPC UA LOCAL]: Action %d to be executed is unknown or invalid\n", paActionInfo.getAction());
+ break;
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::uninitializeAction(CActionInfo &paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eRead:
+ case CActionInfo::eWrite:
+ case CActionInfo::eCreateMethod:
+ case CActionInfo::eCreateObject:
+ case CActionInfo::eDeleteObject:
+ referencedNodesDecrement(paActionInfo);
+ retVal = UA_STATUSCODE_GOOD;
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA LOCAL]: Action %d to be uninitialized is unknown or invalid\n", paActionInfo.getAction());
+ break;
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::initializeVariable(CActionInfo &paActionInfo, bool paWrite) {
+ UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+
+ size_t indexOfNodePair = 0;
+ CSinglyLinkedList<UA_NodeId*> referencedNodes;
+ const CIEC_ANY *variables = paWrite ? paActionInfo.getDataToSend() : paActionInfo.getDataToReceive();
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itMain = paActionInfo.getNodePairInfo().begin();
+ itMain != paActionInfo.getNodePairInfo().end() && UA_STATUSCODE_GOOD == retVal; ++itMain, indexOfNodePair++) {
+
+ CSinglyLinkedList<UA_NodeId*> presentNodes;
+ bool isNodePresent = false;
+ retVal = getNode(**itMain, presentNodes, &isNodePresent);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(isNodePresent) {
+ retVal = handleExistingVariable(paActionInfo, **itMain, variables[indexOfNodePair], indexOfNodePair, paWrite);
+
+ handlePresentNodes(presentNodes, referencedNodes, UA_STATUSCODE_GOOD != retVal);
+ } else { //node does not exist
+ //presentNodes shouldn't have any allocated NodeId at this point
+ retVal = handleNonExistingVariable(paActionInfo, **itMain, variables[indexOfNodePair], indexOfNodePair, referencedNodes, paWrite);
+ }
+ }
+ }
+
+ //we add the references first even if it fails, since some nodes might have been created,
+ //and/or some might have been already there, so deleting them will be taken care of by
+ //the referencedNodesDecrement function later
+ referencedNodesIncrement(referencedNodes, paActionInfo);
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ referencedNodesDecrement(paActionInfo);
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itRerencedNodes = referencedNodes.begin(); itRerencedNodes != referencedNodes.end(); ++itRerencedNodes) {
+ UA_NodeId_delete(*itRerencedNodes);
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::handleExistingVariable(CActionInfo &paActionInfo, CActionInfo::CNodePairInfo &paNodePairInfo, const CIEC_ANY &paVariable,
+ size_t paIndexOfNodePair, bool paWrite) {
+
+ UA_NodeId outDataType;
+ UA_StatusCode retVal = UA_Server_readDataType(mUaServer, *paNodePairInfo.mNodeId, &outDataType);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(UA_NodeId_equal(&outDataType, &COPC_UA_Helper::getOPCUATypeFromAny(paVariable)->typeId)) {
+ if(!paWrite) { //If we are reading a variable, it should be writable from the outside
+ retVal = addWritePermission(*paNodePairInfo.mNodeId);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ void *handle = 0;
+ retVal = UA_Server_getNodeContext(mUaServer, *paNodePairInfo.mNodeId, &handle);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(!handle) {
+ retVal = registerVariableCallBack(*paNodePairInfo.mNodeId, paActionInfo, paIndexOfNodePair);
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: At FB %s RD_%d the node %s has already a FB who is reading from it. Cannot add another one\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), paIndexOfNodePair, paNodePairInfo.mBrowsePath.getValue());
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: At FB %s RD_%d the node %s could not retrieve context. Error: %s\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), paIndexOfNodePair, paNodePairInfo.mBrowsePath.getValue(), UA_StatusCode_name(retVal));
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Cannot set write permission of node for port %d. Error: %s\n", paIndexOfNodePair, UA_StatusCode_name(retVal));
+ }
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: At FB %s index %d there was the type of the existing node doesn't match the new one\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), paIndexOfNodePair);
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: At FB %s index %d there was a problem reading the type of the existing node. Error: %s\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), paIndexOfNodePair, UA_StatusCode_name(retVal));
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::handleNonExistingVariable(CActionInfo &paActionInfo, CActionInfo::CNodePairInfo &paNodePairInfo,
+ const CIEC_ANY &paVariable, size_t paIndexOfNodePair, CSinglyLinkedList<UA_NodeId*> &paReferencedNodes, bool paWrite) {
+
+ CIEC_STRING nodeName;
+ UA_StatusCode retVal = splitAndCreateFolders(paNodePairInfo.mBrowsePath, nodeName, paReferencedNodes);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ CCreateVariableInfo variableInformation;
+ initializeCreateInfo(nodeName, paNodePairInfo, paReferencedNodes.isEmpty() ? 0 : *(paReferencedNodes.back()), variableInformation);
+
+ variableInformation.mTypeConvert = COPC_UA_Helper::getOPCUATypeFromAny(paVariable);
+ variableInformation.mInitData = &paVariable;
+ variableInformation.mAllowWrite = !paWrite; // write FB here means that from the outside should not be possible to write and the other way around for read
+
+ retVal = createVariableNode(variableInformation);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_NodeId *tmp = UA_NodeId_new();
+ UA_NodeId_copy(variableInformation.mReturnedNodeId, tmp);
+ paReferencedNodes.pushBack(tmp);
+ if(!paWrite) {
+ retVal = registerVariableCallBack(*variableInformation.mReturnedNodeId, paActionInfo, paIndexOfNodePair);
+ }
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(!paNodePairInfo.mNodeId) {
+ paNodePairInfo.mNodeId = UA_NodeId_new();
+ UA_NodeId_copy(variableInformation.mReturnedNodeId, paNodePairInfo.mNodeId);
+ }
+ }
+ }
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::createVariableNode(CCreateVariableInfo &paCreateVariableInfo) {
+
+ UA_NodeId requestedNodeId;
+ if(paCreateVariableInfo.mRequestedNodeId) {
+ UA_NodeId_copy(paCreateVariableInfo.mRequestedNodeId, &requestedNodeId);
+ } else {
+ requestedNodeId = UA_NODEID_NUMERIC(paCreateVariableInfo.mBrowseName->namespaceIndex, 0); //if not provided, let the server generate the NodeId using the namespace from the browsename
+ }
+ UA_NodeId parentNodeId;
+ if(paCreateVariableInfo.mParentNodeId) {
+ UA_NodeId_copy(paCreateVariableInfo.mParentNodeId, &parentNodeId);
+ } else {
+ parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+ DEVLOG_WARNING(
+ "[OPC UA LOCAL]: You are creating a variable %.*s in the /Root folder. This is not a good practice. Try to create them in the /Root/Objects folder\n",
+ paCreateVariableInfo.mBrowseName->name.length, reinterpret_cast<const char*>(paCreateVariableInfo.mBrowseName->name.data));
+ }
+
+ void *paVarValue = UA_new(paCreateVariableInfo.mTypeConvert);
+
+ UA_init(paVarValue, paCreateVariableInfo.mTypeConvert);
+ COPC_UA_Helper::convertToOPCUAType(*paCreateVariableInfo.mInitData, paVarValue);
+
+ // create variable attributes
+ UA_VariableAttributes variableAttributes;
+ UA_VariableAttributes_init(&variableAttributes);
+ variableAttributes.dataType = paCreateVariableInfo.mTypeConvert->typeId;
+ variableAttributes.valueRank = -1; // value is a scalar
+ variableAttributes.displayName.locale = UA_STRING_ALLOC(mEnglishLocaleForNodes);
+ UA_String_copy(&paCreateVariableInfo.mBrowseName->name, &variableAttributes.displayName.text);
+ variableAttributes.description = UA_LOCALIZEDTEXT_ALLOC(mEnglishLocaleForNodes, mDefaultDescriptionForVariableNodes);
+ variableAttributes.userAccessLevel = UA_ACCESSLEVELMASK_READ;
+ if(paCreateVariableInfo.mAllowWrite) {
+ variableAttributes.userAccessLevel |= UA_ACCESSLEVELMASK_WRITE;
+ }
+ variableAttributes.accessLevel = variableAttributes.userAccessLevel;
+ UA_Variant_setScalar(&variableAttributes.value, paVarValue, paCreateVariableInfo.mTypeConvert);
+
+ UA_StatusCode retVal = UA_Server_addVariableNode(mUaServer, // server
+ requestedNodeId, // requestedNewNodeId
+ parentNodeId, // parentNodeId
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), // referenceTypeId Reference to the type definition for the variable node
+ *paCreateVariableInfo.mBrowseName, // browseName
+ UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), // typeDefinition
+ variableAttributes, // Variable attributes
+ 0, // instantiation callback
+ paCreateVariableInfo.mReturnedNodeId); // return Node Id
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: AddressSpace adding Variable Node %s failed. Error: %s\n", paCreateVariableInfo.mBrowseName->name.data,
+ UA_StatusCode_name(retVal));
+ }
+ UA_NodeId_deleteMembers(&parentNodeId);
+ UA_NodeId_deleteMembers(&requestedNodeId);
+ UA_VariableAttributes_deleteMembers(&variableAttributes);
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::updateNodeValue(const UA_NodeId &paNodeId, const CIEC_ANY *paData) {
+ UA_Variant *nodeValue = UA_Variant_new();
+ UA_Variant_init(nodeValue);
+
+ const UA_DataType* dataType = COPC_UA_Helper::getOPCUATypeFromAny(*paData);
+ void *varValue = UA_new(dataType);
+ COPC_UA_Helper::convertToOPCUAType(*paData, varValue);
+ UA_Variant_setScalarCopy(nodeValue, varValue, dataType);
+ UA_StatusCode retVal = UA_Server_writeValue(mUaServer, paNodeId, *nodeValue);
+ UA_delete(varValue, dataType);
+ UA_Variant_delete(nodeValue);
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::registerVariableCallBack(const UA_NodeId &paNodeId, CActionInfo &paActionInfo, size_t paPortIndex) {
+
+ UA_StatusCode retVal = UA_Server_setVariableNode_valueCallback(mUaServer, paNodeId, { 0, COPC_UA_Local_Handler::CUA_LocalCallbackFunctions::onWrite });
+ if(UA_STATUSCODE_GOOD == retVal) {
+
+ UA_VariableContext_Handle variableContext(paActionInfo, paPortIndex);
+ mNodeCallbackHandles.pushFront(variableContext);
+ CSinglyLinkedList<UA_VariableContext_Handle>::Iterator contextIterator = mNodeCallbackHandles.begin();
+
+ retVal = UA_Server_setNodeContext(mUaServer, paNodeId, &(*contextIterator));
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not set callback context for node. Error: %s\n", UA_StatusCode_name(retVal));
+ mNodeCallbackHandles.popFront();
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not set callback function for node. Error: %s\n", UA_StatusCode_name(retVal));
+ retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::addWritePermission(const UA_NodeId &paNodeId) {
+ UA_StatusCode retVal = UA_Server_writeAccessLevel(mUaServer, paNodeId, UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_WARNING("[OPC UA LOCAL]: Cannot set write permission of node. Error: %s\n", UA_StatusCode_name(retVal));
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::initializeCreateMethod(CActionInfo &paActionInfo) {
+
+ CSinglyLinkedList<UA_NodeId*> referencedNodes;
+ CSinglyLinkedList<UA_NodeId*> presentNodes;
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itMethodNodePairInfo = paActionInfo.getNodePairInfo().begin();
+
+ bool isNodePresent = false;
+ UA_StatusCode retVal = getNode(**itMethodNodePairInfo, presentNodes, &isNodePresent);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(isNodePresent) {
+
+ UA_NodeId parent = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+
+ //look for parent object
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itPresentNodes = presentNodes.begin(); itPresentNodes != presentNodes.end();) {
+ CSinglyLinkedList<UA_NodeId*>::Iterator currentIterator = itPresentNodes;
+ ++itPresentNodes;
+ if(itPresentNodes == presentNodes.back()) {
+ parent = **currentIterator;
+ break;
+ }
+ }
+
+ retVal = handleExistingMethod(paActionInfo, parent);
+
+ handlePresentNodes(presentNodes, referencedNodes, UA_STATUSCODE_GOOD != retVal);
+ } else { //node does not exist
+ //presentNodes shouldn't have any allocated NodeId at this point
+
+ CIEC_STRING nodeName;
+ retVal = splitAndCreateFolders((*itMethodNodePairInfo)->mBrowsePath, nodeName, referencedNodes);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ CCreateMethodInfo methodInformation(static_cast<CLocalMethodInfo&>(paActionInfo));
+ initializeCreateInfo(nodeName, (**itMethodNodePairInfo), referencedNodes.isEmpty() ? 0 : *(referencedNodes.back()), methodInformation);
+
+ methodInformation.mOutputSize = paActionInfo.getSendSize();
+ methodInformation.mInputSize = paActionInfo.getReceiveSize();
+
+ createMethodArguments(paActionInfo, methodInformation);
+
+ retVal = createMethodNode(methodInformation, &(*itMethodNodePairInfo)->mNodeId);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_NodeId *tmp = UA_NodeId_new();
+ UA_NodeId_copy(methodInformation.mReturnedNodeId, tmp);
+ referencedNodes.pushBack(tmp);
+ }
+ }
+ }
+ }
+
+ //we add the references first even if it fails, since some nodes might have been created,
+ //and/or some might have been already there, so deleting them will be taken care of by
+ //the referencedNodesDecrement function later
+ referencedNodesIncrement(referencedNodes, paActionInfo);
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ referencedNodesDecrement(paActionInfo);
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itRerencedNodes = referencedNodes.begin(); itRerencedNodes != referencedNodes.end(); ++itRerencedNodes) {
+ UA_NodeId_delete(*itRerencedNodes);
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::handleExistingMethod(CActionInfo &paActionInfo, UA_NodeId &paParentNode) {
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator it = paActionInfo.getNodePairInfo().begin();
+ UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+
+ DEVLOG_INFO("[OPC UA LOCAL]: Adding a callback for an existing method at %s\n", (*it)->mBrowsePath.getValue());
+
+ //check if the method was already referenced by another FB
+ for(CSinglyLinkedList<UA_ParentNodeHandler>::Iterator iter = mMethodsContexts.begin(); iter != mMethodsContexts.end(); ++iter) {
+ if(UA_NodeId_equal(&paParentNode, (*iter).mParentNodeId) && UA_NodeId_equal((*it)->mNodeId, (*iter).mMethodNodeId)) {
+ DEVLOG_ERROR(
+ "[OPC UA LOCAL]: The FB %s is trying to reference a local method at %s which has already a FB who is referencing it. Cannot add another one\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), (*it)->mBrowsePath.getValue());
+ retVal = UA_STATUSCODE_BADINTERNALERROR;
+ break;
+ }
+ }
+
+ //TODO: check types of existing method to this layer
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ retVal = UA_Server_setMethodNode_callback(mUaServer, *(*it)->mNodeId, COPC_UA_Local_Handler::CUA_LocalCallbackFunctions::onServerMethodCall);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ retVal = UA_Server_setNodeContext(mUaServer, *(*it)->mNodeId, &mMethodsContexts);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_ParentNodeHandler parentNodeContext(paParentNode, (*it)->mNodeId, static_cast<CLocalMethodInfo&>(paActionInfo));
+ mMethodsContexts.pushBack(parentNodeContext);
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not set context function for method at %s. Error: %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName(),
+ UA_StatusCode_name(retVal));
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not set callback function for method at %s. Error: %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName(),
+ UA_StatusCode_name(retVal));
+ }
+ }
+ return retVal;
+}
+
+void COPC_UA_Local_Handler::createMethodArguments(CActionInfo &paActionInfo, CCreateMethodInfo &paCreateMethodInfo) {
+ const SFBInterfaceSpec *interfaceFB = paActionInfo.getLayer().getCommFB()->getFBInterfaceSpec();
+
+ const CIEC_ANY *dataToSend = paActionInfo.getDataToSend();
+ CIEC_ANY *dataToReceive = paActionInfo.getDataToReceive();
+
+ paCreateMethodInfo.mOutputArguments = static_cast<UA_Argument *>(UA_Array_new(paCreateMethodInfo.mOutputSize, &UA_TYPES[UA_TYPES_ARGUMENT]));
+ paCreateMethodInfo.mInputArguments = static_cast<UA_Argument *>(UA_Array_new(paCreateMethodInfo.mInputSize, &UA_TYPES[UA_TYPES_ARGUMENT]));
+
+ for(size_t i = 0; i < paCreateMethodInfo.mOutputSize + paCreateMethodInfo.mInputSize; i++) {
+ UA_Argument *arg;
+ if(i < paCreateMethodInfo.mOutputSize) {
+ arg = &(paCreateMethodInfo.mOutputArguments)[i];
+ UA_Argument_init(arg);
+ arg->name = UA_STRING_ALLOC(CStringDictionary::getInstance().get(interfaceFB->m_aunDINames[i + 2])); //we store the names of the SDs/RDs as names for the arguments names. Not so nice. + 2 skips the QI and ID
+ arg->dataType = COPC_UA_Helper::getOPCUATypeFromAny(dataToSend[i])->typeId;
+ } else {
+ arg = &(paCreateMethodInfo.mInputArguments)[i - paCreateMethodInfo.mOutputSize];
+ UA_Argument_init(arg);
+ arg->name = UA_STRING_ALLOC(CStringDictionary::getInstance().get(interfaceFB->m_aunDONames[i - paCreateMethodInfo.mOutputSize + 2])); // + 2 skips the QO and STATUS
+ arg->dataType = COPC_UA_Helper::getOPCUATypeFromAny(dataToReceive[i - paCreateMethodInfo.mOutputSize])->typeId;
+ }
+
+ arg->arrayDimensionsSize = 0;
+ arg->arrayDimensions = 0;
+ arg->description = UA_LOCALIZEDTEXT_ALLOC(mEnglishLocaleForNodes, "Method parameter");
+ arg->valueRank = -1;
+ }
+}
+
+UA_StatusCode COPC_UA_Local_Handler::createMethodNode(CCreateMethodInfo &paCreateMethodInfo, UA_NodeId **paNodeId) {
+
+ UA_NodeId requestedNodeId;
+ if(paCreateMethodInfo.mRequestedNodeId) {
+ UA_NodeId_copy(paCreateMethodInfo.mRequestedNodeId, &requestedNodeId);
+ } else {
+ requestedNodeId = UA_NODEID_NUMERIC(paCreateMethodInfo.mBrowseName->namespaceIndex, 0); //if not provided, let the server generate the NodeId using the namespace from the browsename
+ }
+
+ UA_NodeId parentNodeId;
+ if(paCreateMethodInfo.mParentNodeId) {
+ UA_NodeId_copy(paCreateMethodInfo.mParentNodeId, &parentNodeId);
+ } else {
+ parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+ DEVLOG_WARNING(
+ "[OPC UA LOCAL]: You are creating a Method %.*s in the /Root folder. This is not a good practice. Try to create them in the /Root/Objects folder\n",
+ paCreateMethodInfo.mBrowseName->name.length, reinterpret_cast<const char*>(paCreateMethodInfo.mBrowseName->name.data));
+ }
+
+ UA_MethodAttributes methodAttributes;
+ UA_MethodAttributes_init(&methodAttributes);
+ methodAttributes.description = UA_LOCALIZEDTEXT_ALLOC(mEnglishLocaleForNodes, "Method which can be called");
+ methodAttributes.executable = true;
+ methodAttributes.userExecutable = true;
+ methodAttributes.displayName.locale = UA_STRING_ALLOC(mEnglishLocaleForNodes);
+ UA_String_copy(&paCreateMethodInfo.mBrowseName->name, &methodAttributes.displayName.text);
+
+ UA_StatusCode retVal = UA_Server_addMethodNode(mUaServer, requestedNodeId, parentNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+ *paCreateMethodInfo.mBrowseName, methodAttributes, COPC_UA_Local_Handler::CUA_LocalCallbackFunctions::onServerMethodCall, paCreateMethodInfo.mInputSize,
+ paCreateMethodInfo.mInputArguments, paCreateMethodInfo.mOutputSize, paCreateMethodInfo.mOutputArguments, &mMethodsContexts,
+ paCreateMethodInfo.mReturnedNodeId);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(!*paNodeId) {
+ *paNodeId = UA_NodeId_new();
+ UA_NodeId_copy(paCreateMethodInfo.mReturnedNodeId, *paNodeId);
+ }
+
+ UA_ParentNodeHandler parentNodeContext(parentNodeId, *paNodeId, paCreateMethodInfo.mLocalMethodInfo);
+ mMethodsContexts.pushBack(parentNodeContext);
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: OPC UA could not create method at %s. Error: %s\n",
+ paCreateMethodInfo.mLocalMethodInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+ }
+
+ UA_NodeId_deleteMembers(&parentNodeId);
+ UA_NodeId_deleteMembers(&requestedNodeId);
+ UA_MethodAttributes_deleteMembers(&methodAttributes);
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::initializeCreateObject(CActionInfo &paActionInfo) {
+ //The main process is done in the execution
+ UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator it = paActionInfo.getNodePairInfo().begin();
+ ++it;
+
+ if("" == (*it)->mBrowsePath) { //the browsename of the instance is mandatory
+ retVal = UA_STATUSCODE_BADINTERNALERROR;
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::initializeDeleteObject(CActionInfo &) {
+ //nothing to do here
+ return UA_STATUSCODE_GOOD;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::executeWrite(CActionInfo &paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+ const CIEC_ANY *dataToSend = paActionInfo.getDataToSend();
+ size_t indexOfNodePair = 0;
+ for(CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator it = paActionInfo.getNodePairInfo().begin(); it != paActionInfo.getNodePairInfo().end();
+ ++it, indexOfNodePair++) {
+
+ retVal = updateNodeValue(*(*it)->mNodeId, &dataToSend[indexOfNodePair]);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not convert value to write for port %d at FB %s. Error: %s\n", indexOfNodePair,
+ paActionInfo.getLayer().getCommFB()->getInstanceName(), UA_StatusCode_name(retVal));
+ break;
+ }
+
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::executeCreateMethod(CActionInfo &paActionInfo) {
+ //This is the return of a local method call, when RSP is triggered
+
+ UA_StatusCode retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ CLocalMethodCall *localMethodCall = getLocalMethodCall(static_cast<CLocalMethodInfo&>(paActionInfo));
+ if(localMethodCall) {
+ const CIEC_ANY *dataToSend = paActionInfo.getDataToSend();
+ // copy SD values to output
+ for(size_t i = 0; i < localMethodCall->mSendHandle.mSize; i++) {
+ COPC_UA_Helper::fillVariant(*localMethodCall->mSendHandle.mData[i], dataToSend[i]);
+ }
+
+ localMethodCall->mActionInfo.getResultReady().inc();
+ retVal = UA_STATUSCODE_GOOD;
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: The method being returned hasn't been called before of FB %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName());
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::executeCreateObject(CActionInfo &paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itTypeNodePairInfo = paActionInfo.getNodePairInfo().begin();
+
+ //look for type first
+ if(isTypeOfObjectPresent(**itTypeNodePairInfo)) {
+
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itInstance = paActionInfo.getNodePairInfo().begin();
+ ++itInstance;
+
+ CSinglyLinkedList<UA_NodeId*> referencedNodes;
+ bool isNodePresent = false;
+ //check if an instance is already present
+ retVal = getNode(**itInstance, referencedNodes, &isNodePresent);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(!isNodePresent) {
+
+ CIEC_STRING nodeName;
+ retVal = splitAndCreateFolders((*itInstance)->mBrowsePath, nodeName, referencedNodes);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ CCreateObjectInfo createInformation;
+
+ initializeCreateInfo(nodeName, (**itInstance), referencedNodes.isEmpty() ? 0 : *(referencedNodes.back()), createInformation);
+ createInformation.mTypeNodeId = (*itTypeNodePairInfo)->mNodeId;
+
+ retVal = createObjectNode(createInformation);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_NodeId *tmp = UA_NodeId_new();
+ UA_NodeId_copy(createInformation.mReturnedNodeId, tmp);
+ referencedNodes.pushBack(tmp);
+ }
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: You are trying to create a node which already exists at FB %s\n", paActionInfo.getLayer().getCommFB()->getInstanceName());
+ retVal = UA_STATUSCODE_BADINTERNALERROR;
+ }
+ }
+
+ //we add the references first even if itType fails, since some nodes might have been created,
+ //and/or some might have been already there, so deleting them will be taken care of by
+ //the referencedNodesDecrement function later
+ referencedNodesIncrement(referencedNodes, paActionInfo);
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ referencedNodesDecrement(paActionInfo);
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itRerencedNodes = referencedNodes.begin(); itRerencedNodes != referencedNodes.end(); ++itRerencedNodes) {
+ UA_NodeId_delete(*itRerencedNodes);
+ }
+
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: The type of the object to create could not be found \n", paActionInfo.getLayer().getCommFB()->getInstanceName());
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::createObjectNode(CCreateObjectInfo &paCreateVariableInfo) {
+
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+
+ UA_NodeId requestedNodeId;
+ if(paCreateVariableInfo.mRequestedNodeId) {
+ UA_NodeId_copy(paCreateVariableInfo.mRequestedNodeId, &requestedNodeId);
+ } else {
+ requestedNodeId = UA_NODEID_NUMERIC(paCreateVariableInfo.mBrowseName->namespaceIndex, 0); //if not provided, let the server generate the NodeId using the namespace from the browsename
+ }
+
+ UA_NodeId parentNodeId;
+ if(paCreateVariableInfo.mParentNodeId) {
+ UA_NodeId_copy(paCreateVariableInfo.mParentNodeId, &parentNodeId);
+ } else {
+ parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+ DEVLOG_WARNING(
+ "[OPC UA LOCAL]: You are creating an Object %.*s in the /Root folder. This is not a good practice. Try to create them in the /Root/Objects folder\n",
+ paCreateVariableInfo.mBrowseName->name.length, reinterpret_cast<const char*>(paCreateVariableInfo.mBrowseName->name.data));
+ }
+
+ CIEC_STRING nodeName;
+ nodeName.assign(reinterpret_cast<const char*>(paCreateVariableInfo.mBrowseName->name.data),
+ static_cast<TForteUInt16>(paCreateVariableInfo.mBrowseName->name.length));
+
+ UA_ObjectAttributes oAttr;
+ UA_ObjectAttributes_init(&oAttr);
+ oAttr.description = UA_LOCALIZEDTEXT_ALLOC("", nodeName.getValue());
+ oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("", nodeName.getValue());
+ retVal = UA_Server_addObjectNode(mUaServer, requestedNodeId, parentNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), *paCreateVariableInfo.mBrowseName,
+ *paCreateVariableInfo.mTypeNodeId, oAttr, 0, paCreateVariableInfo.mReturnedNodeId);
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not addObjectNode. Error: %s\n", UA_StatusCode_name(retVal));
+ }
+ UA_NodeId_deleteMembers(&requestedNodeId);
+ UA_ObjectAttributes_deleteMembers(&oAttr);
+
+ return retVal;
+}
+
+bool COPC_UA_Local_Handler::isTypeOfObjectPresent(CActionInfo::CNodePairInfo &paNodePairInfo) {
+ bool isNodePresent = false;
+ CSinglyLinkedList<UA_NodeId*> referencedNodes;
+
+ UA_StatusCode retVal = getNode(paNodePairInfo, referencedNodes, &isNodePresent);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(isNodePresent) {
+ isNodePresent = true;
+ }
+ //we don't need the nodes from the type
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itPresentNodes = referencedNodes.begin(); itPresentNodes != referencedNodes.end(); ++itPresentNodes) {
+ UA_NodeId_delete(*itPresentNodes);
+ }
+ referencedNodes.clearAll();
+ }
+ return isNodePresent;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::executeDeleteObject(CActionInfo &paActionInfo) {
+
+ bool isNodePresent = false;
+ CSinglyLinkedList<CActionInfo::CNodePairInfo*>::Iterator itInstance = paActionInfo.getNodePairInfo().begin();
+ CSinglyLinkedList<UA_NodeId*> referencedNodes;
+
+ //look for instance
+ UA_StatusCode retVal = getNode(**itInstance, referencedNodes, &isNodePresent);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(isNodePresent) {
+ retVal = UA_Server_deleteNode(mUaServer, *(*itInstance)->mNodeId, true);
+ } else {
+ DEVLOG_ERROR("[OPC UA LOCAL]: The instance of the object to delete could not be found for FB %s\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName());
+ retVal = UA_STATUSCODE_BADINTERNALERROR;
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itPresendNodes = referencedNodes.begin(); itPresendNodes != referencedNodes.end(); ++itPresendNodes) {
+ UA_NodeId_delete(*itPresendNodes);
+ }
+ referencedNodes.clearAll();
+ }
+
+ return retVal;
+}
+
+void COPC_UA_Local_Handler::initializeCreateInfo(CIEC_STRING &paNodeName, CActionInfo::CNodePairInfo &paNodePairInfo, const UA_NodeId *paParentNodeId,
+ CCreateInfo &paResult) {
+ COPC_UA_Helper::getBrowsenameFromNodeName(paNodeName.getValue(), scmDefaultBrowsenameNameSpace, *paResult.mBrowseName); //this cannot fail here anymore, since it was checked already with getNode
+ paResult.mRequestedNodeId = paNodePairInfo.mNodeId;
+ paResult.mParentNodeId = paParentNodeId;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::getNode(CActionInfo::CNodePairInfo &paNodePairInfo, CSinglyLinkedList<UA_NodeId*> &paFoundNodeIds, bool *paIsPresent) {
+ UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+ *paIsPresent = false;
+
+ if("" != paNodePairInfo.mBrowsePath) {
+ UA_BrowsePath *browsePaths = 0;
+ size_t pathCount = 0;
+ size_t firstNonExistingNode = 0;
+
+ CSinglyLinkedList<UA_NodeId*> existingNodeIds;
+ retVal = translateBrowseNameAndStore(paNodePairInfo.mBrowsePath.getValue(), &browsePaths, &pathCount, &firstNonExistingNode, existingNodeIds);
+ if(UA_STATUSCODE_GOOD == retVal) {
+ if(firstNonExistingNode == pathCount) { //all nodes exist
+ *paIsPresent = true;
+ if(paNodePairInfo.mNodeId) { //nodeID was provided
+ if(!UA_NodeId_equal(paNodePairInfo.mNodeId, *existingNodeIds.back())) {
+ *paIsPresent = false; // the found Node has not the same NodeId.
+ }
+ } else { //if no nodeID was provided, the found Node is stored in the nodePairInfo
+ paNodePairInfo.mNodeId = UA_NodeId_new();
+ UA_NodeId_copy(*existingNodeIds.back(), paNodePairInfo.mNodeId);
+ }
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator it = existingNodeIds.begin(); it != existingNodeIds.end(); ++it) {
+ if(!*paIsPresent) {
+ UA_NodeId_delete(*it);
+ } else {
+ paFoundNodeIds.pushBack((*it));
+ }
+ }
+ COPC_UA_Helper::releaseBrowseArgument(*browsePaths, pathCount);
+ }
+ } else {
+ void *handle = 0;
+ //we use UA_Server_getNodeContext just to check if the node exist in the addressspace
+ if(UA_STATUSCODE_BADNODEIDUNKNOWN != UA_Server_getNodeContext(mUaServer, *paNodePairInfo.mNodeId, &handle)) {
+ *paIsPresent = true;
+ }
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::translateBrowseNameAndStore(const char *paBrowsePath, UA_BrowsePath **paBrowsePaths, size_t *paFoldercount,
+ size_t *paFirstNonExistingNode, CSinglyLinkedList<UA_NodeId*> &paFoundNodeIds) {
+
+ UA_StatusCode retVal = COPC_UA_Helper::prepareBrowseArgument(paBrowsePath, paBrowsePaths, paFoldercount);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_BrowsePathResult *browsePathsResults = 0;
+ CSinglyLinkedList<UA_NodeId*> storedNodeIds;
+
+ browsePathsResults = static_cast<UA_BrowsePathResult *>(UA_Array_new(*paFoldercount * 2, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]));
+ for(unsigned int i = 0; i < *paFoldercount * 2; i++) {
+ browsePathsResults[i] = UA_Server_translateBrowsePathToNodeIds(mUaServer, &(*paBrowsePaths)[i]);
+ }
+ retVal = storeAlreadyExistingNodes(browsePathsResults, *paFoldercount, paFirstNonExistingNode, storedNodeIds);
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator it = storedNodeIds.begin(); it != storedNodeIds.end(); ++it) {
+ if(UA_STATUSCODE_GOOD != retVal) {
+ UA_NodeId_delete(*it);
+ } else {
+ paFoundNodeIds.pushBack(*it);
+ }
+ }
+
+ UA_Array_delete(browsePathsResults, *paFoldercount * 2, &UA_TYPES[UA_TYPES_BROWSEPATHRESULT]);
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::storeAlreadyExistingNodes(UA_BrowsePathResult *paBrowsePathsResults, size_t paFolderCnt, size_t *paFirstNonExistingNode,
+ CSinglyLinkedList<UA_NodeId*> &paCreatedNodeIds) {
+ size_t foundFolderOffset = 0;
+ int retVal; // no unsigned, because we need to check for -1
+ bool offsetFound = false;
+ for(retVal = static_cast<int>(paFolderCnt) - 1; retVal >= 0; retVal--) {
+ if(UA_STATUSCODE_GOOD == paBrowsePathsResults[retVal].statusCode) { // find first existing node. Check for isInverse = TRUE
+ foundFolderOffset = 0;
+ offsetFound = true;
+ } else if(UA_STATUSCODE_GOOD == paBrowsePathsResults[paFolderCnt + retVal].statusCode) { // and for isInverse = FALSE
+ foundFolderOffset = paFolderCnt;
+ offsetFound = true;
+ }
+
+ if(offsetFound) {
+ break;
+ }
+ }
+
+ if(-1 != retVal) {
+ if(paBrowsePathsResults[foundFolderOffset + retVal].targetsSize == 0) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not translate browse paths to node IDs. Target size is 0.\n");
+ return UA_STATUSCODE_BADINTERNALERROR;
+ } else {
+ if(paBrowsePathsResults[foundFolderOffset + retVal].targetsSize > 1) {
+ DEVLOG_WARNING("[OPC UA LOCAL]: The given browse path has multiple results for the same path. Taking the first result.\n");
+ }
+ }
+ }
+ retVal++;
+
+ for(int j = 0; j < retVal; j++) {
+ UA_NodeId *tmp = UA_NodeId_new();
+ UA_NodeId_copy(&paBrowsePathsResults[foundFolderOffset + j].targets[0].targetId.nodeId, tmp);
+ paCreatedNodeIds.pushBack(tmp);
+ }
+
+ *paFirstNonExistingNode = static_cast<size_t>(retVal);
+ return UA_STATUSCODE_GOOD;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::createFolders(const char *paFolders, CSinglyLinkedList<UA_NodeId*> &paCreatedNodeIds) {
+
+ UA_BrowsePath *browsePaths = 0;
+ size_t folderCnt = 0;
+ size_t firstNonExistingNode;
+ CSinglyLinkedList<UA_NodeId*> existingNodeIds;
+ UA_StatusCode retVal = translateBrowseNameAndStore(paFolders, &browsePaths, &folderCnt, &firstNonExistingNode, existingNodeIds);
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ UA_NodeId parentNodeId;
+ if(existingNodeIds.isEmpty()) {
+ UA_NodeId objectsNode = UA_NODEID_NUMERIC(0, UA_NS0ID_ROOTFOLDER);
+ UA_NodeId_copy(&objectsNode, &parentNodeId);
+ } else {
+ UA_NodeId_copy(*existingNodeIds.back(), &parentNodeId);
+ }
+
+ CSinglyLinkedList<UA_NodeId*> createdNodeIds;
+
+ // create all the nodes on the way
+ for(size_t j = firstNonExistingNode; j < folderCnt; j++) {
+
+ UA_NodeId type = UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE);
+ CCreateObjectInfo createInformation;
+
+ createInformation.mRequestedNodeId = 0;
+ createInformation.mParentNodeId = &parentNodeId;
+ UA_QualifiedName_copy(&browsePaths[folderCnt - 1].relativePath.elements[j].targetName, createInformation.mBrowseName);
+ createInformation.mTypeNodeId = &type;
+
+ retVal = createObjectNode(createInformation);
+
+ if(UA_STATUSCODE_GOOD != retVal) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Could not create folder %.*s in path %s. Error: %s\n", createInformation.mBrowseName->name.length,
+ reinterpret_cast<const char*>(createInformation.mBrowseName->name.data), paFolders, UA_StatusCode_name(retVal));
+ break;
+ }
+
+ UA_NodeId *tmp = UA_NodeId_new();
+ UA_NodeId_copy(createInformation.mReturnedNodeId, tmp);
+ createdNodeIds.pushBack(tmp);
+
+ UA_NodeId_deleteMembers(&parentNodeId);
+ UA_NodeId_copy(createInformation.mReturnedNodeId, &parentNodeId);
+ }
+
+ UA_NodeId_deleteMembers(&parentNodeId);
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator it = existingNodeIds.begin(); it != existingNodeIds.end(); ++it) {
+ if(UA_STATUSCODE_GOOD != retVal) {
+ UA_NodeId_delete(*it);
+ } else {
+ paCreatedNodeIds.pushBack(*it);
+ }
+ }
+
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator it = createdNodeIds.begin(); it != createdNodeIds.end(); ++it) {
+ paCreatedNodeIds.pushBack(*it); //store the NodeId because the object was created, and if the next fails, the node should be referenced
+ }
+
+ COPC_UA_Helper::releaseBrowseArgument(*browsePaths, folderCnt);
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Local_Handler::splitAndCreateFolders(CIEC_STRING &paBrowsePath, CIEC_STRING &paNodeName,
+ CSinglyLinkedList<UA_NodeId*> &paRreferencedNodes) {
+ CIEC_STRING folders;
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ if(splitFoldersFromNode(paBrowsePath, folders, paNodeName)) {
+ retVal = UA_STATUSCODE_GOOD;
+ if("" != folders) {
+ retVal = createFolders(folders.getValue(), paRreferencedNodes);
+ }
+ }
+ return retVal;
+}
+
+bool COPC_UA_Local_Handler::splitFoldersFromNode(const CIEC_STRING &paOriginal, CIEC_STRING &paFolder, CIEC_STRING &paNodeName) {
+
+ bool retVal = false;
+
+ if(COPC_UA_Helper::isBrowsePathValid(paOriginal.getValue())) {
+ retVal = true;
+
+ CIEC_STRING copyOfOriginal(paOriginal);
+
+ char *begin = copyOfOriginal.getValue();
+ char *runner = begin + copyOfOriginal.length() - 1;
+
+ if('/' == *runner) { // remove tailing slash
+ *runner = '\0';
+ runner--;
+ }
+
+ while('/' != *runner) {
+ runner--;
+ }
+
+ *runner = '\0';
+ paNodeName = runner + 1;
+
+ if(begin != runner) {
+ paFolder = begin;
+ }
+ }
+
+ return retVal;
+}
+
+void COPC_UA_Local_Handler::handlePresentNodes(CSinglyLinkedList<UA_NodeId*> &paPresentNodes, CSinglyLinkedList<UA_NodeId*> &paReferencedNodes, bool paFailed) {
+ for(CSinglyLinkedList<UA_NodeId*>::Iterator itPresendNodes = paPresentNodes.begin(); itPresendNodes != paPresentNodes.end(); ++itPresendNodes) {
+ if(paFailed) {
+ UA_NodeId_delete(*itPresendNodes);
+ } else {
+ paReferencedNodes.pushBack(*itPresendNodes);
+ }
+ }
+}
+
+COPC_UA_Local_Handler::CLocalMethodCall& COPC_UA_Local_Handler::addMethodCall(CLocalMethodInfo &paActionInfo,
+ COPC_UA_Helper::UA_SendVariable_handle &paHandleRecv) {
+ CCriticalRegion criticalRegion(mMethodCallsMutex);
+ mMethodCalls.pushBack(CLocalMethodCall(paActionInfo, paHandleRecv));
+ CSinglyLinkedList<CLocalMethodCall>::Iterator justPushed = mMethodCalls.back();
+ return *justPushed;
+}
+
+void COPC_UA_Local_Handler::removeMethodCall(CLocalMethodCall &toRemove) {
+ CCriticalRegion criticalRegion(mMethodCallsMutex);
+ mMethodCalls.erase(toRemove);
+}
+
+COPC_UA_Local_Handler::CLocalMethodCall *COPC_UA_Local_Handler::getLocalMethodCall(CLocalMethodInfo &paActionInfo) {
+ CCriticalRegion criticalRegion(mMethodCallsMutex);
+ CLocalMethodCall *retVal = 0;
+ for(CSinglyLinkedList<CLocalMethodCall>::Iterator it = mMethodCalls.begin(); it != mMethodCalls.end(); ++it) {
+ if(&(*it).mActionInfo == &paActionInfo) {
+ retVal = &(*it);
+ break;
+ }
+ }
+ return retVal;
+}
+
+// ******************** CALLBACKS *************************
+
+UA_StatusCode COPC_UA_Local_Handler::CUA_LocalCallbackFunctions::onServerMethodCall(UA_Server *, const UA_NodeId *, void *, const UA_NodeId *paMethodNodeId,
+ void *paMethodContext, //NOSONAR
+ const UA_NodeId *paParentNodeId, void *, //NOSONAR
+ size_t paInputSize, const UA_Variant *paInput, size_t paOutputSize, UA_Variant *paOutput) {
+
+ UA_StatusCode retVal = UA_STATUSCODE_BADUNEXPECTEDERROR;
+ CLocalMethodInfo *localMethodHandle = 0;
+ CSinglyLinkedList<UA_ParentNodeHandler> *methodsContexts = static_cast<CSinglyLinkedList<UA_ParentNodeHandler>*>(paMethodContext);
+ for(CSinglyLinkedList<UA_ParentNodeHandler>::Iterator iter = methodsContexts->begin(); iter != methodsContexts->end(); ++iter) {
+ if(UA_NodeId_equal(paParentNodeId, (*iter).mParentNodeId) && UA_NodeId_equal(paMethodNodeId, (*iter).mMethodNodeId)) {
+ localMethodHandle = &(*iter).mActionInfo;
+ break;
+ }
+ }
+
+ if(!localMethodHandle) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: Method doesn't have any FB referencing it\n");
+ } else {
+ if(paInputSize != localMethodHandle->getReceiveSize() || paOutputSize != localMethodHandle->getSendSize()) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: method call got invalid number of arguments. In: %d==%d, Out: %d==%d\n", localMethodHandle->getReceiveSize(), paInputSize,
+ localMethodHandle->getSendSize(), paOutput);
+ } else {
+ // other thread may currently create nodes for the same path, thus mutex
+ CCriticalRegion criticalRegion(localMethodHandle->getMutex()); //TODO: do we need this mutex?
+
+ COPC_UA_Helper::UA_SendVariable_handle sendHandle(paOutputSize);
+ COPC_UA_Helper::UA_RecvVariable_handle recvHandle(paInputSize);
+
+ for(size_t i = 0; i < paInputSize; i++) {
+ recvHandle.mData[i] = &paInput[i];
+ }
+
+ for(size_t i = 0; i < paOutputSize; i++) {
+ sendHandle.mData[i] = &paOutput[i];
+ }
+
+ // Handle return of receive mData
+ if(e_ProcessDataOk == localMethodHandle->getLayer().recvData(static_cast<const void *>(&recvHandle), 0)) { //TODO: add multidimensional mData handling with 'range'.
+
+ localMethodHandle->getLayer().getCommFB()->interruptCommFB(&localMethodHandle->getLayer());
+
+ //when the method finishes, and RSP is triggered, sendHandle will be filled with the right information
+ CLocalMethodCall &localMethodCall = ::getExtEvHandler<COPC_UA_Local_Handler>(*localMethodHandle->getLayer().getCommFB()).addMethodCall(
+ *localMethodHandle, sendHandle);
+
+ ::getExtEvHandler<COPC_UA_Local_Handler>(*localMethodHandle->getLayer().getCommFB()).startNewEventChain(localMethodHandle->getLayer().getCommFB());
+
+ //wait For semaphore, which will be released by execute Local Method in this handler
+ if(!localMethodHandle->getResultReady().timedWait(scmMethodCallTimeoutInNanoSeconds)) {
+ DEVLOG_ERROR("[OPC UA LOCAL]: method call did not get result values within timeout of %u nanoseconds.\n", scmMethodCallTimeoutInNanoSeconds);
+ retVal = UA_STATUSCODE_BADTIMEOUT;
+ } else {
+ retVal = sendHandle.mFailed ? UA_STATUSCODE_BADUNEXPECTEDERROR : UA_STATUSCODE_GOOD;
+ }
+
+ ::getExtEvHandler<COPC_UA_Local_Handler>(*localMethodHandle->getLayer().getCommFB()).removeMethodCall(localMethodCall);
+ }
+ }
+ }
+ return retVal;
+}
+
+void COPC_UA_Local_Handler::CUA_LocalCallbackFunctions::onWrite(UA_Server *, const UA_NodeId *, void *, const UA_NodeId *, void *nodeContext, //NOSONAR
+ const UA_NumericRange *, const UA_DataValue *data) {
+
+ UA_VariableContext_Handle *variableCallbackHandle = static_cast<UA_VariableContext_Handle *>(nodeContext);
+
+ COPC_UA_Helper::UA_RecvVariable_handle handleRecv(1);
+
+ handleRecv.mData[0] = data->hasValue ? &data->value : 0; //TODO: check this empty data
+ handleRecv.mOffset = variableCallbackHandle->mPortIndex;
+
+ EComResponse retVal = variableCallbackHandle->mActionInfo.getLayer().recvData(static_cast<const void *>(&handleRecv), 0); //TODO: add multidimensional mData handling with 'range'.
+
+ if(e_Nothing != retVal) {
+ variableCallbackHandle->mActionInfo.getLayer().getCommFB()->interruptCommFB(&variableCallbackHandle->mActionInfo.getLayer());
+ ::getExtEvHandler<COPC_UA_Local_Handler>(*variableCallbackHandle->mActionInfo.getLayer().getCommFB()).startNewEventChain(
+ variableCallbackHandle->mActionInfo.getLayer().getCommFB());
+ }
+}
diff --git a/src/modules/opc_ua/opcua_local_handler.h b/src/modules/opc_ua/opcua_local_handler.h
new file mode 100644
index 0000000..1b9a32c
--- /dev/null
+++ b/src/modules/opc_ua/opcua_local_handler.h
@@ -0,0 +1,685 @@
+/*******************************************************************************
+ * Copyright (c) 2015-2019 Florian Froschermeier <florian.froschermeier@tum.de>,
+ * fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Florian Froschermeier
+ * - initial integration of the OPC-UA protocol
+ * Stefan Profanter
+ * - refactoring and adaption to new concept
+ * Jose Cabral:
+ * - refactoring to cleaner architecture
+ *******************************************************************************/
+
+#ifndef SRC_MODULES_OPC_UA_OPCUALOCALHANDLER_H_
+#define SRC_MODULES_OPC_UA_OPCUALOCALHANDLER_H_
+
+#include <forte_thread.h>
+#include <conn.h>
+#include <forte_sem.h>
+#include <forte_sync.h>
+#include "../../core/fortelist.h"
+#include "opcua_handler_abstract.h"
+#include "opcua_helper.h"
+
+/**
+ * Class to handle all action that are executed on a local OPC UA server
+ */
+// cppcheck-suppress noConstructor
+class COPC_UA_Local_Handler : public COPC_UA_HandlerAbstract, public CThread {
+ DECLARE_HANDLER(COPC_UA_Local_Handler)
+ public:
+
+ /**
+ * Starts OPC UA Server
+ */
+ void enableHandler(void);
+
+ /**
+ * Stops the OPC UA server
+ */
+ void disableHandler(void);
+
+ /**
+ * Class containing all local callback functions that are called by the OPC UA stack
+ */
+ class CUA_LocalCallbackFunctions {
+ public:
+ /**
+ * Callback when a method in the OPC UA server was executed
+ */
+ static UA_StatusCode onServerMethodCall(UA_Server *paServer, const UA_NodeId *paSessionId, void *paSessionContext, const UA_NodeId *paMethodId,
+ void *paMethodContext, const UA_NodeId *paObjectId, void *paObjectContext, size_t paInputSize, const UA_Variant *paInput, size_t paOutputSize,
+ UA_Variant *paOutput);
+
+ /**
+ * Callback when an external client writes to a variable on this server.
+ */
+ static void onWrite(UA_Server *paServer, const UA_NodeId *paSessionId, void *paSessionContext, const UA_NodeId *paNodeId, void *paNodeContext,
+ const UA_NumericRange *paRange, const UA_DataValue *paData);
+ };
+
+ protected:
+
+ /**
+ * Perform all the needed initialization of the action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode initializeAction(CActionInfo &paActionInfo);
+
+ /**
+ * Execute the action
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode executeAction(CActionInfo &paActionInfo);
+
+ /**
+ * Uninitialize the action
+ * @param paActionInfo Action to be Uninitialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode uninitializeAction(CActionInfo &paActionInfo);
+
+ private:
+
+ /**
+ * Overridden run() from CThread which loops the UA Server.
+ */
+ virtual void run();
+
+ /**
+ * Starts the OPC UA server, if it is not already running
+ */
+ void startServer();
+
+ /**
+ * Indicates that the server has started, and allow waiting threads to work on it
+ */
+ CSemaphore mServerStarted;
+
+ /**
+ * Stops the OPC UA server
+ */
+ void stopServer();
+
+ /**
+ * Structure to contain all needed strings to configure the server
+ */
+ struct UA_ServerStrings {
+ CIEC_STRING mHostname;
+ CIEC_STRING mAppURI;
+ };
+
+ /**
+ * Generate the hostname and the application URI that will be used to configure the server
+ * @param paUAServerPort Port where the OPC UA server will listen
+ * @param paServerStrings Place to store the generated strings
+ */
+ void generateServerStrings(TForteUInt16 paUAServerPort, UA_ServerStrings &paServerStrings);
+ /**
+ * Creates the configuration for the OPC UA Server.
+ * @param paUAServerPort Port where the OPC UA server will listen
+ * @param paServerStrings Strings needed to configure the server
+ * @param paUaServerConfig Place to store all the configurations
+ */
+ void configureUAServer(TForteUInt16 paUAServerPort, UA_ServerStrings &paServerStrings, UA_ServerConfig &paUaServerConfig);
+
+ /**
+ * Handler of the OPC UA stack server
+ */
+ UA_Server *mUaServer;
+
+ /**
+ * Flag indicating if the server should be running or not
+ */
+ volatile UA_Boolean mUaServerRunningFlag;
+
+ /**
+ * Maximal length for the server name
+ */
+ static const size_t scmMaxServerNameLength = 255;
+
+ /**
+ * Generated function that call the initialization of all nodespaces added by the user in CMake
+ * @param paUaServer OPC UA Server
+ * @return True if no error occurred, false otherwise
+ */
+ bool initializeNodesets(UA_Server &paUaServer);
+
+ /**
+ * Map to know which actions are using which nodes. When an action is unitialized, this is checked
+ * to see if the nodeId still has some action using it. If not, then it can be safely deleted
+ */
+ struct nodesReferencedByActions {
+ const UA_NodeId *mNodeId;
+ CSinglyLinkedList<CActionInfo*> mActionsReferencingIt;
+ };
+
+ /**
+ * For each node that is accessed by the action, an entry in this list is added
+ */
+ CSinglyLinkedList<nodesReferencedByActions*> mNodesReferences;
+
+ /**
+ * Mutex to access mNodesReferences
+ */
+ CSyncObject mNodesReferencesMutex;
+
+ /**
+ * For all nodes that an action is referencing, it adds the action as reference
+ * @param paNodes Nodes being referenced by the action
+ * @param paActionInfo Action referencing the nodes
+ */
+ void referencedNodesIncrement(const CSinglyLinkedList<UA_NodeId *> &paNodes, CActionInfo &paActionInfo);
+
+ /**
+ * Removes the action from the references from all the nodes where it's present
+ * @param paActionInfo Action to be removed
+ */
+ void referencedNodesDecrement(const CActionInfo &paActionInfo);
+
+ /**
+ * Looks for all nodes which an action is referencing
+ * @param paActionInfo Action to be look for as a reference
+ * @param paNodes Place to store the nodes that are referencing the action
+ */
+ void getNodesReferencedByAction(const CActionInfo &paActionInfo, CSinglyLinkedList<const UA_NodeId *> &paNodes);
+
+ /**
+ * Parent class that encapsulates the information needed to create something in the OPC UA Stack
+ */
+ class CCreateInfo {
+ public:
+ CCreateInfo() :
+ mRequestedNodeId(0), mParentNodeId(0), mBrowseName(UA_QualifiedName_new()), mReturnedNodeId(UA_NodeId_new()) {
+ }
+
+ virtual ~CCreateInfo() {
+ UA_NodeId_delete(mReturnedNodeId);
+ UA_QualifiedName_delete(mBrowseName);
+ }
+
+ UA_NodeId *mRequestedNodeId;
+ const UA_NodeId *mParentNodeId;
+ UA_QualifiedName *mBrowseName;
+ UA_NodeId *mReturnedNodeId;
+
+ private:
+ CCreateInfo(const CCreateInfo &other);
+ CCreateInfo& operator=(const CCreateInfo &other);
+ };
+
+ /**
+ * Class that encapsulates the information needed to create an object in the OPC UA Stack
+ */
+ class CCreateObjectInfo : public CCreateInfo {
+ public:
+ CCreateObjectInfo() :
+ CCreateInfo(), mTypeNodeId(0) {
+ }
+
+ ~CCreateObjectInfo() {
+ }
+
+ UA_NodeId *mTypeNodeId;
+ private:
+ CCreateObjectInfo(const CCreateObjectInfo &paObj);
+ CCreateObjectInfo& operator=(const CCreateObjectInfo &other);
+ };
+
+ /**
+ * Class that encapsulates the information needed to create a variable in the OPC UA Stack
+ */
+ class CCreateVariableInfo : public CCreateInfo {
+ public:
+ CCreateVariableInfo() :
+ CCreateInfo(), mTypeConvert(0), mInitData(0), mAllowWrite(false) {
+
+ }
+
+ ~CCreateVariableInfo() {
+ }
+
+ const UA_DataType *mTypeConvert;
+ const CIEC_ANY *mInitData;
+ bool mAllowWrite;
+ private:
+ CCreateVariableInfo(const CCreateVariableInfo &paObj);
+ CCreateVariableInfo& operator=(const CCreateVariableInfo &other);
+ };
+
+ /**
+ * Class that encapsulates the information needed to create a method in the OPC UA Stack
+ */
+ class CCreateMethodInfo : public CCreateInfo {
+ public:
+ explicit CCreateMethodInfo(CLocalMethodInfo &paCallack) :
+ CCreateInfo(), mInputArguments(0), mOutputArguments(0), mLocalMethodInfo(paCallack), mInputSize(0), mOutputSize(0) {
+
+ }
+ ~CCreateMethodInfo() {
+ UA_Array_delete(mInputArguments, mInputSize, &UA_TYPES[UA_TYPES_ARGUMENT]);
+ UA_Array_delete(mOutputArguments, mOutputSize, &UA_TYPES[UA_TYPES_ARGUMENT]);
+ }
+
+ UA_Argument *mInputArguments;
+ UA_Argument *mOutputArguments;
+ CLocalMethodInfo &mLocalMethodInfo;
+ size_t mInputSize;
+ size_t mOutputSize;
+ private:
+ CCreateMethodInfo(CCreateMethodInfo &other);
+ CCreateMethodInfo& operator=(const CCreateMethodInfo &other);
+ };
+
+ /**
+ * Takes care of the requested nodeId, parent nodeId and the browsename to be given to the new created object/method/variable.
+ * The critical part is the browsename, since it can be given with the namespace using a semicolon (e.g. /Objects/1:myPath/), so
+ * this function handles this case
+ * @param paNodeName Nodename given by the user in the parameters of the action
+ * @param paNodePairInfo Information containing the requested node ID
+ * @param paParentNodeId Information containing the parent node ID
+ * @param paResult Place to store the results
+ */
+ void initializeCreateInfo(CIEC_STRING &paNodeName, CActionInfo::CNodePairInfo &paNodePairInfo, const UA_NodeId *paParentNodeId, CCreateInfo &paResult);
+
+ /**
+ * Context passed to a variable node in the OPC UA stack, which is returned when the variable is written from a client.
+ * ATTENTION: this is exactly the same class as the one used for subscription in the client (UA_SubscribeContext_Handle),
+ * but because of compilation errors occurred when including headers, it was copied, since no right place could be found where to
+ * declare/define this class. If someone can manage to use the same class both in the CUA_ClientInformation and here, it can be deleted
+ */
+ struct UA_VariableContext_Handle {
+ UA_VariableContext_Handle(CActionInfo &paActionInfo, size_t paPortIndex) :
+ mActionInfo(paActionInfo), mPortIndex(paPortIndex) {
+ }
+
+ //default copy constructor should be enough
+
+ bool operator==(UA_VariableContext_Handle const &paRightObject) const {
+ return (&mActionInfo == &paRightObject.mActionInfo && mPortIndex == paRightObject.mPortIndex);
+ }
+
+ CActionInfo &mActionInfo;
+ size_t mPortIndex;
+ };
+
+ /**
+ * List for callback handles to be able to clean them up on destroy.
+ */
+ CSinglyLinkedList<UA_VariableContext_Handle> mNodeCallbackHandles;
+
+ /**
+ * Mutex used to avoid many threads (Resources) to create the same node at the same time
+ */
+ CSyncObject mCreateNodesMutex;
+
+ /**
+ * This class is used to store who is the parent of each method. This need comes from the fact when creating objects that have methods,
+ * the method nodeId of every instance is the same as the method nodeID of the Object type. We can then use a CREATE_METHOD action pointing to this instance of the method,
+ * (let's call it "reference CREATE_METHOD") but there's no way of setting a specific context (in our case, a CLocalMethodInfo) that is returned in the callback, because the
+ * OPC UA API ask just for nodeID of the node when setting the context (and as said before, all methods instances share the same nodeId).
+ * We can set the context for methods that are created directly (no "reference CREATE_METHOD"), but for keeping the context the same for all kind of methods,
+ * in those cases, we also store the information using this class
+ */
+ class UA_ParentNodeHandler {
+ public:
+ UA_ParentNodeHandler(UA_NodeId &paParentNodeId, UA_NodeId *paMethodNodeId, CLocalMethodInfo &paActionInfo) :
+ mParentNodeId(UA_NodeId_new()), mMethodNodeId(paMethodNodeId), mActionInfo(paActionInfo) {
+ UA_NodeId_copy(&paParentNodeId, mParentNodeId);
+ }
+ ~UA_ParentNodeHandler() {
+ UA_NodeId_delete(mParentNodeId);
+ }
+
+ UA_ParentNodeHandler(const UA_ParentNodeHandler &other) :
+ mParentNodeId(UA_NodeId_new()), mMethodNodeId(other.mMethodNodeId), mActionInfo(other.mActionInfo) {
+ UA_NodeId_copy(other.mParentNodeId, mParentNodeId);
+ }
+
+ UA_NodeId *mParentNodeId;
+ UA_NodeId *mMethodNodeId;
+ CLocalMethodInfo &mActionInfo;
+
+ private:
+ UA_ParentNodeHandler& operator=(const UA_ParentNodeHandler &other);
+ };
+
+ /**
+ * The list of parent/method information of the used methods
+ */
+ CSinglyLinkedList<UA_ParentNodeHandler> mMethodsContexts;
+
+ /**
+ * Initialization of read and write of variables. It handles both existing and non-existing cases
+ * @param paActionInfo Action to be initialized
+ * @param paWrite True if the action is to write a variable, false if it's for reading
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode initializeVariable(CActionInfo &paActionInfo, bool isWrite);
+
+ /**
+ * When an action refers to variable that already exist in the OPC UA server, another variable shouldn't be created. If you are trying to read a variable
+ * that has already another FB reading from it, it will fail. If the variable was created as a write, by reading it, it will set the writing permission
+ * to the variable and set the action as a callback context
+ * @param paActionInfo Action accessing the existing variable
+ * @param paNodePairInfo Information about the variable being accessed
+ * @param paVariable Variable to check the type
+ * @param paIndexOfNodePair Information about on which RD the variable will be read
+ * @param paWrite True if the action is to write a variable, false if it's for reading
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode handleExistingVariable(CActionInfo &paActionInfo, CActionInfo::CNodePairInfo &paNodePairInfo, const CIEC_ANY &paVariable,
+ size_t paIndexOfNodePair, bool paWrite);
+
+ /**
+ * Creates the variable in the OPC UA server. If the folders in the path to the variable don't exist, it will create them with random nodeIds
+ * @param paActionInfo Action creating the variable
+ * @param paNodePairInfo Information about the variable node being created
+ * @param paVariable Variable to get the type from
+ * @param paIndexOfNodePair Information about which RD/SD should be used to read/write the variable
+ * @param paReferencedNodes Place to store the nodes being references by the action (the variable node and folders)
+ * @param paWrite True if the action is to write a variable, false if it's for reading
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode handleNonExistingVariable(CActionInfo &paActionInfo, CActionInfo::CNodePairInfo &paNodePairInfo, const CIEC_ANY &paVariable,
+ size_t paIndexOfNodePair, CSinglyLinkedList<UA_NodeId*> &paReferencedNodes, bool paWrite);
+
+ /**
+ * Creates a variable in the OPC UA server using directly the API from the passed information
+ * @param paCreateVariableInfo Information needed to create the variable
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode createVariableNode(CCreateVariableInfo &paCreateVariableInfo);
+
+ /**
+ * Update a variable node value from a IEC61499 data object.
+ * @param paNodeId Node Id of the node to be updated
+ * @param paData Source data for the new value
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode updateNodeValue(const UA_NodeId &paNodeId, const CIEC_ANY *paData);
+
+ /**
+ * Register the onWrite function as callback routine when a variable is written and also the context that is passed back
+ * @param paNodeId Node ID of the node where to register the callback function and context
+ * @param paActionInfo The action executing the register
+ * @param paPortIndex Which RD is requesting the callback
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode
+ registerVariableCallBack(const UA_NodeId &paNodeId, CActionInfo &paActionInfo, size_t paPortIndex);
+
+ /**
+ * Adds write permission to a node
+ * @param paNodeId Node Id of the node to add write permission
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode addWritePermission(const UA_NodeId &paNodeId);
+
+ /**
+ * Perform all the needed initialization of the create method action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode initializeCreateMethod(CActionInfo &paActionInfo);
+
+ /**
+ * When an action references a method that already exists in the OPC UA server, it checks that another action is no already referencing it,
+ * and if that's the case, it stores the information about the parent.
+ * @param paActionInfo The action referencing the existing method
+ * @param paParentNode Parent node of the method. For methods instances of an object, the node id of the methods is the same, only the parent is different
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode handleExistingMethod(CActionInfo &paActionInfo, UA_NodeId &paParentNode);
+
+ /**
+ * Create the arguments for a method from the information of the action and store it in the encasulation for creating a method
+ * @param paActionInfo Action containing information about the arguments characteristics
+ * @param paCreateMethodInfo Place to store the created arguments
+ */
+ void createMethodArguments(CActionInfo &paActionInfo, CCreateMethodInfo &paCreateMethodInfo);
+
+ /**
+ * Creates a method node in the OPC UA server using directly the API from the passed information
+ * @param paMethodInfo Information needed to create the method node
+ * @param paNodeId Place to store the node id of the created method
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode createMethodNode(CCreateMethodInfo &paMethodInfo, UA_NodeId **paNodeId);
+
+ /**
+ * Perform all the needed initialization of the create object action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode initializeCreateObject(CActionInfo &paActionInfo);
+
+ /**
+ * Perform all the needed initialization of the delet object action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode initializeDeleteObject(CActionInfo &paActionInfo);
+
+ /**
+ * Execute the write action to a local variable
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeWrite(CActionInfo &paActionInfo);
+
+ /**
+ * When the FB of the local method is triggered to signalize the end of the method, this function is called
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeCreateMethod(CActionInfo &paActionInfo);
+
+ /**
+ * Creates an object in the local server
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeCreateObject(CActionInfo &paActionInfo);
+
+ /**
+ * Creates an object in the OPC UA server using directly the API from the passed information
+ * @param paCreateObjectInfo Information needed to create the object
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode createObjectNode(CCreateObjectInfo &paCreateObjectInfo);
+
+ /**
+ * Checks if the type of an object exist in the local server
+ * @param paNodePairInfo Information about the Node Type
+ * @return True if it exists, false otherwise
+ */
+ bool isTypeOfObjectPresent(CActionInfo::CNodePairInfo &paNodePairInfo);
+
+ /**
+ * Deletes an object from the local server
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode executeDeleteObject(CActionInfo &paActionInfo);
+
+ /**
+ * Looks for a node in the local OPC UA Server. If both the browsepath and NodeId are provided, they should match to consider that the
+ * node exists.
+ * @param paNodeInfo Information about the node to look for. If no nodeId was provided and the node exist, the node Id of the existing node is stored here
+ * @param paFoundNodeIds Place to store the found nodes (folders included). The list is altered only the final node is present
+ * @param paIsPresent Place to store true if the node is present in the local server, false otherwise
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode getNode(CActionInfo::CNodePairInfo &paNodeInfo, CSinglyLinkedList<UA_NodeId*> &paFoundNodeIds, bool *paIsPresent);
+
+ /**
+ * Execute the TranslateBrowsePathToNodeIds service in the local OPC UA server from a string containing the path
+ * @param paBrowsePath Path used to execute the service. Each element of the path is checked
+ * @param paBrowsePaths Place to store the request to the service, created from paBrowsePath
+ * @param paFoldercount Place to store how many folders were found in the path
+ * @param paFirstNonExistingNode Place to store the first non existing node in the path
+ * @param paFoundNodeIds Place to store the found node IDs
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode translateBrowseNameAndStore(const char *paBrowsePath, UA_BrowsePath **paBrowsePaths, size_t *paFoldercount, size_t *paFirstNonExistingNode,
+ CSinglyLinkedList<UA_NodeId*> &paFoundNodeIds);
+
+ /**
+ * Store the existing node from a TranslateBrowsePathToNodeIds service in a list of node Ids
+ * @param paBrowsePathsResults Results of a TranslateBrowsePathToNodeIds service
+ * @param paFolderCnt Size of paBrowsePathsResults
+ * @param paFirstNonExistingNode Store to place the first non existing node in paBrowsePathsResults
+ * @param paCreatedNodeIds Place to store the existing Node IDs
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode storeAlreadyExistingNodes(UA_BrowsePathResult *paBrowsePathsResults, size_t paFolderCnt, size_t* paFirstNonExistingNode,
+ CSinglyLinkedList<UA_NodeId*> &paCreatedNodeIds);
+
+ /**
+ * Create folder objects in the OPC UA server from the string. It's assumed that the end node is not present in the path
+ * @param paFolders Path of folders
+ * @param paCreatedNodeIds Place to store the created nodeIds
+ * @return UA_STATUSCODE_GOOD on success, other value otherwise
+ */
+ UA_StatusCode createFolders(const char *paFolders, CSinglyLinkedList<UA_NodeId*> &paCreatedNodeIds);
+
+ /**
+ * Splits a browsepath into folders and node name. The non-existing folders are created in the local server
+ * @param paBrowsePath Browsepath to be splitted
+ * @param paNodeName Place to store the nodename
+ * @param paRreferencedNodes List of nodes that are used by this browsename. It will include all folders, but not the end node since it was not created yet
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode splitAndCreateFolders(CIEC_STRING &paBrowsePath, CIEC_STRING &paNodeName, CSinglyLinkedList<UA_NodeId*> &paRreferencedNodes);
+
+ /**
+ * Split a string into folders and node name. The provided place for store of the folder and node name are only
+ * changed if the result value is true
+ * @param paOriginal String containing the path to be split
+ * @param paFolder Place to store the folders part of the string
+ * @param paNodeName Place to store the node name part of the string
+ * @return True if the provided string is a valid path, false otherwise
+ */
+ bool splitFoldersFromNode(const CIEC_STRING &paOriginal, CIEC_STRING &paFolder, CIEC_STRING &paNodeName);
+
+ /**
+ * If paFailed is true, it deletes all NodeIds from paPresentNodes, otherwise it copies them to paReferencedNodes.
+ * It's used to handle the NodeIds that been previously allocated, and decide if they should be stored or deleted
+ * @param paPresentNodes NodeIds to be analyzed
+ * @param paReferencedNodes Place to store the NodeIds if paFailed is true
+ * @param paFailed True if the NodeIds should be deleted, false if they need to be copied into paReferencedNodes
+ */
+ void handlePresentNodes(CSinglyLinkedList<UA_NodeId*> &paPresentNodes, CSinglyLinkedList<UA_NodeId*> &paReferencedNodes, bool paFailed);
+
+ /**
+ * Maximum time a local method can take to finish execution without producing an error
+ */
+ static const size_t scmMethodCallTimeoutInNanoSeconds = 4 * 1E9; //4s
+
+ /**
+ * Encapsulation of the information of an external call to a local server
+ */
+ struct CLocalMethodCall {
+ CLocalMethodCall(CLocalMethodInfo &paActionInfo, COPC_UA_Helper::UA_SendVariable_handle &paSendHandle) :
+ mActionInfo(paActionInfo), mSendHandle(paSendHandle) {
+ }
+
+ //default copy constructor should be enough
+
+ bool operator==(CLocalMethodCall const &rhs) const {
+ return this == &rhs;
+ }
+
+ CLocalMethodInfo &mActionInfo;
+ COPC_UA_Helper::UA_SendVariable_handle &mSendHandle;
+
+ };
+
+ /**
+ * List of external method calls currently being executed. This is to allow many external calls in parallalel.
+ * TODO: It seems that the OPC UA server cannot execute many calls at the same time. For each call, onServerMethodCall
+ * is called which waits for the method to finish before returning, meaning that always only 1 method call can be executed.
+ * Check if this is always true, and if yes, the following related functions and variables aren't necessary, and only one
+ * CLocalMethodCall is necessary
+ */
+ CSinglyLinkedList<CLocalMethodCall> mMethodCalls;
+
+ /**
+ * Mutex to access mMethodCalls
+ */
+ CSyncObject mMethodCallsMutex;
+
+ /**
+ * Add a method call to the list when onServerMethodCall is called
+ * @param paActionInfo Action adding the call
+ * @param paHandleRecv Information to later store the results of the method call
+ * @return The result added method call
+ */
+ CLocalMethodCall& addMethodCall(CLocalMethodInfo &paActionInfo, COPC_UA_Helper::UA_SendVariable_handle &paHandleRecv);
+
+ /**
+ * Removes a method call from the list when the method is finished
+ * @param toDelete Call to remove
+ */
+ void removeMethodCall(CLocalMethodCall &toRemove);
+
+ /**
+ * Look for the oldest method call of an action
+ * @param paActionInfo Action on which the call was triggered
+ * @return The method call. 0 if an external call for the action was not triggered
+ */
+ CLocalMethodCall* getLocalMethodCall(CLocalMethodInfo &paActionInfo);
+
+ /**
+ * Default value for the namespace of the browsename for all created nodes
+ */
+ static const UA_UInt16 scmDefaultBrowsenameNameSpace = 1;
+
+ /**
+ * English locale used as default for all nodes
+ */
+ static const char * const mEnglishLocaleForNodes;
+
+ /**
+ * Default description for variable nodes
+ */
+ static const char * const mDefaultDescriptionForVariableNodes;
+
+#ifdef FORTE_COM_OPC_UA_MULTICAST
+# ifndef UA_ENABLE_DISCOVERY_MULTICAST
+# error open62541 needs to be built with UA_ENABLE_DISCOVERY_MULTICAST=ON
+# else // UA_ENABLE_DISCOVERY_MULTICAST
+# ifdef FORTE_COM_OPC_UA_MASTER_BRANCH
+ //nothing here
+# else
+
+ /**
+ * Server configuration
+ */
+ UA_ServerConfig *mServerConfig;
+# endif
+ /**
+ * List of LDS servers where this instance is already registered.
+ */
+ CSinglyLinkedList<UA_String*> mRegisteredWithLds;
+
+ const UA_String getDiscoveryUrl() const;
+ void registerWithLds(const UA_String *paDiscoveryUrl);
+ void removeLdsRegister(const UA_String *paDiscoveryUrl);
+ static void serverOnNetworkCallback(const UA_ServerOnNetwork *paServerOnNetwork, UA_Boolean paIsServerAnnounce, UA_Boolean paIsTxtReceived, void *paData);
+# endif //UA_ENABLE_DISCOVERY_MULTICAST
+#endif //FORTE_COM_OPC_UA_MULTICAST
+
+};
+
+#endif /* SRC_MODULES_OPC_UA_OPCUALOCALHANDLER_H_ */
diff --git a/src/modules/opc_ua/opcua_nodesets.cpp.in b/src/modules/opc_ua/opcua_nodesets.cpp.in
new file mode 100644
index 0000000..39306b9
--- /dev/null
+++ b/src/modules/opc_ua/opcua_nodesets.cpp.in
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework communication infrastructure
+ *******************************************************************************/
+
+#include <opcua_local_handler.h>
+
+extern "C" {
+${FORTE_OPCUA_NODESETS_INCLUDE}
+}
+
+bool COPC_UA_Local_Handler::initializeNodesets(UA_Server &paUaServer){
+${FORTE_OPCUA_NODESETS_CODE}
+ return true;
+}
diff --git a/src/modules/opc_ua/opcua_remote_handler.cpp b/src/modules/opc_ua/opcua_remote_handler.cpp
new file mode 100644
index 0000000..937082a
--- /dev/null
+++ b/src/modules/opc_ua/opcua_remote_handler.cpp
@@ -0,0 +1,360 @@
+/*******************************************************************************
+ * Copyright (c) 2018 - 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral, Kirill Dorofeev - initial implementation
+ *******************************************************************************/
+
+#include "opcua_remote_handler.h"
+#include "../../core/devexec.h"
+#include "../../core/iec61131_functions.h"
+#include "../../core/cominfra/basecommfb.h"
+#include <criticalregion.h>
+#include <forte_printer.h>
+
+using namespace forte::com_infra;
+
+DEFINE_HANDLER(COPC_UA_Remote_Handler);
+
+COPC_UA_Client_IterationList::COPC_UA_Client_IterationList() :
+ mNewClientsPresent(false) {
+}
+
+COPC_UA_Client_IterationList::~COPC_UA_Client_IterationList() {
+}
+
+void COPC_UA_Client_IterationList::startIterationThread() {
+ if(!isAlive()) {
+ start();
+ mClientsThreadStarted.waitIndefinitely();
+ }
+}
+
+void COPC_UA_Client_IterationList::stopIterationThread() {
+ setAlive(false);
+ resumeIterationLoop();
+ end();
+}
+
+void COPC_UA_Client_IterationList::addClient(CUA_ClientInformation& paClientInformation) {
+ CCriticalRegion iterationListRegion(mNewClientsMutex);
+ addClientToList(paClientInformation, mNewClients);
+ mNeedsIteration.inc();
+ mNewClientsPresent = true;
+}
+
+void COPC_UA_Client_IterationList::removeClient(CUA_ClientInformation& paClientInformation) {
+ CCriticalRegion iterationListRegion(mIterationClientsMutex);
+ CCriticalRegion newClientsRegion(mNewClientsMutex);
+ mNewClients.erase(&paClientInformation); //client could still be in the newList
+ mIterationClients.erase(&paClientInformation);
+}
+
+void COPC_UA_Client_IterationList::run() {
+ mClientsThreadStarted.inc();
+ while(isAlive()) {
+
+ if(mNewClientsPresent) {
+ updateClientList();
+ }
+ bool needsRetry = handleClients();
+ if(isAlive()) {
+ if(needsRetry) {
+ mNeedsIteration.timedWait(scmNanosecondsToSleep);
+ } else {
+ mNeedsIteration.waitIndefinitely();
+ }
+ }
+ }
+}
+
+void COPC_UA_Client_IterationList::resumeIterationLoop() {
+ mNeedsIteration.inc();
+}
+
+void COPC_UA_Client_IterationList::addClientToList(CUA_ClientInformation& paClientInformation, CSinglyLinkedList<CUA_ClientInformation*>& paList) {
+ bool elementAlreadyPresent = false;
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = paList.begin(); itClientInformation != paList.end(); ++itClientInformation) {
+ if(&paClientInformation == (*itClientInformation)) {
+ elementAlreadyPresent = true;
+ break;
+ }
+ }
+
+ if(!elementAlreadyPresent) {
+ paList.pushBack(&paClientInformation);
+ }
+}
+
+void COPC_UA_Client_IterationList::updateClientList() {
+ CCriticalRegion iterationListRegion(mIterationClientsMutex);
+ CCriticalRegion newClientsRegion(mNewClientsMutex);
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mNewClients.begin(); itClientInformation != mNewClients.end();
+ ++itClientInformation) {
+ addClientToList(**itClientInformation, mIterationClients);
+ }
+ mNewClients.clearAll();
+ mNewClientsPresent = false;
+}
+
+// ***************** CLIENT HANDLER ************* //
+
+COPC_UA_Remote_Handler::COPC_UA_Remote_Handler(CDeviceExecution& paDeviceExecution) :
+ COPC_UA_HandlerAbstract(paDeviceExecution), mConnectionHandler(*this) {
+}
+
+COPC_UA_Remote_Handler::~COPC_UA_Remote_Handler() {
+ disableHandler();
+ cleanResources();
+}
+
+void COPC_UA_Remote_Handler::enableHandler(void) {
+ startIterationThread();
+ mConnectionHandler.startIterationThread();
+}
+
+void COPC_UA_Remote_Handler::disableHandler(void) {
+ mConnectionHandler.stopIterationThread();
+ stopIterationThread();
+}
+
+UA_StatusCode COPC_UA_Remote_Handler::initializeAction(CActionInfo& paActionInfo) {
+ enableHandler();
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eRead:
+ case CActionInfo::eWrite:
+ case CActionInfo::eCallMethod:
+ case CActionInfo::eSubscribe:
+ retVal = getClientAndAddAction(paActionInfo);
+ break;
+ case CActionInfo::eCreateMethod:
+ case CActionInfo::eCreateObject:
+ case CActionInfo::eDeleteObject:
+ DEVLOG_ERROR("[OPC UA REMOTE]: Cannot perform action %s remotely. Initialization failed\n", CActionInfo::mActionNames[paActionInfo.getAction()]);
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA REMOTE]: Unknown action %d to be initialized\n", paActionInfo.getAction());
+ break;
+ }
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Remote_Handler::executeAction(CActionInfo& paActionInfo) {
+
+ CUA_ClientInformation *clientInfo = getClient(paActionInfo.getEndpoint());
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+
+ if(clientInfo && clientInfo->isActionInitialized(paActionInfo)) {
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eRead:
+ retVal = clientInfo->executeRead(paActionInfo);
+ break;
+ case CActionInfo::eWrite:
+ retVal = clientInfo->executeWrite(paActionInfo);
+ break;
+ case CActionInfo::eCallMethod:
+ retVal = clientInfo->executeCallMethod(paActionInfo);
+ break;
+ default: //eCreateMethod, eCreateObject, eDeleteObject will never reach here since they weren't initialized. eSubscribe is a Subscribe FB
+ DEVLOG_ERROR("[OPC UA REMOTE]: Action %d to be executed is unknown or invalid\n", paActionInfo.getAction());
+ break;
+ }
+ } else {
+ DEVLOG_ERROR("[OPC UA REMOTE]: Cannot execute action from FB %s. It was not properly initialized\n",
+ paActionInfo.getLayer().getCommFB()->getInstanceName());
+ }
+
+ if(UA_STATUSCODE_GOOD == retVal) {
+ resumeIterationLoop();
+ }
+
+ return retVal;
+}
+
+UA_StatusCode COPC_UA_Remote_Handler::uninitializeAction(CActionInfo& paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ switch(paActionInfo.getAction()){
+ case CActionInfo::eRead:
+ case CActionInfo::eWrite:
+ case CActionInfo::eCallMethod:
+ case CActionInfo::eSubscribe:
+ removeActionFromClient(paActionInfo);
+ retVal = UA_STATUSCODE_GOOD;
+ break;
+ default:
+ DEVLOG_ERROR("[OPC UA REMOTE]: Action %d to be uninitialized is unknown or invalid\n", paActionInfo.getAction());
+ break;
+ }
+ return retVal;
+}
+
+void COPC_UA_Remote_Handler::cleanResources() {
+ CCriticalRegion criticalRegion(mAllClientListMutex);
+ for(CSinglyLinkedList<CUA_ClientInformation*>::Iterator itClientInformation = mAllClients.begin(); itClientInformation != mAllClients.end();
+ ++itClientInformation) {
+ mConnectionHandler.removeClient(**itClientInformation);
+ removeClient(**itClientInformation);
+ delete *itClientInformation;
+ }
+ mAllClients.clearAll();
+}
+
+UA_StatusCode COPC_UA_Remote_Handler::getClientAndAddAction(CActionInfo& paActionInfo) {
+ UA_StatusCode retVal = UA_STATUSCODE_BADINTERNALERROR;
+ CUA_ClientInformation *clientInfo = getClient(paActionInfo.getEndpoint());
+ if(clientInfo) {
+ addActionToClient(paActionInfo);
+ retVal = UA_STATUSCODE_GOOD;
+ }
+ return retVal;
+}
+
+CUA_ClientInformation* COPC_UA_Remote_Handler::getClient(const CIEC_STRING &paEndpoint) {
+ CCriticalRegion allClientsRegion(mAllClientListMutex);
+
+ CUA_ClientInformation *client = 0;
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mAllClients.begin(); itClientInformation != mAllClients.end();
+ ++itClientInformation) {
+ if((*itClientInformation)->getEndpoint() == paEndpoint) {
+ client = (*itClientInformation);
+ break;
+ }
+ }
+ if(!client) {
+ client = new CUA_ClientInformation(paEndpoint);
+ if(client->configureClient()) {
+ mAllClients.pushBack(client);
+ } else {
+ delete client;
+ client = 0;
+ }
+ }
+
+ return client;
+}
+
+void COPC_UA_Remote_Handler::addActionToClient(CActionInfo& paActionInfo) {
+ CCriticalRegion allClientsRegion(mAllClientListMutex);
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mAllClients.begin(); itClientInformation != mAllClients.end();
+ ++itClientInformation) {
+ CCriticalRegion clientRegion((*itClientInformation)->getMutex());
+ if((*itClientInformation)->getEndpoint() == paActionInfo.getEndpoint()) {
+ (*itClientInformation)->addAction(paActionInfo);
+ addClientToConnectionHandler(**itClientInformation);
+ break;
+ }
+ }
+}
+
+void COPC_UA_Remote_Handler::removeActionFromClient(CActionInfo& paActionInfo) {
+ CCriticalRegion allClientsRegion(mAllClientListMutex);
+
+ CUA_ClientInformation *clientToDelete = 0;
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mAllClients.begin(); itClientInformation != mAllClients.end();
+ ++itClientInformation) {
+ CCriticalRegion clientRegion((*itClientInformation)->getMutex());
+ if((*itClientInformation)->getEndpoint() == paActionInfo.getEndpoint()) {
+ (*itClientInformation)->removeAction(paActionInfo);
+ clientToDelete = *itClientInformation;
+ break;
+ }
+ }
+
+ if(clientToDelete && !clientToDelete->hasActions()) {
+ removeClientFromAllLists(*clientToDelete);
+ }
+}
+
+void COPC_UA_Remote_Handler::removeClientFromAllLists(CUA_ClientInformation& paClientInformation) {
+ mConnectionHandler.removeClient(paClientInformation);
+ removeClient(paClientInformation);
+ mAllClients.erase(&paClientInformation);
+ delete &paClientInformation;
+}
+
+void COPC_UA_Remote_Handler::addClientToConnectionHandler(CUA_ClientInformation& paClientInformation) {
+ mConnectionHandler.addClient(paClientInformation);
+}
+
+bool COPC_UA_Remote_Handler::handleClients() {
+ CCriticalRegion iterationCriticalRegion(mIterationClientsMutex); //this is needed because removing a client from the list could cause trouble
+ CSinglyLinkedList<CUA_ClientInformation *> failedClients;
+ bool asyncIsNeeded = false;
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mIterationClients.begin(); itClientInformation != mIterationClients.end();
+ ++itClientInformation) {
+ CCriticalRegion criticalRegionClienMutex((*itClientInformation)->getMutex());
+ if((*itClientInformation)->isAsyncNeeded()) {
+ if(!(*itClientInformation)->executeAsyncCalls()) {
+ failedClients.pushBack(*itClientInformation);
+ } else {
+ asyncIsNeeded = (*itClientInformation)->isAsyncNeeded();
+ }
+ }
+ if(!isAlive()) {
+ break;
+ }
+ }
+
+ if(isAlive() && !failedClients.isEmpty()) {
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = failedClients.begin(); itClientInformation != failedClients.end();
+ ++itClientInformation) {
+ DEVLOG_ERROR("[OPC UA REMOTE]: There was a problem checking remote %s.\n", (*itClientInformation)->getEndpoint().getValue());
+
+ //we cannot use COPC_UA_Client_IterationList::remove here because it locks mIterationClientsMutex
+ CCriticalRegion newClientsRegion(mNewClientsMutex);
+ CCriticalRegion criticalRegionClienMutex((*itClientInformation)->getMutex());
+ mIterationClients.erase(*itClientInformation);
+ mNewClients.erase(*itClientInformation); //client could still be in the newList
+ (*itClientInformation)->uninitializeClient(); //reset all in client and pass it back to the connection handler
+ (*itClientInformation)->configureClient();
+ addClientToConnectionHandler(**itClientInformation);
+ }
+ }
+ return asyncIsNeeded;
+}
+
+//************************** CONECTION HANDLER ************** //
+
+COPC_UA_Remote_Handler::UA_ConnectionHandler::UA_ConnectionHandler(COPC_UA_Remote_Handler& paClientHandler) :
+ mClientHandler(paClientHandler) {
+}
+
+COPC_UA_Remote_Handler::UA_ConnectionHandler::~UA_ConnectionHandler() {
+}
+
+bool COPC_UA_Remote_Handler::UA_ConnectionHandler::handleClients() {
+ CCriticalRegion clientsClientsRegion(mIterationClientsMutex);
+ CSinglyLinkedList<CUA_ClientInformation *> clientsToRemove;
+ bool needsRetry = false;
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = mIterationClients.begin(); itClientInformation != mIterationClients.end();
+ ++itClientInformation) {
+ CCriticalRegion clientRegion((*itClientInformation)->getMutex());
+ if((*itClientInformation)->handleClientState()) {
+ clientsToRemove.pushBack(*itClientInformation);
+ } else {
+ needsRetry = true;
+ }
+ if((*itClientInformation)->someActionWasInitialized()) {
+ mClientHandler.addClient(**itClientInformation);
+ }
+ if(!isAlive()) {
+ break;
+ }
+ }
+
+ if(isAlive() && !clientsToRemove.isEmpty()) {
+ for(CSinglyLinkedList<CUA_ClientInformation *>::Iterator itClientInformation = clientsToRemove.begin(); itClientInformation != clientsToRemove.end();
+ ++itClientInformation) {
+ mIterationClients.erase(*itClientInformation);
+ }
+ }
+ return needsRetry;
+}
+
diff --git a/src/modules/opc_ua/opcua_remote_handler.h b/src/modules/opc_ua/opcua_remote_handler.h
new file mode 100644
index 0000000..7b42557
--- /dev/null
+++ b/src/modules/opc_ua/opcua_remote_handler.h
@@ -0,0 +1,281 @@
+/*******************************************************************************
+ * Copyright (c) 2018 - 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral, Kirill Dorofeev - initial implementation
+ *******************************************************************************/
+
+#ifndef SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_
+#define SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_
+
+#include <forte_thread.h>
+#include <forte_config.h>
+#include "opcua_handler_abstract.h"
+#include "opcua_client_information.h"
+
+/**
+ * Parent class used by the remote handler and the connection thread. They both iterate a list of clients and executed periodically action on it
+ * This class contains the common code of them and uses a strategy pattern in run(), where the action ot be executed periodically on the clients
+ * is done in the pure virtual handleClients().
+ * The iteration can sleep forever or sleep for some time and then iterate again. In both cases, the thread can be awaken.
+ */
+class COPC_UA_Client_IterationList : public CThread {
+ public:
+
+ /**
+ * Constructor of the class
+ */
+ COPC_UA_Client_IterationList();
+
+ /**
+ * Destructor of the class
+ */
+ virtual ~COPC_UA_Client_IterationList();
+
+ /**
+ * Start the iteration thread that will execute periodically handleClients()
+ */
+ void startIterationThread();
+
+ /**
+ * Stops the iteration thread
+ */
+ void stopIterationThread();
+
+ /**
+ * Adds a new client to the list of clients where handleClients() is executed. The new clients are added asyncrhonously so the iteration doesn't block the thread calling this. The client is usually no longer used by the caller
+ * @param paClientInformation The client to be added to the iteration
+ */
+ void addClient(CUA_ClientInformation &paClientInformation);
+
+ /**
+ * Removes a client from the iteration list syncrhonously. Usually, the client is then accessed after removed is then deleted, so the caller has to wait that the client is free before accessing it
+ * @param paClientInformation The client to be removed from the list
+ */
+ void removeClient(CUA_ClientInformation &paClientInformation);
+
+ /**
+ * Get the added clients to the iteration list, and execute handleClients(). Depending on the result, it will wait forever or just for some time (the cyclic period)
+ */
+ void run();
+
+ protected:
+
+ /**
+ * Function to be executed by iteration and that implements the action to be performed cyclic in the clients
+ * @return True if a new iteration is needed, false otherwise
+ */
+ virtual bool handleClients() = 0;
+
+ /**
+ * If the iteration loop is waiting forever, this function will awake it and iterate again
+ */
+ void resumeIterationLoop();
+
+
+ /**
+ * List of clients on which the iteration is done
+ */
+ CSinglyLinkedList<CUA_ClientInformation *> mIterationClients;
+
+ /**
+ * Mutex to access the list of clients which is iterated
+ */
+ CSyncObject mIterationClientsMutex;
+
+ /**
+ * List of new clients. It serves as a buffer that is latter added to the main iteration list
+ */
+ CSinglyLinkedList<CUA_ClientInformation *> mNewClients;
+
+
+ /**
+ * Mutex to access the list of new clients
+ */
+ CSyncObject mNewClientsMutex;
+
+ private:
+
+ /**
+ * Adds a client to a list. If the client is already present, no client is added
+ * @param paClientInformation Client to be added
+ * @param paList List where the client is added
+ */
+ void addClientToList(CUA_ClientInformation &paClientInformation, CSinglyLinkedList<CUA_ClientInformation *> &paList);
+
+ /**
+ * Add the new clients to the main iteration list and clears the new clients list
+ */
+ void updateClientList();
+
+ /**
+ * Indicates that a new client is present and needs to be added to the main iteration list
+ */
+ bool mNewClientsPresent;
+
+ /**
+ * Indicates if the iteration should continue
+ */
+ CSemaphore mNeedsIteration;
+
+ /**
+ * Indicates that the thread had started, so other threads waiting for it can continue
+ */
+ CSemaphore mClientsThreadStarted;
+
+ /**
+ * Cyclic time to sleep if another iteration is needed. This is the period at which the iteration occurs normally
+ */
+ static const TForteUInt64 scmNanosecondsToSleep = FORTE_COM_OPC_UA_CLIENT_PUB_INTERVAL * 1000000; //ms to nanoseconds
+};
+
+/**
+ * Class to handle all action that are executed remotely. It calls the clients to execute their asynchronous calls
+ */
+// cppcheck-suppress noConstructor
+class COPC_UA_Remote_Handler : public COPC_UA_HandlerAbstract, public COPC_UA_Client_IterationList {
+ DECLARE_HANDLER(COPC_UA_Remote_Handler)
+ public:
+
+ /**
+ * Starts the threads
+ */
+ void enableHandler(void);
+
+ /**
+ * Stops the threads
+ */
+ void disableHandler(void);
+
+ protected:
+
+ /**
+ * Perform all the needed initialization of the action
+ * @param paActionInfo Action to be initialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode initializeAction(CActionInfo &paActionInfo);
+
+ /**
+ * Execute the action
+ * @param paActionInfo Action to be executed
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode executeAction(CActionInfo &paActionInfo);
+
+ /**
+ * Uninitialize the action
+ * @param paActionInfo Action to be Uninitialized
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ virtual UA_StatusCode uninitializeAction(CActionInfo &paActionInfo);
+
+ private:
+
+ /**
+ * Class that connects the clients and initializes the actions stored in the clients.
+ * It will iterate the clients trying to connect and initialize the actions until they are all initialized
+ * If one action on a client is initialized, it will pass the client to the remote handler, so it can execute
+ * calls on it, but keep it also on its own list to try to initialize the other actions
+ */
+ class UA_ConnectionHandler : public COPC_UA_Client_IterationList {
+ public:
+
+ /**
+ * Constructor of the class
+ * @param paClientHandler The remote handler. It uses later to pass the clients who have initialized actions
+ */
+ explicit UA_ConnectionHandler(COPC_UA_Remote_Handler &paClientHandler);
+
+ /**
+ * Destructor of the class
+ */
+ ~UA_ConnectionHandler();
+
+ private:
+
+ /**
+ * Calls the handleClientState() function in the clients.
+ * @return True if a new iteration is needed, false otherwise
+ */
+ bool handleClients();
+
+ /**
+ * Remote handler to pass the clients who have at least one action initialized
+ */
+ COPC_UA_Remote_Handler &mClientHandler;
+
+ };
+
+ /**
+ * Clean all resources from the remote handler
+ */
+ void cleanResources();
+
+ /**
+ * Looks for a client with the endpoint of the action and adds the action to it
+ * @param paActionInfo Action to be added to the client
+ * @return UA_STATUSCODE_GOOD is no problem occurred, other value otherwise
+ */
+ UA_StatusCode getClientAndAddAction(CActionInfo &paActionInfo);
+
+ /**
+ * Looks for a client using an endpoint. If a client is not found, a new one is created
+ * @param paEndpoint Endpoint of the client
+ * @return 0 if an error occurred, a pointer to the client otherwise
+ */
+ CUA_ClientInformation* getClient(const CIEC_STRING &paEndpoint);
+
+ /**
+ * Adds an action to a client. This is performed when an action is initialized
+ * @param paActionInfo Action to be added
+ */
+ void addActionToClient(CActionInfo &paActionInfo);
+
+ /**
+ * Removes an action from the client. If the client has no more actions, it's cleaned and deleted
+ * @param paActionInfo
+ */
+ void removeActionFromClient(CActionInfo &paActionInfo);
+
+ /**
+ * Remove a client from all list, and delete it
+ */
+ void removeClientFromAllLists(CUA_ClientInformation &paClientInformation);
+
+ /**
+ * Adds a client to the connection handler
+ * @param paClientInformation Client to be added
+ */
+ void addClientToConnectionHandler(CUA_ClientInformation &paClientInformation);
+
+ /**
+ * Trigger the clients to execute their asyncronous calls. If a client fails, it's uninitialized and given back
+ * to the connection handler
+ * @return True if a new iteration is needed, false otherwise
+ */
+ bool handleClients();
+
+ /**
+ * Connection handler to pass the clients that aren't fully initialized yet
+ */
+ UA_ConnectionHandler mConnectionHandler;
+
+ /**
+ * A list with all clients
+ */
+ CSinglyLinkedList<CUA_ClientInformation*> mAllClients;
+
+ /**
+ * Mutex to access the list with all clients
+ */
+ CSyncObject mAllClientListMutex;
+};
+
+#endif /* SRC_MODULES_OPC_UA_OPCUACLIENTHANDLER_H_ */
diff --git a/src/modules/opc_ua/opcua_types.cpp.in b/src/modules/opc_ua/opcua_types.cpp.in
new file mode 100644
index 0000000..2e4a394
--- /dev/null
+++ b/src/modules/opc_ua/opcua_types.cpp.in
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation and rework communication infrastructure
+ *******************************************************************************/
+
+#include <opcua_helper.h>
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "opcua_types_gen.cpp"
+#endif
+${FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE}
+
+const COPC_UA_Helper::UA_TypeConvert_external COPC_UA_Helper::scmExternalMapForteTypeIdToOpcUa[] = {
+ ${FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT}
+};
+
+const UA_DataType *COPC_UA_Helper::getExternalOPCUATypeFromAny(const CIEC_ANY &paAnyType) {
+ CIEC_ANY::EDataTypeID typeId = paAnyType.getDataTypeID();
+ if(CIEC_ANY::e_STRUCT == typeId) {
+ CStringDictionary::TStringId typeOfStructure = static_cast<const CIEC_STRUCT&>(paAnyType).getStructTypeNameID();
+ for(size_t i = 0; i < sizeof(scmExternalMapForteTypeIdToOpcUa) / sizeof(UA_TypeConvert_external); i++) {
+ if(scmExternalMapForteTypeIdToOpcUa[i].mStringId == typeOfStructure) {
+ return scmExternalMapForteTypeIdToOpcUa[i].mType;
+ }
+ }
+ }
+ return 0;
+}
+
diff --git a/src/modules/opc_ua/types/CMakeLists.txt b/src/modules/opc_ua/types/CMakeLists.txt
new file mode 100644
index 0000000..299bf54
--- /dev/null
+++ b/src/modules/opc_ua/types/CMakeLists.txt
@@ -0,0 +1,20 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial implementation
+# ******************************************************************************/
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(forte_localizedtext)
+
+
+
+
diff --git a/src/modules/opc_ua/types/forte_localizedtext.cpp b/src/modules/opc_ua/types/forte_localizedtext.cpp
new file mode 100644
index 0000000..908698f
--- /dev/null
+++ b/src/modules/opc_ua/types/forte_localizedtext.cpp
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "forte_localizedtext.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "forte_localizedtext_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_DATATYPE(LocalizedText, g_nStringIdLocalizedText);
+
+CIEC_LocalizedText::CIEC_LocalizedText() :
+ CIEC_STRUCT(g_nStringIdLocalizedText, 2, scmElementTypes, scmElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+}
+
+const CStringDictionary::TStringId CIEC_LocalizedText::scmElementTypes[] = { g_nStringIdSTRING, g_nStringIdSTRING };
+const CStringDictionary::TStringId CIEC_LocalizedText::scmElementNames[] = { g_nStringIdtext, g_nStringIdlocale };
diff --git a/src/modules/opc_ua/types/forte_localizedtext.h b/src/modules/opc_ua/types/forte_localizedtext.h
new file mode 100644
index 0000000..d10c6df
--- /dev/null
+++ b/src/modules/opc_ua/types/forte_localizedtext.h
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2019 fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _FORTE_LOCALIZEDTEXT_H_
+#define _FORTE_LOCALIZEDTEXT_H_
+
+#include "forte_struct.h"
+#include "forte_string.h"
+
+class CIEC_LocalizedText : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(LocalizedText)
+
+ public:
+ CIEC_LocalizedText();
+
+ virtual ~CIEC_LocalizedText() {
+ }
+
+ CIEC_STRING &text() {
+ return *static_cast<CIEC_STRING*>(&getMembers()[0]);
+ }
+
+ CIEC_STRING &locale() {
+ return *static_cast<CIEC_STRING*>(&getMembers()[1]);
+ }
+
+ private:
+ static const CStringDictionary::TStringId scmElementTypes[];
+ static const CStringDictionary::TStringId scmElementNames[];
+};
+
+#endif //_FORTE_LOCALIZEDTEXT_H_
diff --git a/src/modules/piface/CMakeLists.txt b/src/modules/piface/CMakeLists.txt
index 81f08d9..09487bc 100644
--- a/src/modules/piface/CMakeLists.txt
+++ b/src/modules/piface/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
###############################################################
diff --git a/src/modules/piface/processinterface.cpp b/src/modules/piface/processinterface.cpp
index 01d7187..7277ed9 100644
--- a/src/modules/piface/processinterface.cpp
+++ b/src/modules/piface/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/piface/processinterface.h b/src/modules/piface/processinterface.h
index b0cabc2..b4d2041 100644
--- a/src/modules/piface/processinterface.h
+++ b/src/modules/piface/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/CMakeLists.txt b/src/modules/powerlink/CMakeLists.txt
index 6d99274..dd84685 100644
--- a/src/modules/powerlink/CMakeLists.txt
+++ b/src/modules/powerlink/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2012 - 2014 AIT, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2012 - 2014 AIT, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(POWERLINK "openPOWERLINK Service Interface Function Blocks")
diff --git a/src/modules/powerlink/EplCNCallback.h b/src/modules/powerlink/EplCNCallback.h
index 5c00c6a..3d4368c 100644
--- a/src/modules/powerlink/EplCNCallback.h
+++ b/src/modules/powerlink/EplCNCallback.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/EplWrapper.cpp b/src/modules/powerlink/EplWrapper.cpp
index d3b300c..f29c246 100644
--- a/src/modules/powerlink/EplWrapper.cpp
+++ b/src/modules/powerlink/EplWrapper.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2014 AIT, ACIN, fortiss
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl, Ewald Weinhandl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/EplWrapper.h b/src/modules/powerlink/EplWrapper.h
index c5ac5c9..5ae4ac6 100644
--- a/src/modules/powerlink/EplWrapper.h
+++ b/src/modules/powerlink/EplWrapper.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2104 AIT, ACIN, fortiss
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/EplXmlReader.cpp b/src/modules/powerlink/EplXmlReader.cpp
index 6b20653..fc46fe3 100644
--- a/src/modules/powerlink/EplXmlReader.cpp
+++ b/src/modules/powerlink/EplXmlReader.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 - 2014 AIT, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -235,8 +236,9 @@
int occurences = m_oModuleListIn.getNrOfModules(dest);
int modNr = m_oModuleListOut.getModuleNr(dest, occurences + 1);
- if(modNr == -1)
+ if(modNr == -1) {
cout << "ShouldNotHappenError" << endl;
+ }
return modNr;
}
diff --git a/src/modules/powerlink/EplXmlReader.h b/src/modules/powerlink/EplXmlReader.h
index 5f8a84a..12cedfb 100644
--- a/src/modules/powerlink/EplXmlReader.h
+++ b/src/modules/powerlink/EplXmlReader.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/ModuleList.cpp b/src/modules/powerlink/ModuleList.cpp
index 5752050..bf56a2f 100644
--- a/src/modules/powerlink/ModuleList.cpp
+++ b/src/modules/powerlink/ModuleList.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2014 AIT, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/ModuleList.h b/src/modules/powerlink/ModuleList.h
index f356ccd..69220fb 100644
--- a/src/modules/powerlink/ModuleList.h
+++ b/src/modules/powerlink/ModuleList.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/POWERLINK_MN.cpp b/src/modules/powerlink/POWERLINK_MN.cpp
index a0716ad..b59997f 100644
--- a/src/modules/powerlink/POWERLINK_MN.cpp
+++ b/src/modules/powerlink/POWERLINK_MN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/POWERLINK_MN.h b/src/modules/powerlink/POWERLINK_MN.h
index 2bd862b..3c9a361 100644
--- a/src/modules/powerlink/POWERLINK_MN.h
+++ b/src/modules/powerlink/POWERLINK_MN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/ProcessImageMatrix.cpp b/src/modules/powerlink/ProcessImageMatrix.cpp
index 868c831..2074b60 100644
--- a/src/modules/powerlink/ProcessImageMatrix.cpp
+++ b/src/modules/powerlink/ProcessImageMatrix.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -81,8 +82,9 @@
TChannelList::Iterator itEnd = m_lMatrix.end();
for(TChannelList::Iterator it(m_lMatrix.begin()); it != itEnd; ++it){
if(it->m_nCN == pa_nCN && it->m_nModuleId == pa_nModule){
- if(newMatrix == NULL)
+ if(newMatrix == NULL) {
newMatrix = new CProcessImageMatrix();
+ }
newMatrix->addEntry(it->m_nCN, it->m_nModuleId, it->m_nIOid, it->m_nDataSize, it->m_nPIOffset, it->m_nBitOffset);
}
diff --git a/src/modules/powerlink/ProcessImageMatrix.h b/src/modules/powerlink/ProcessImageMatrix.h
index 5d4d282..87704bf 100644
--- a/src/modules/powerlink/ProcessImageMatrix.h
+++ b/src/modules/powerlink/ProcessImageMatrix.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AI4622.cpp b/src/modules/powerlink/X20AI4622.cpp
index b2caba4..cf5538e 100644
--- a/src/modules/powerlink/X20AI4622.cpp
+++ b/src/modules/powerlink/X20AI4622.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren, Thomas Strasser - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AI4622.h b/src/modules/powerlink/X20AI4622.h
index 5586a45..cc2bd6f 100644
--- a/src/modules/powerlink/X20AI4622.h
+++ b/src/modules/powerlink/X20AI4622.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AO4622.cpp b/src/modules/powerlink/X20AO4622.cpp
index be88c05..0474df0 100644
--- a/src/modules/powerlink/X20AO4622.cpp
+++ b/src/modules/powerlink/X20AO4622.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AO4622.h b/src/modules/powerlink/X20AO4622.h
index 393b074..1ae6629 100644
--- a/src/modules/powerlink/X20AO4622.h
+++ b/src/modules/powerlink/X20AO4622.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AT2402.cpp b/src/modules/powerlink/X20AT2402.cpp
index 670ebd9..8fefb01 100644
--- a/src/modules/powerlink/X20AT2402.cpp
+++ b/src/modules/powerlink/X20AT2402.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AT2402.h b/src/modules/powerlink/X20AT2402.h
index b488aea..2bd2b74 100644
--- a/src/modules/powerlink/X20AT2402.h
+++ b/src/modules/powerlink/X20AT2402.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AT4222.cpp b/src/modules/powerlink/X20AT4222.cpp
index 32eab84..9acbba3 100644
--- a/src/modules/powerlink/X20AT4222.cpp
+++ b/src/modules/powerlink/X20AT4222.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20AT4222.h b/src/modules/powerlink/X20AT4222.h
index 34502e1..b35e406 100644
--- a/src/modules/powerlink/X20AT4222.h
+++ b/src/modules/powerlink/X20AT4222.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI4653.cpp b/src/modules/powerlink/X20DI4653.cpp
index 899dbfb..dfaf11f 100644
--- a/src/modules/powerlink/X20DI4653.cpp
+++ b/src/modules/powerlink/X20DI4653.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI4653.h b/src/modules/powerlink/X20DI4653.h
index bbee000..634bb18 100644
--- a/src/modules/powerlink/X20DI4653.h
+++ b/src/modules/powerlink/X20DI4653.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI9371.cpp b/src/modules/powerlink/X20DI9371.cpp
index 3fb97da..15243fc 100644
--- a/src/modules/powerlink/X20DI9371.cpp
+++ b/src/modules/powerlink/X20DI9371.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI9371.h b/src/modules/powerlink/X20DI9371.h
index ffba914..6ee6031 100644
--- a/src/modules/powerlink/X20DI9371.h
+++ b/src/modules/powerlink/X20DI9371.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI9372.cpp b/src/modules/powerlink/X20DI9372.cpp
index 7cbf73e..b7e2f68 100644
--- a/src/modules/powerlink/X20DI9372.cpp
+++ b/src/modules/powerlink/X20DI9372.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI9372.h b/src/modules/powerlink/X20DI9372.h
index 3006cee..ad3d8da 100644
--- a/src/modules/powerlink/X20DI9372.h
+++ b/src/modules/powerlink/X20DI9372.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI937X.cpp b/src/modules/powerlink/X20DI937X.cpp
index 075aef5..6391410 100644
--- a/src/modules/powerlink/X20DI937X.cpp
+++ b/src/modules/powerlink/X20DI937X.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DI937X.h b/src/modules/powerlink/X20DI937X.h
index 7098807..0ac6e3a 100644
--- a/src/modules/powerlink/X20DI937X.h
+++ b/src/modules/powerlink/X20DI937X.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO4623.cpp b/src/modules/powerlink/X20DO4623.cpp
index cfdd976..f9f9073 100644
--- a/src/modules/powerlink/X20DO4623.cpp
+++ b/src/modules/powerlink/X20DO4623.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO4623.h b/src/modules/powerlink/X20DO4623.h
index 918208e..af4cfd1 100644
--- a/src/modules/powerlink/X20DO4623.h
+++ b/src/modules/powerlink/X20DO4623.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO4649.cpp b/src/modules/powerlink/X20DO4649.cpp
index a220ff6..409713b 100644
--- a/src/modules/powerlink/X20DO4649.cpp
+++ b/src/modules/powerlink/X20DO4649.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO4649.h b/src/modules/powerlink/X20DO4649.h
index 8043691..163bddf 100644
--- a/src/modules/powerlink/X20DO4649.h
+++ b/src/modules/powerlink/X20DO4649.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO9321.cpp b/src/modules/powerlink/X20DO9321.cpp
index a7bd860..eaa8aa7 100644
--- a/src/modules/powerlink/X20DO9321.cpp
+++ b/src/modules/powerlink/X20DO9321.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO9321.h b/src/modules/powerlink/X20DO9321.h
index 268f5ff..63e4572 100644
--- a/src/modules/powerlink/X20DO9321.h
+++ b/src/modules/powerlink/X20DO9321.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO9322.cpp b/src/modules/powerlink/X20DO9322.cpp
index 715ad30..efb5ce9 100644
--- a/src/modules/powerlink/X20DO9322.cpp
+++ b/src/modules/powerlink/X20DO9322.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 2013 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/powerlink/X20DO9322.h b/src/modules/powerlink/X20DO9322.h
index a606832..2b2541c 100644
--- a/src/modules/powerlink/X20DO9322.h
+++ b/src/modules/powerlink/X20DO9322.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 AIT
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Filip Andren - initial API and implementation and/or initial documentation
diff --git a/src/modules/raspberry_sps/CMakeLists.txt b/src/modules/raspberry_sps/CMakeLists.txt
index de49f3e..defedfe 100644
--- a/src/modules/raspberry_sps/CMakeLists.txt
+++ b/src/modules/raspberry_sps/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2015 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2015 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(Raspberry-SPS "Interacting with GPIOs Raspberry SPS")
diff --git a/src/modules/raspberry_sps/processinterface.cpp b/src/modules/raspberry_sps/processinterface.cpp
index 72d6ac2..8e58717 100644
--- a/src/modules/raspberry_sps/processinterface.cpp
+++ b/src/modules/raspberry_sps/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/raspberry_sps/processinterface.h b/src/modules/raspberry_sps/processinterface.h
index 8179074..2c1c300 100644
--- a/src/modules/raspberry_sps/processinterface.h
+++ b/src/modules/raspberry_sps/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/CMakeLists.txt b/src/modules/reconfiguration/CMakeLists.txt
index f251611..02196ad 100644
--- a/src/modules/reconfiguration/CMakeLists.txt
+++ b/src/modules/reconfiguration/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2014 Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Matthias Plasch - initial API and implementation and/or initial documentation
+# Copyright (c) 2014 Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Matthias Plasch - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/src/modules/reconfiguration/EC_KILL_ELEM.cpp b/src/modules/reconfiguration/EC_KILL_ELEM.cpp
index 7dc10a2..f7685be 100644
--- a/src/modules/reconfiguration/EC_KILL_ELEM.cpp
+++ b/src/modules/reconfiguration/EC_KILL_ELEM.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_KILL_ELEM.h b/src/modules/reconfiguration/EC_KILL_ELEM.h
index 7a92aae..55c1ca2 100644
--- a/src/modules/reconfiguration/EC_KILL_ELEM.h
+++ b/src/modules/reconfiguration/EC_KILL_ELEM.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_SET_EVT.cpp b/src/modules/reconfiguration/EC_SET_EVT.cpp
index 8bb461c..e13aec1 100644
--- a/src/modules/reconfiguration/EC_SET_EVT.cpp
+++ b/src/modules/reconfiguration/EC_SET_EVT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_SET_EVT.h b/src/modules/reconfiguration/EC_SET_EVT.h
index 6cacdef..8a066e2 100644
--- a/src/modules/reconfiguration/EC_SET_EVT.h
+++ b/src/modules/reconfiguration/EC_SET_EVT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_START_ELEM.cpp b/src/modules/reconfiguration/EC_START_ELEM.cpp
index ac408ea..363d27f 100644
--- a/src/modules/reconfiguration/EC_START_ELEM.cpp
+++ b/src/modules/reconfiguration/EC_START_ELEM.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_START_ELEM.h b/src/modules/reconfiguration/EC_START_ELEM.h
index 898d313..e6f8b2a 100644
--- a/src/modules/reconfiguration/EC_START_ELEM.h
+++ b/src/modules/reconfiguration/EC_START_ELEM.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_STOP_ELEM.cpp b/src/modules/reconfiguration/EC_STOP_ELEM.cpp
index ba98950..4ebe6a9 100644
--- a/src/modules/reconfiguration/EC_STOP_ELEM.cpp
+++ b/src/modules/reconfiguration/EC_STOP_ELEM.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/EC_STOP_ELEM.h b/src/modules/reconfiguration/EC_STOP_ELEM.h
index 62a78d8..950ffb1 100644
--- a/src/modules/reconfiguration/EC_STOP_ELEM.h
+++ b/src/modules/reconfiguration/EC_STOP_ELEM.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_CREATE_CONN.cpp b/src/modules/reconfiguration/ST_CREATE_CONN.cpp
index de42af6..ce874f2 100644
--- a/src/modules/reconfiguration/ST_CREATE_CONN.cpp
+++ b/src/modules/reconfiguration/ST_CREATE_CONN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_CREATE_CONN.h b/src/modules/reconfiguration/ST_CREATE_CONN.h
index cbe1d77..07b226f 100644
--- a/src/modules/reconfiguration/ST_CREATE_CONN.h
+++ b/src/modules/reconfiguration/ST_CREATE_CONN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_CREATE_FB.cpp b/src/modules/reconfiguration/ST_CREATE_FB.cpp
index 4c23d2a..179e1bc 100644
--- a/src/modules/reconfiguration/ST_CREATE_FB.cpp
+++ b/src/modules/reconfiguration/ST_CREATE_FB.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_CREATE_FB.h b/src/modules/reconfiguration/ST_CREATE_FB.h
index 050eec2..e6cf209 100644
--- a/src/modules/reconfiguration/ST_CREATE_FB.h
+++ b/src/modules/reconfiguration/ST_CREATE_FB.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_DEL_CONN.cpp b/src/modules/reconfiguration/ST_DEL_CONN.cpp
index 166582d..6b6ec63 100644
--- a/src/modules/reconfiguration/ST_DEL_CONN.cpp
+++ b/src/modules/reconfiguration/ST_DEL_CONN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_DEL_CONN.h b/src/modules/reconfiguration/ST_DEL_CONN.h
index fa18a52..6605b68 100644
--- a/src/modules/reconfiguration/ST_DEL_CONN.h
+++ b/src/modules/reconfiguration/ST_DEL_CONN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_DEL_FB.cpp b/src/modules/reconfiguration/ST_DEL_FB.cpp
index 8f17a12..5b596d5 100644
--- a/src/modules/reconfiguration/ST_DEL_FB.cpp
+++ b/src/modules/reconfiguration/ST_DEL_FB.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_DEL_FB.h b/src/modules/reconfiguration/ST_DEL_FB.h
index e999be2..ba5c574 100644
--- a/src/modules/reconfiguration/ST_DEL_FB.h
+++ b/src/modules/reconfiguration/ST_DEL_FB.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_REC_CONN.cpp b/src/modules/reconfiguration/ST_REC_CONN.cpp
index 8f529e3..a430328 100644
--- a/src/modules/reconfiguration/ST_REC_CONN.cpp
+++ b/src/modules/reconfiguration/ST_REC_CONN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_REC_CONN.h b/src/modules/reconfiguration/ST_REC_CONN.h
index af8b100..f60449f 100644
--- a/src/modules/reconfiguration/ST_REC_CONN.h
+++ b/src/modules/reconfiguration/ST_REC_CONN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_SET_PARM.cpp b/src/modules/reconfiguration/ST_SET_PARM.cpp
index 86e008f..9e4fc2c 100644
--- a/src/modules/reconfiguration/ST_SET_PARM.cpp
+++ b/src/modules/reconfiguration/ST_SET_PARM.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/reconfiguration/ST_SET_PARM.h b/src/modules/reconfiguration/ST_SET_PARM.h
index 17c2463..7e8db05 100644
--- a/src/modules/reconfiguration/ST_SET_PARM.h
+++ b/src/modules/reconfiguration/ST_SET_PARM.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/ros/CMakeLists.txt b/src/modules/ros/CMakeLists.txt
index 04af658..d57b0eb 100644
--- a/src/modules/ros/CMakeLists.txt
+++ b/src/modules/ros/CMakeLists.txt
@@ -1,9 +1,10 @@
#############################################################################
# Copyright (c) 2018 fortiss GmbH
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Ben Schneider - initial API and implementation and/or initial documentation
diff --git a/src/modules/ros/EXECUTE_ACTION_CLIENT.cpp b/src/modules/ros/EXECUTE_ACTION_CLIENT.cpp
index eaef6fc..ba91046 100644
--- a/src/modules/ros/EXECUTE_ACTION_CLIENT.cpp
+++ b/src/modules/ros/EXECUTE_ACTION_CLIENT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/EXECUTE_ACTION_CLIENT.h b/src/modules/ros/EXECUTE_ACTION_CLIENT.h
index 1b6713d..cd47601 100644
--- a/src/modules/ros/EXECUTE_ACTION_CLIENT.h
+++ b/src/modules/ros/EXECUTE_ACTION_CLIENT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/EXECUTE_ACTION_SERVER.cpp b/src/modules/ros/EXECUTE_ACTION_SERVER.cpp
index 7c9b76a..194ca0e 100644
--- a/src/modules/ros/EXECUTE_ACTION_SERVER.cpp
+++ b/src/modules/ros/EXECUTE_ACTION_SERVER.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/EXECUTE_ACTION_SERVER.h b/src/modules/ros/EXECUTE_ACTION_SERVER.h
index 526e393..1c39930 100644
--- a/src/modules/ros/EXECUTE_ACTION_SERVER.h
+++ b/src/modules/ros/EXECUTE_ACTION_SERVER.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/ROSLayer.cpp b/src/modules/ros/ROSLayer.cpp
index 2ab331f..d569af6 100644
--- a/src/modules/ros/ROSLayer.cpp
+++ b/src/modules/ros/ROSLayer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
@@ -70,16 +71,17 @@
m_TopicType = layerParams.substr(doublePoint + 1);
- if("std_msgs/Float64" == m_TopicType)
+ if("std_msgs/Float64" == m_TopicType) {
m_Pub = m_Nh.advertise < std_msgs::Float64 > (m_TopicName, 100);
- else if("std_msgs/Int32" == m_TopicType)
+ } else if("std_msgs/Int32" == m_TopicType) {
m_Pub = m_Nh.advertise < std_msgs::Int32 > (m_TopicName, 100);
- else if("std_msgs/Bool" == m_TopicType)
+ } else if("std_msgs/Bool" == m_TopicType) {
m_Pub = m_Nh.advertise < std_msgs::Bool > (m_TopicName, 100);
- else if("std_msgs/String" == m_TopicType)
+ } else if("std_msgs/String" == m_TopicType) {
m_Pub = m_Nh.advertise < std_msgs::String > (m_TopicName, 100);
- else
+ } else {
DEVLOG_ERROR("[ROSLAYER] Publisher could not be initialized: unknown topic type \n");
+ }
//FIXME successful initialization message also on error..
}
else{
diff --git a/src/modules/ros/ROSLayer.h b/src/modules/ros/ROSLayer.h
index 41ed74b..849e1c1 100644
--- a/src/modules/ros/ROSLayer.h
+++ b/src/modules/ros/ROSLayer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/ROSManager.cpp b/src/modules/ros/ROSManager.cpp
index d82a13a..5769dd9 100644
--- a/src/modules/ros/ROSManager.cpp
+++ b/src/modules/ros/ROSManager.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/ROSManager.h b/src/modules/ros/ROSManager.h
index ac5233a..ff852a0 100644
--- a/src/modules/ros/ROSManager.h
+++ b/src/modules/ros/ROSManager.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/ServiceCallManager.cpp b/src/modules/ros/ServiceCallManager.cpp
index b4c3104..9ac864b 100644
--- a/src/modules/ros/ServiceCallManager.cpp
+++ b/src/modules/ros/ServiceCallManager.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/ServiceCallManager.h b/src/modules/ros/ServiceCallManager.h
index 1ebb1fe..85b76ad 100644
--- a/src/modules/ros/ServiceCallManager.h
+++ b/src/modules/ros/ServiceCallManager.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/TRIGGER_SERVICE_CLIENT.cpp b/src/modules/ros/TRIGGER_SERVICE_CLIENT.cpp
index e0e3817..cb7603f 100644
--- a/src/modules/ros/TRIGGER_SERVICE_CLIENT.cpp
+++ b/src/modules/ros/TRIGGER_SERVICE_CLIENT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/TRIGGER_SERVICE_CLIENT.h b/src/modules/ros/TRIGGER_SERVICE_CLIENT.h
index 7434207..565774c 100644
--- a/src/modules/ros/TRIGGER_SERVICE_CLIENT.h
+++ b/src/modules/ros/TRIGGER_SERVICE_CLIENT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/TRIGGER_SERVICE_SERVER.cpp b/src/modules/ros/TRIGGER_SERVICE_SERVER.cpp
index 8f8d135..4b558ae 100644
--- a/src/modules/ros/TRIGGER_SERVICE_SERVER.cpp
+++ b/src/modules/ros/TRIGGER_SERVICE_SERVER.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/ros/TRIGGER_SERVICE_SERVER.h b/src/modules/ros/TRIGGER_SERVICE_SERVER.h
index 2056516..8ec3ed3 100644
--- a/src/modules/ros/TRIGGER_SERVICE_SERVER.h
+++ b/src/modules/ros/TRIGGER_SERVICE_SERVER.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 - 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/rt_events/CMakeLists.txt b/src/modules/rt_events/CMakeLists.txt
index e79ae79..ad56921 100644
--- a/src/modules/rt_events/CMakeLists.txt
+++ b/src/modules/rt_events/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010, 2011 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl
+# Copyright (c) 2010, 2011 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(RT_Events "Real-Time Event Funktion blocks")
diff --git a/src/modules/rt_events/RT_E_CYCLE.cpp b/src/modules/rt_events/RT_E_CYCLE.cpp
index 5d70fa8..e7ec20f 100644
--- a/src/modules/rt_events/RT_E_CYCLE.cpp
+++ b/src/modules/rt_events/RT_E_CYCLE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_CYCLE.h b/src/modules/rt_events/RT_E_CYCLE.h
index 09dec9e..ed1dc09 100644
--- a/src/modules/rt_events/RT_E_CYCLE.h
+++ b/src/modules/rt_events/RT_E_CYCLE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_DELAY.cpp b/src/modules/rt_events/RT_E_DELAY.cpp
index 7360b18..8f0a1c1 100644
--- a/src/modules/rt_events/RT_E_DELAY.cpp
+++ b/src/modules/rt_events/RT_E_DELAY.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_DELAY.h b/src/modules/rt_events/RT_E_DELAY.h
index 0bc25c1..272eec7 100644
--- a/src/modules/rt_events/RT_E_DELAY.h
+++ b/src/modules/rt_events/RT_E_DELAY.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_DEMUX.cpp b/src/modules/rt_events/RT_E_DEMUX.cpp
index d2b451f..fa91fa3 100644
--- a/src/modules/rt_events/RT_E_DEMUX.cpp
+++ b/src/modules/rt_events/RT_E_DEMUX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_DEMUX.h b/src/modules/rt_events/RT_E_DEMUX.h
index 18ec907..7c1fe9f 100644
--- a/src/modules/rt_events/RT_E_DEMUX.h
+++ b/src/modules/rt_events/RT_E_DEMUX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_EC_COUPLER.cpp b/src/modules/rt_events/RT_E_EC_COUPLER.cpp
index b47c737..927775b 100644
--- a/src/modules/rt_events/RT_E_EC_COUPLER.cpp
+++ b/src/modules/rt_events/RT_E_EC_COUPLER.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_EC_COUPLER.h b/src/modules/rt_events/RT_E_EC_COUPLER.h
index 0df4bfc..d6eea1f 100644
--- a/src/modules/rt_events/RT_E_EC_COUPLER.h
+++ b/src/modules/rt_events/RT_E_EC_COUPLER.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_F_TRIG.cpp b/src/modules/rt_events/RT_E_F_TRIG.cpp
index 628aa6a..c4eb057 100644
--- a/src/modules/rt_events/RT_E_F_TRIG.cpp
+++ b/src/modules/rt_events/RT_E_F_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_F_TRIG.h b/src/modules/rt_events/RT_E_F_TRIG.h
index 8026a47..85450f5 100644
--- a/src/modules/rt_events/RT_E_F_TRIG.h
+++ b/src/modules/rt_events/RT_E_F_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_MERGE.cpp b/src/modules/rt_events/RT_E_MERGE.cpp
index 0a3bfd5..90a0715 100644
--- a/src/modules/rt_events/RT_E_MERGE.cpp
+++ b/src/modules/rt_events/RT_E_MERGE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_MERGE.h b/src/modules/rt_events/RT_E_MERGE.h
index 544e824..3efc395 100644
--- a/src/modules/rt_events/RT_E_MERGE.h
+++ b/src/modules/rt_events/RT_E_MERGE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_PERMIT.cpp b/src/modules/rt_events/RT_E_PERMIT.cpp
index fcf6d19..725e13c 100644
--- a/src/modules/rt_events/RT_E_PERMIT.cpp
+++ b/src/modules/rt_events/RT_E_PERMIT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_PERMIT.h b/src/modules/rt_events/RT_E_PERMIT.h
index b4d88f1..a8c4a78 100644
--- a/src/modules/rt_events/RT_E_PERMIT.h
+++ b/src/modules/rt_events/RT_E_PERMIT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_REND.cpp b/src/modules/rt_events/RT_E_REND.cpp
index 5d27d5a..a5b8226 100644
--- a/src/modules/rt_events/RT_E_REND.cpp
+++ b/src/modules/rt_events/RT_E_REND.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_REND.h b/src/modules/rt_events/RT_E_REND.h
index fe2f7f9..ab41b79 100644
--- a/src/modules/rt_events/RT_E_REND.h
+++ b/src/modules/rt_events/RT_E_REND.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_R_TRIG.cpp b/src/modules/rt_events/RT_E_R_TRIG.cpp
index e93f08a..7e80258 100644
--- a/src/modules/rt_events/RT_E_R_TRIG.cpp
+++ b/src/modules/rt_events/RT_E_R_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_R_TRIG.h b/src/modules/rt_events/RT_E_R_TRIG.h
index daf7f56..f4f52e3 100644
--- a/src/modules/rt_events/RT_E_R_TRIG.h
+++ b/src/modules/rt_events/RT_E_R_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_SELECT.cpp b/src/modules/rt_events/RT_E_SELECT.cpp
index 39ae106..992977f 100644
--- a/src/modules/rt_events/RT_E_SELECT.cpp
+++ b/src/modules/rt_events/RT_E_SELECT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_SELECT.h b/src/modules/rt_events/RT_E_SELECT.h
index 046deed..7f29c6a 100644
--- a/src/modules/rt_events/RT_E_SELECT.h
+++ b/src/modules/rt_events/RT_E_SELECT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/modules/rt_events/RT_E_SPLIT.cpp b/src/modules/rt_events/RT_E_SPLIT.cpp
index 0ced147..083bffd 100644
--- a/src/modules/rt_events/RT_E_SPLIT.cpp
+++ b/src/modules/rt_events/RT_E_SPLIT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_SPLIT.h b/src/modules/rt_events/RT_E_SPLIT.h
index 9b56486..eee5cbd 100644
--- a/src/modules/rt_events/RT_E_SPLIT.h
+++ b/src/modules/rt_events/RT_E_SPLIT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/modules/rt_events/RT_E_SWITCH.cpp b/src/modules/rt_events/RT_E_SWITCH.cpp
index c568522..738e03d 100644
--- a/src/modules/rt_events/RT_E_SWITCH.cpp
+++ b/src/modules/rt_events/RT_E_SWITCH.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny, Monika Wenger,
diff --git a/src/modules/rt_events/RT_E_SWITCH.h b/src/modules/rt_events/RT_E_SWITCH.h
index 596df4a..083085d 100644
--- a/src/modules/rt_events/RT_E_SWITCH.h
+++ b/src/modules/rt_events/RT_E_SWITCH.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/modules/rt_events/RT_E_TRAIN.cpp b/src/modules/rt_events/RT_E_TRAIN.cpp
index c0c8b29..a5f6bde 100644
--- a/src/modules/rt_events/RT_E_TRAIN.cpp
+++ b/src/modules/rt_events/RT_E_TRAIN.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/RT_E_TRAIN.h b/src/modules/rt_events/RT_E_TRAIN.h
index 15e7ee4..bd66853 100644
--- a/src/modules/rt_events/RT_E_TRAIN.h
+++ b/src/modules/rt_events/RT_E_TRAIN.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/modules/rt_events/rtesingle.h b/src/modules/rt_events/rtesingle.h
index b9f1be4..13ee3dc 100644
--- a/src/modules/rt_events/rtesingle.h
+++ b/src/modules/rt_events/rtesingle.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
@@ -37,40 +38,36 @@
* \return if true the succeeding EC part will be activated.
*/
virtual bool checkActivation(int pa_nEIID) = 0;
- virtual void executeEvent(int pa_nEIID){
- if(0 != pa_nEIID){ //it is not the init event
- if(m_bInitialized){
- if(checkActivation(pa_nEIID)){
+ virtual void executeEvent(int pa_nEIID) {
+ if(0 != pa_nEIID) { //it is not the init event
+ if(m_bInitialized && checkActivation(pa_nEIID)) {
CEventConnection *eoCon = getEOConUnchecked(1);
- if(eoCon->isConnected()){
+ if(eoCon->isConnected()) {
eoCon->triggerEvent(m_oECEO);
m_oECEO.resumeSelfSuspend();
}
}
- }
- }
- else{ // we got init
- if(QI() == true){
- if(!m_bInitialized){
- m_oECEO.changeExecutionState(cg_nMGM_CMD_Start);
- m_bInitialized = true;
+ } else { // we got init
+ if(QI() == true) {
+ if(!m_bInitialized) {
+ m_oECEO.changeExecutionState(cg_nMGM_CMD_Start);
+ m_bInitialized = true;
+ }
+ m_oECEO.setDeadline(Deadline());
+ } else {
+ m_oECEO.changeExecutionState(cg_nMGM_CMD_Stop);
+ m_bInitialized = false;
}
- m_oECEO.setDeadline(Deadline());
+ QO() = QI();
+ sendOutputEvent(0);
}
- else{
- m_oECEO.changeExecutionState(cg_nMGM_CMD_Stop);
- m_bInitialized = false;
- }
- QO() = QI();
- sendOutputEvent(0);
}
- }
public:
-
+
CRTEventSingle(CResource *pa_poSrcRes, const SFBInterfaceSpec *pa_pstInterfaceSpec,
- const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
+ const CStringDictionary::TStringId pa_nInstanceNameId, TForteByte *pa_acFBConnData, TForteByte *pa_acFBVarsData) :
CFunctionBlock( pa_poSrcRes, pa_pstInterfaceSpec, pa_nInstanceNameId, pa_acFBConnData, pa_acFBVarsData)
{
m_bInitialized = false;
diff --git a/src/modules/sysfs/CMakeLists.txt b/src/modules/sysfs/CMakeLists.txt
index 339d6e4..ce6c266 100644
--- a/src/modules/sysfs/CMakeLists.txt
+++ b/src/modules/sysfs/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2015 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Waldemar Eisenmenger - initial API and implementation and/or initial documentation
+# Copyright (c) 2015 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Waldemar Eisenmenger - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(SysFs "Interacting with GPIOs of linuxbased devices via the filesystem using sysfs")
@@ -20,6 +21,7 @@
forte_add_sourcefile_hcpp(../../stdfblib/io/IX)
forte_add_sourcefile_hcpp( ../../stdfblib/io/QX)
+forte_add_handler(CSysFsProcessInterface::CIOHandler sysfsprocint)
forte_add_sourcefile_hcpp(sysfsprocint)
forte_add_sourcefile_h(processinterface.h)
diff --git a/src/modules/sysfs/processinterface.h b/src/modules/sysfs/processinterface.h
index 3694ce5..403d660 100644
--- a/src/modules/sysfs/processinterface.h
+++ b/src/modules/sysfs/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/modules/sysfs/sysfsprocint.cpp b/src/modules/sysfs/sysfsprocint.cpp
index 1d8229c..8e0e00b 100644
--- a/src/modules/sysfs/sysfsprocint.cpp
+++ b/src/modules/sysfs/sysfsprocint.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Waldemar Eisenmenger, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -11,8 +12,9 @@
#include "sysfsprocint.h"
#include "../../arch/devlog.h"
+#include <extevhandlerhelper.h>
+#include <criticalregion.h>
#include <string>
-#include <forte_thread.h>
const char * const CSysFsProcessInterface::scmOK = "OK";
const char * const CSysFsProcessInterface::scmPinInUse = "Pin already in use by other FB";
const char * const CSysFsProcessInterface::scmNotInitialised = "FB not initialized";
@@ -20,152 +22,244 @@
const char * const CSysFsProcessInterface::scmCouldNotRead = "Could not read";
const char * const CSysFsProcessInterface::scmCouldNotWrite = "Could not write";
-CSysFsProcessInterface::CSysFsProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
- CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData){
+CSysFsProcessInterface::CSysFsProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec,
+ const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData) {
mFile.rdbuf()->pubsetbuf(0, 0); //disable buffer to avoid latency
+ STATUS() = scmNotInitialised;
}
-CSysFsProcessInterface::~CSysFsProcessInterface(){
- deinitialise(); //Will unexport everything, so next time FORTE starts it won't fail to initialize.
+CSysFsProcessInterface::~CSysFsProcessInterface() {
+ unexportIO(); //Will unexport everything, so next time FORTE starts it won't fail to initialize.
}
-bool CSysFsProcessInterface::setDirection(bool paIsInput){
- bool retVal = false;
- std::string fileName = "/sys/class/gpio/gpio" + std::string(PARAMS().getValue()) + "/direction";
- std::ofstream mDirectionFile;
- mDirectionFile.open(fileName.c_str());
- if(mDirectionFile.is_open()){
- if(paIsInput){
- DEVLOG_INFO("3in\n");
- mDirectionFile << "in";
- }else{
- DEVLOG_INFO("3out\n");
- mDirectionFile << "out";
- }
- retVal = true;
- }else{
- retVal = false;
+bool CSysFsProcessInterface::setDirection(bool paIsInput) {
+ bool retVal = false;
+ std::string fileName = "/sys/class/gpio/gpio" + std::string(PARAMS().getValue()) + "/direction";
+ std::ofstream mDirectionFile;
+ mDirectionFile.open(fileName.c_str());
+ if(mDirectionFile.is_open()) {
+ if(paIsInput) {
+ mDirectionFile << "in";
+ } else {
+ mDirectionFile << "out";
}
-
- return retVal;
+ if(!mDirectionFile.fail()){
+ retVal = true;
+ } else{
+ DEVLOG_ERROR("[CSysFsProcessInterface::setDirection] Error writing to file %s.\n", fileName.c_str());
+ }
+ } else {
+ DEVLOG_ERROR("[CSysFsProcessInterface::setDirection] Opening file %s failed.\n", fileName.c_str());
+ }
+
+ return retVal;
}
-bool CSysFsProcessInterface::exportGPIO(){
- bool retVal = false;
- std::string fileName = "/sys/class/gpio/export";
- std::ofstream mExportFile;
- mExportFile.open(fileName.c_str());
- if(mExportFile.is_open()){
- DEVLOG_INFO("1\n");
+bool CSysFsProcessInterface::exportGPIO() {
+ bool retVal = false;
+ std::string fileName = "/sys/class/gpio/export";
+ std::ofstream mExportFile;
+ mExportFile.open(fileName.c_str());
+ if(mExportFile.is_open()) {
mExportFile << PARAMS().getValue();
+ if(!mExportFile.fail()) {
+ retVal = true;
+ } else {
+ DEVLOG_ERROR("[CSysFsProcessInterface::exportGPIO] Error writing to file %s.\n", fileName.c_str());
+ }
+ mExportFile.close();
+ retVal = true;
+ } else {
+ DEVLOG_ERROR("[CSysFsProcessInterface::exportGPIO] Opening file %s failed.\n", fileName.c_str());
+ }
+
+ return retVal;
+}
+
+bool CSysFsProcessInterface::valueGPIO(bool paIsInput) {
+ bool retVal = false;
+ std::string fileName = "/sys/class/gpio/gpio" + std::string(PARAMS().getValue()) + "/value";
+ if(paIsInput) {
+ mFile.open(fileName.c_str(), std::fstream::in);
+ } else {
+ mFile.open(fileName.c_str(), std::fstream::out);
+ }
+
+ if(mFile.is_open()){
retVal = true;
}else{
- retVal = false;
- DEVLOG_ERROR("Opening file %s failed.\n", fileName.c_str());
- }
-
- return retVal;
-}
-
-bool CSysFsProcessInterface::valueGPIO(bool paIsInput){
- bool retVal = false;
- std::string fileName = "/sys/class/gpio/gpio" + std::string(PARAMS().getValue()) + "/value";
- if(paIsInput){
- mFile.open(fileName.c_str(), std::fstream::in);
- retVal = true;
- }else{
- mFile.open(fileName.c_str(), std::fstream::out);
- retVal = true;
- }
- return retVal;
-}
-
-bool CSysFsProcessInterface::initialise(bool paIsInput){
- bool retVal = false;
- STATUS() = scmNotInitialised;
- if(CSysFsProcessInterface::exportGPIO()){
- CThread::sleepThread(1000);
- if(CSysFsProcessInterface::setDirection(paIsInput)){
- CThread::sleepThread(1000);
- if(CSysFsProcessInterface::valueGPIO(paIsInput)){
- retVal = true;
- STATUS() = scmOK;
- }
- else{
- retVal = false;
- }
- }else{
- retVal = false;
- }
- }else{
- retVal = false;
+ DEVLOG_ERROR("[CSysFsProcessInterface::valueGPIO] Opening file %s failed.\n", fileName.c_str());
}
-
return retVal;
}
-bool CSysFsProcessInterface::deinitialise(){
+bool CSysFsProcessInterface::initialise(bool paIsInput) {
bool retVal = false;
- STATUS() = scmError;
+ if(CSysFsProcessInterface::exportGPIO()) {
+ CThread::sleepThread(250);
+ if(CSysFsProcessInterface::setDirection(paIsInput)) {
+ CThread::sleepThread(250);
+ if(CSysFsProcessInterface::valueGPIO(paIsInput)) {
+ if(paIsInput) {
+ getExtEvHandler<CSysFsProcessInterface::CIOHandler>(*this).registerIXFB(this);
+ if(!getExtEvHandler<CSysFsProcessInterface::CIOHandler>(*this).isAlive()) {
+ getExtEvHandler<CSysFsProcessInterface::CIOHandler>(*this).start();
+ }
+ }
+ DEVLOG_DEBUG("[CSysFsProcessInterface::initialise] Pin with PARAM() %s was properly initialized.\n", PARAMS().getValue());
+ STATUS() = scmOK;
+ retVal = true;
+ }
+ }
+ }
+
+ return retVal;
+}
+
+bool CSysFsProcessInterface::unexportIO() {
+ bool retVal = false;
std::string fileName = "/sys/class/gpio/unexport";
std::ofstream mUnExport;
-
+
+ mFile.close();
mUnExport.open(fileName.c_str(), std::fstream::out);
- if(mUnExport.is_open()){
- mUnExport << PARAMS().getValue();
- if(!mUnExport.fail()){
- retVal = true;
- STATUS() = scmOK;
- }
- else{
- DEVLOG_ERROR("Error writing PARAMS() to file %s.\n", fileName.c_str());
- }
- }
- else{
- DEVLOG_ERROR("Opening file %s failed.\n", fileName.c_str());
+ if(mUnExport.is_open()) {
+ mUnExport << PARAMS().getValue();
+ if(!mUnExport.fail()) {
+ retVal = true;
+ STATUS() = scmOK;
+ } else {
+ STATUS() = scmError;
+ DEVLOG_ERROR("[CSysFsProcessInterface::deinitialise] Error writing PARAMS() to file %s.\n", fileName.c_str());
+ }
+ } else {
+ STATUS() = scmError;
+ DEVLOG_ERROR("[CSysFsProcessInterface::deinitialise] Opening file %s failed.\n", fileName.c_str());
}
return retVal;
}
-bool CSysFsProcessInterface::readPin(){
+bool CSysFsProcessInterface::deinitialise() {
+ getExtEvHandler<CSysFsProcessInterface::CIOHandler>(*this).unregisterIXFB(this);
+ return unexportIO();
+}
+
+bool CSysFsProcessInterface::readPin() {
+ return true;
+}
+
+bool CSysFsProcessInterface::checkInputData() {
bool retVal = false;
- if(mFile.is_open()){
+ if(mFile.is_open()) {
char binData = 0;
mFile.clear();
mFile.seekg(0, std::ios::beg);
mFile.read(&binData, 1);
- if(mFile.fail()){
+ if(mFile.fail()) {
STATUS() = scmCouldNotRead;
+ } else {
+ bool newData = ('0' != binData) ? true : false;
+ if(newData != IN_X()) {
+ IN_X() = newData;
+ retVal = true;
+ }
}
- else{
- IN_X() = ('0' != binData) ? true : false;
- STATUS() = scmOK;
- retVal = true;
- }
- }else{
+ } else {
STATUS() = scmNotInitialised;
}
return retVal;
}
-bool CSysFsProcessInterface::writePin(){
+bool CSysFsProcessInterface::writePin() {
bool retVal = false;
- if(mFile.is_open()){
+ if(mFile.is_open()) {
mFile.clear();
mFile.seekp(0, std::ios::beg);
unsigned int val = (false != OUT_X()) ? 1 : 0; //if true set the led to full glowing
mFile << val;
- if(mFile.fail()){
- STATUS() = scmCouldNotWrite;
- }
- else{
+ if(!mFile.fail()) {
STATUS() = scmOK;
retVal = true;
+ } else {
+ DEVLOG_ERROR("[CSysFsProcessInterface::writePin] Could not write %u to output file\n", val);
+ STATUS() = scmCouldNotWrite;
}
- }else{
+ } else {
+ DEVLOG_ERROR("[CSysFsProcessInterface::writePin] Cannot write to output since the FB was not properly initialized\n");
STATUS() = scmNotInitialised;
}
return retVal;
}
+
+DEFINE_HANDLER(CSysFsProcessInterface::CIOHandler);
+
+CSysFsProcessInterface::CIOHandler::CIOHandler(CDeviceExecution& pa_poDeviceExecution) :
+ CExternalEventHandler(pa_poDeviceExecution) {
+}
+
+CSysFsProcessInterface::CIOHandler::~CIOHandler() {
+ CCriticalRegion readList(mReadFBListSync);
+ mReadFBList.clearAll();
+ end();
+}
+
+void CSysFsProcessInterface::CIOHandler::registerIXFB(CSysFsProcessInterface *pa_poFB) {
+ CCriticalRegion readList(mReadFBListSync);
+ mReadFBList.pushBack(pa_poFB);
+}
+
+void CSysFsProcessInterface::CIOHandler::unregisterIXFB(CSysFsProcessInterface *pa_poFB) {
+ CCriticalRegion readList(mReadFBListSync);
+ TReadFBContainer::Iterator itRunner(mReadFBList.begin());
+ TReadFBContainer::Iterator itRefNode(mReadFBList.end());
+ TReadFBContainer::Iterator itEnd(mReadFBList.end());
+ while(itRunner != itEnd) {
+ if(*itRunner == pa_poFB) {
+ if(itRefNode == itEnd) {
+ mReadFBList.popFront();
+ } else {
+ mReadFBList.eraseAfter(itRefNode);
+ }
+ break;
+ }
+ itRefNode = itRunner;
+ ++itRunner;
+ }
+}
+
+void CSysFsProcessInterface::CIOHandler::run() {
+ while(isAlive()) {
+ CThread::sleepThread(10);
+ updateReadData();
+ }
+}
+
+void CSysFsProcessInterface::CIOHandler::updateReadData() {
+ CCriticalRegion readList(mReadFBListSync);
+ TReadFBContainer::Iterator itEnd(mReadFBList.end());
+ for(TReadFBContainer::Iterator itRunner = mReadFBList.begin(); itRunner != itEnd; ++itRunner) {
+ if((*itRunner)->checkInputData()) {
+ startNewEventChain(*itRunner);
+ }
+ }
+}
+
+void CSysFsProcessInterface::CIOHandler::enableHandler(void) {
+ //do nothing
+}
+
+void CSysFsProcessInterface::CIOHandler::disableHandler(void) {
+ end();
+}
+
+void CSysFsProcessInterface::CIOHandler::setPriority(int) {
+ //do nothing
+}
+
+int CSysFsProcessInterface::CIOHandler::getPriority(void) const {
+ return 0;
+}
+
diff --git a/src/modules/sysfs/sysfsprocint.h b/src/modules/sysfs/sysfsprocint.h
index 2f6d904..e47c03e 100644
--- a/src/modules/sysfs/sysfsprocint.h
+++ b/src/modules/sysfs/sysfsprocint.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Waldemar Eisenmenger - initial API and implementation and/or initial documentation
@@ -13,19 +14,43 @@
#define _SYSFSPROCINT_H_
#include "../../stdfblib/io/processinterfacebase.h"
+#include <forte_thread.h>
+#include <extevhan.h>
#include <fstream>
-class CSysFsProcessInterface : public CProcessInterfaceBase{
+class CSysFsProcessInterface : public CProcessInterfaceBase {
public:
- CSysFsProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData);
+ CSysFsProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
virtual ~CSysFsProcessInterface();
+ class CIOHandler : public CExternalEventHandler, public CThread {
+ DECLARE_HANDLER(CIOHandler)
+ ;
+ public:
+ virtual void run();
+ void updateReadData();
+ void registerIXFB(CSysFsProcessInterface *paFB);
+ void unregisterIXFB(CSysFsProcessInterface *paFB);
+ /* functions needed for the external event handler interface */
+ void enableHandler(void);
+ void disableHandler(void);
+ void setPriority(int paPriority);
+ int getPriority(void) const;
+
+ private:
+ typedef CSinglyLinkedList<CSysFsProcessInterface *> TReadFBContainer;
+ TReadFBContainer mReadFBList;
+ CSyncObject mReadFBListSync;
+ };
+
protected:
bool initialise(bool paIsInput);
bool deinitialise();
bool writePin();
bool readPin();
+ bool checkInputData();
private:
std::fstream mFile;
@@ -33,15 +58,15 @@
bool exportGPIO();
bool setDirection(bool paIsInput);
bool valueGPIO(bool paIsInput);
-
+
+ bool unexportIO();
+
static const char * const scmOK;
static const char * const scmPinInUse;
static const char * const scmNotInitialised;
static const char * const scmError;
static const char * const scmCouldNotRead;
static const char * const scmCouldNotWrite;
-
-
};
#endif /* PROCESSINTERFACE_H_ */
diff --git a/src/modules/tsn/CMakeLists.txt b/src/modules/tsn/CMakeLists.txt
index 8cc67cc..b2021f8 100644
--- a/src/modules/tsn/CMakeLists.txt
+++ b/src/modules/tsn/CMakeLists.txt
@@ -1,9 +1,10 @@
################################################################################
# Copyright (c) 2018 fortiss GmbH
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# Ben Schneider
diff --git a/src/modules/tsn/tsn_layer.cpp b/src/modules/tsn/tsn_layer.cpp
index bc5f764..9669f0b 100644
--- a/src/modules/tsn/tsn_layer.cpp
+++ b/src/modules/tsn/tsn_layer.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider - Initial contribution; vlan and prio configuration to support tsn for pub/sub
@@ -31,7 +32,7 @@
EComResponse eRetVal = e_InitInvalidId;
// complete ID for publisher: fbdk[].tsn[<ip>:<port>:<vlan_id>:<prio>] e.g., fbdk[].tsn[239.1.0.1:48401:3:5]
- CParameterParser parser(paLayerParameter, scmNumParameters, ':');
+ CParameterParser parser(paLayerParameter, ':', scmNumParameters);
if(scmNumParameters != parser.parseParameters()){
DEVLOG_ERROR("[TSN Layer] Wrong parameters (%s)\n", paLayerParameter);
diff --git a/src/modules/tsn/tsn_layer.h b/src/modules/tsn/tsn_layer.h
index 515bae9..384ba49 100644
--- a/src/modules/tsn/tsn_layer.h
+++ b/src/modules/tsn/tsn_layer.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider - Initial contribution; vlan and prio configuration to support tsn for pub/sub
diff --git a/src/modules/umic/CMakeLists.txt b/src/modules/umic/CMakeLists.txt
index 18e2654..ecf5e22 100644
--- a/src/modules/umic/CMakeLists.txt
+++ b/src/modules/umic/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral - initial API and implementation and/or initial documentation
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(uMIC "Interacting with GPIOs using the umic library for MicroControl")
diff --git a/src/modules/umic/processinterface.cpp b/src/modules/umic/processinterface.cpp
index 26a4f2f..b3503d9 100644
--- a/src/modules/umic/processinterface.cpp
+++ b/src/modules/umic/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/umic/processinterface.h b/src/modules/umic/processinterface.h
index bb187e1..7822667 100644
--- a/src/modules/umic/processinterface.h
+++ b/src/modules/umic/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
diff --git a/src/modules/umic/readme.txt b/src/modules/umic/readme.txt
index e48072d..fdd3e7d 100644
--- a/src/modules/umic/readme.txt
+++ b/src/modules/umic/readme.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2017 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Jose Cabral - initial API and implementation and/or initial documentation
+# Copyright (c) 2017 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
# *******************************************************************************/
Activate this module to access the I/O of the uMIC 200 of MicroControl
diff --git a/src/modules/utils/CMakeLists.txt b/src/modules/utils/CMakeLists.txt
index c214699..2c242c4 100644
--- a/src/modules/utils/CMakeLists.txt
+++ b/src/modules/utils/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2018 AIT, ACIN, Profactor GmbH, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Thomas Strasser, Alois Zoitl, Matthias Plasch, Ben Schneider
+# Copyright (c) 2011 - 2018 AIT, ACIN, Profactor GmbH, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Thomas Strasser, Alois Zoitl, Matthias Plasch, Ben Schneider
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_add_module(UTILS "FORTE UTILITY FBs")
@@ -27,7 +28,7 @@
forte_add_sourcefile_hcpp(OUT_ANY_CONSOLE GEN_F_MUX GEN_CSV_WRITER GEN_APPEND_STRING)
forte_add_sourcefile_hcpp(GEN_ARRAY2VALUES GEN_VALUES2ARRAY GEN_ARRAY2ARRAY GET_AT_INDEX SET_AT_INDEX)
-forte_add_sourcefile_hcpp(STEST_END)
-forte_add_sourcefile_hcpp(FB_RANDOM)
+forte_add_sourcefile_hcpp(FB_RANDOM GET_STRUCT_VALUE)
-forte_add_subdirectory(tests)
+forte_add_sourcefile_hcpp(STEST_END)
+forte_add_sourcefile_hcpp(TEST_CONDITION)
diff --git a/src/modules/utils/E_STOPWATCH.cpp b/src/modules/utils/E_STOPWATCH.cpp
index 9bb8185..55c9666 100644
--- a/src/modules/utils/E_STOPWATCH.cpp
+++ b/src/modules/utils/E_STOPWATCH.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/utils/E_STOPWATCH.h b/src/modules/utils/E_STOPWATCH.h
index 5d4b8a5..ed39b80 100644
--- a/src/modules/utils/E_STOPWATCH.h
+++ b/src/modules/utils/E_STOPWATCH.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ben Schneider
diff --git a/src/modules/utils/FB_RANDOM.cpp b/src/modules/utils/FB_RANDOM.cpp
index 4f902b6..77c2e5e 100644
--- a/src/modules/utils/FB_RANDOM.cpp
+++ b/src/modules/utils/FB_RANDOM.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012, 20113, 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer, Alois Zoitl
diff --git a/src/modules/utils/FB_RANDOM.h b/src/modules/utils/FB_RANDOM.h
index 0ef9cd1..cd39e15 100644
--- a/src/modules/utils/FB_RANDOM.h
+++ b/src/modules/utils/FB_RANDOM.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2012 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerhard Ebenhofer - initial API and implementation and/or initial documentation
diff --git a/src/modules/utils/GEN_APPEND_STRING.cpp b/src/modules/utils/GEN_APPEND_STRING.cpp
index d5696cc..7d619b3 100644
--- a/src/modules/utils/GEN_APPEND_STRING.cpp
+++ b/src/modules/utils/GEN_APPEND_STRING.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2014 Profactor GmbH, ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
@@ -35,7 +36,7 @@
const TForteInt16 GEN_APPEND_STRING::scm_maxStringBufSize = 100;
GEN_APPEND_STRING::GEN_APPEND_STRING(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
- CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_anDataInputNames(0), m_anDataInputTypeIds(0), m_anEIWith(0), m_nDInputs(0){
+ CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_anDataInputNames(0), m_anDataInputTypeIds(0), m_anEIWith(0), mDInputs(0){
}
GEN_APPEND_STRING::~GEN_APPEND_STRING(){
@@ -52,16 +53,15 @@
CIEC_ANY *pDataOutput = getDO(0);
int nUsedBytes = -1;
- TForteUInt16 nBytesFree = 0;
TForteUInt16 nCurrentLength = 0;
TForteUInt16 nArrayElements = 0;
TForteUInt16 nRequiredBytes = 0;
TForteUInt16 nStringLength = 0;
//iterate over data inputs
- for(int input_index = 0; input_index < m_nDInputs; input_index++){
+ for(size_t input_index = 0; input_index < mDInputs; input_index++) {
//get current data input
- pDataInput = getDI(input_index);
+ pDataInput = getDI(static_cast<unsigned int>(input_index));
//for string data inputs of type CIEC_STRING or CIEC_WSTRING
if(pDataInput->getDataTypeID() == CIEC_ANY::e_STRING || pDataInput->getDataTypeID() == CIEC_ANY::e_WSTRING){
@@ -94,7 +94,7 @@
//if data has been written to pDataOutput and input_index does not refer to first input
//get length and number of free bytes (unused memory)
nCurrentLength = (static_cast<CIEC_STRING*>(pDataOutput))->length();
- nBytesFree = static_cast<TForteUInt16>((static_cast<CIEC_STRING*>(pDataOutput))->getCapacity() - nCurrentLength);
+ TForteUInt16 nBytesFree = static_cast<TForteUInt16>((static_cast<CIEC_STRING*>(pDataOutput))->getCapacity() - nCurrentLength);
//if there is not enough free memory ==> reserve
if(nBytesFree < nRequiredBytes){
@@ -106,7 +106,6 @@
else{
//reset nCurrentLength and nBytesFree
nCurrentLength = 0;
- nBytesFree = 0;
//reserve required length
(static_cast<CIEC_STRING*>(pDataOutput))->reserve(nRequiredBytes);
}
@@ -131,40 +130,39 @@
++pcPos;
if('S' != *pcPos){
//we have an underscore and it is not the first underscore after E
- m_nDInputs = static_cast<int>(forte::core::util::strtoul(pcPos, 0, 10));
- DEVLOG_DEBUG("DIs: %d;\n", m_nDInputs);
+ mDInputs = static_cast<size_t>(forte::core::util::strtoul(pcPos, 0, 10));
}
else{
- m_nDInputs = 0;
+ mDInputs = 0;
}
}
else{
return false;
}
- if(m_nDInputs < 2){
+ if(mDInputs < 2){
return false;
}
//now the number of needed eventInputs and dataOutputs are available in the integer array
//create the eventInputs
- if(m_nDInputs < CFunctionBlock::scm_nMaxInterfaceEvents){
+ if(mDInputs < CFunctionBlock::scm_nMaxInterfaceEvents){
//create the data inputs
- m_anDataInputNames = new CStringDictionary::TStringId[m_nDInputs];
- m_anDataInputTypeIds = new CStringDictionary::TStringId[m_nDInputs];
+ m_anDataInputNames = new CStringDictionary::TStringId[mDInputs];
+ m_anDataInputTypeIds = new CStringDictionary::TStringId[mDInputs];
- generateGenericDataPointArrays("IN_", m_anDataInputTypeIds, m_anDataInputNames, m_nDInputs);
+ generateGenericDataPointArrays("IN_", m_anDataInputTypeIds, m_anDataInputNames, mDInputs);
//now create the WITH constructs...
//the With-Indexes for the data variables
- m_anEIWith = new TDataIOID[m_nDInputs + 1]; //for inputs + '255' separators at the list end
+ m_anEIWith = new TDataIOID[mDInputs + 1]; //for inputs + '255' separators at the list end
//in-withs
- for(size_t in_with = 0; in_with < m_nDInputs; ++in_with){
+ for(size_t in_with = 0; in_with < mDInputs; ++in_with){
m_anEIWith[in_with] = static_cast<TDataIOID>(in_with);
}
- m_anEIWith[m_nDInputs] = scmWithListDelimiter;
+ m_anEIWith[mDInputs] = scmWithListDelimiter;
//create the interface Specification
paInterfaceSpec.m_nNumEIs = 1;
@@ -175,7 +173,7 @@
paInterfaceSpec.m_aunEONames = scm_anEventOutputNames;
paInterfaceSpec.m_anEOWith = scm_anEOWith;
paInterfaceSpec.m_anEOWithIndexes = scm_anEOWithIndexes;
- paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(m_nDInputs);
+ paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(mDInputs);
paInterfaceSpec.m_aunDINames = m_anDataInputNames;
paInterfaceSpec.m_aunDIDataTypeNames = m_anDataInputTypeIds;
paInterfaceSpec.m_nNumDOs = 1;
diff --git a/src/modules/utils/GEN_APPEND_STRING.h b/src/modules/utils/GEN_APPEND_STRING.h
index 6346e9f..8a6f234 100644
--- a/src/modules/utils/GEN_APPEND_STRING.h
+++ b/src/modules/utils/GEN_APPEND_STRING.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 Profactor GmbH, ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Monika Wenger
@@ -23,13 +24,13 @@
//we know for sure that there is one output event and one input event
static const TEventID scm_nEventCNFID = 0;
static const CStringDictionary::TStringId scm_anEventOutputNames[];
-
+
static const TEventID scm_nEventREQID = 0;
static const CStringDictionary::TStringId scm_anEventInputNames[];
CStringDictionary::TStringId *m_anDataInputNames;
CStringDictionary::TStringId *m_anDataInputTypeIds;
-
+
static const CStringDictionary::TStringId scm_anDataOutputNames[];
static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
@@ -42,7 +43,7 @@
//maximum string buffer size for conversions into string values
static const TForteInt16 scm_maxStringBufSize;
//self-defined members
- int m_nDInputs;
+ size_t mDInputs;
virtual void executeEvent(int paEIID);
virtual bool createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec &paInterfaceSpec);
diff --git a/src/modules/utils/GEN_ARRAY2ARRAY.cpp b/src/modules/utils/GEN_ARRAY2ARRAY.cpp
index d91dc53..b9f8b81 100644
--- a/src/modules/utils/GEN_ARRAY2ARRAY.cpp
+++ b/src/modules/utils/GEN_ARRAY2ARRAY.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/utils/GEN_ARRAY2ARRAY.h b/src/modules/utils/GEN_ARRAY2ARRAY.h
index d63531e..4d2859c 100644
--- a/src/modules/utils/GEN_ARRAY2ARRAY.h
+++ b/src/modules/utils/GEN_ARRAY2ARRAY.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/utils/GEN_ARRAY2VALUES.cpp b/src/modules/utils/GEN_ARRAY2VALUES.cpp
index 509d8f7..7be5a1a 100644
--- a/src/modules/utils/GEN_ARRAY2VALUES.cpp
+++ b/src/modules/utils/GEN_ARRAY2VALUES.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
@@ -31,7 +32,7 @@
const CStringDictionary::TStringId GEN_ARRAY2VALUES::scm_anEventOutputNames[] = { g_nStringIdCNF };
GEN_ARRAY2VALUES::GEN_ARRAY2VALUES(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
- CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_anDataOutputNames(0), m_anDataOutputTypeIds(0), m_anDataInputTypeIds(0), m_anEOWith(0), m_nDOutputs(0), m_ValueTypeID(CStringDictionary::scm_nInvalidStringId){
+ CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_anDataOutputNames(0), m_anDataOutputTypeIds(0), m_anDataInputTypeIds(0), m_anEOWith(0), mDOutputs(0), mValueTypeID(CStringDictionary::scm_nInvalidStringId){
}
GEN_ARRAY2VALUES::~GEN_ARRAY2VALUES(){
@@ -45,7 +46,7 @@
switch (paEIID){
case scm_nEventREQID:
- for(int output_index = 0; output_index < m_nDOutputs; output_index++){
+ for(size_t output_index = 0; output_index < mDOutputs; output_index++) {
//copy input values to array
getDO(static_cast<unsigned int>(output_index))->saveAssign(*(IN_Array()[static_cast<TForteUInt16>(output_index)]));
}
@@ -66,44 +67,44 @@
if(0 != dTypePos){
//there is a number and a data type of inputs within the typename
- m_nDOutputs = static_cast<int>(forte::core::util::strtoul(dNumberPos, 0, 10));
- m_ValueTypeID = CStringDictionary::getInstance().getId(++dTypePos);
+ mDOutputs = static_cast<size_t>(forte::core::util::strtoul(dNumberPos, 0, 10));
+ mValueTypeID = CStringDictionary::getInstance().getId(++dTypePos);
}
else{
- m_ValueTypeID = CStringDictionary::scm_nInvalidStringId;
- m_nDOutputs = 0;
+ mValueTypeID = CStringDictionary::scm_nInvalidStringId;
+ mDOutputs = 0;
}
}
else{
return false;
}
- if(m_ValueTypeID != CStringDictionary::scm_nInvalidStringId && m_nDOutputs >= 2){
+ if(mValueTypeID != CStringDictionary::scm_nInvalidStringId && mDOutputs >= 2){
//create the data outputs
- m_anDataOutputNames = new CStringDictionary::TStringId[m_nDOutputs];
- m_anDataOutputTypeIds = new CStringDictionary::TStringId[m_nDOutputs];
+ m_anDataOutputNames = new CStringDictionary::TStringId[mDOutputs];
+ m_anDataOutputTypeIds = new CStringDictionary::TStringId[mDOutputs];
char doNames[cg_nIdentifierLength] = { "OUT_" };
- for(size_t doIndex = 0; doIndex < m_nDOutputs; ++doIndex){
+ for(size_t doIndex = 0; doIndex < mDOutputs; ++doIndex){
forte_snprintf(&(doNames[4]), 8 - 4, "%i", doIndex + 1);
m_anDataOutputNames[doIndex] = CStringDictionary::getInstance().insert(doNames);
- m_anDataOutputTypeIds[doIndex] = m_ValueTypeID;
+ m_anDataOutputTypeIds[doIndex] = mValueTypeID;
}
//create data input type
m_anDataInputTypeIds = new CStringDictionary::TStringId[3];
m_anDataInputTypeIds[0] = g_nStringIdARRAY;
- m_anDataInputTypeIds[1] = m_nDOutputs;
- m_anDataInputTypeIds[2] = m_ValueTypeID;
+ m_anDataInputTypeIds[1] = static_cast<CStringDictionary::TStringId>(mDOutputs);
+ m_anDataInputTypeIds[2] = mValueTypeID;
//get input with-indices for the data vars
- m_anEOWith = new TDataIOID[m_nDOutputs + 1];
+ m_anEOWith = new TDataIOID[mDOutputs + 1];
//in-withs
- for(size_t out_with = 0; out_with < m_nDOutputs; ++out_with){
+ for(size_t out_with = 0; out_with < mDOutputs; ++out_with){
m_anEOWith[out_with] = static_cast<TDataIOID>(out_with);
}
- m_anEOWith[m_nDOutputs] = scmWithListDelimiter;
+ m_anEOWith[mDOutputs] = scmWithListDelimiter;
//create the interface Specification
paInterfaceSpec.m_nNumEIs = 1;
@@ -117,7 +118,7 @@
paInterfaceSpec.m_nNumDIs = 1;
paInterfaceSpec.m_aunDINames = scm_anDataInputNames;
paInterfaceSpec.m_aunDIDataTypeNames = m_anDataInputTypeIds;
- paInterfaceSpec.m_nNumDOs = static_cast<TForteUInt8>(m_nDOutputs);
+ paInterfaceSpec.m_nNumDOs = static_cast<TForteUInt8>(mDOutputs);
paInterfaceSpec.m_aunDONames = m_anDataOutputNames;
paInterfaceSpec.m_aunDODataTypeNames = m_anDataOutputTypeIds;
return true;
diff --git a/src/modules/utils/GEN_ARRAY2VALUES.h b/src/modules/utils/GEN_ARRAY2VALUES.h
index d77c7de..1150c38 100644
--- a/src/modules/utils/GEN_ARRAY2VALUES.h
+++ b/src/modules/utils/GEN_ARRAY2VALUES.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GbmH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
@@ -42,8 +43,8 @@
static const CStringDictionary::TStringId scm_anEventOutputNames[];
//self-defined members
- int m_nDOutputs;
- CStringDictionary::TStringId m_ValueTypeID;
+ size_t mDOutputs;
+ CStringDictionary::TStringId mValueTypeID;
virtual void executeEvent(int paEIID);
virtual bool createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec &paInterfaceSpec);
diff --git a/src/modules/utils/GEN_CSV_WRITER.cpp b/src/modules/utils/GEN_CSV_WRITER.cpp
index 1cba957..1f2b74a 100644
--- a/src/modules/utils/GEN_CSV_WRITER.cpp
+++ b/src/modules/utils/GEN_CSV_WRITER.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2015 ACIN, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
@@ -17,6 +18,7 @@
#endif
#include <string.h>
#include <errno.h>
+#include <devlog.h>
DEFINE_GENERIC_FIRMWARE_FB(GEN_CSV_WRITER, g_nStringIdGEN_CSV_WRITER);
@@ -31,43 +33,44 @@
const TForteInt16 GEN_CSV_WRITER::scm_anEOWithIndexes[] = { 0, 3, -1 };
const CStringDictionary::TStringId GEN_CSV_WRITER::scm_anEventOutputNames[] = { g_nStringIdINITO, g_nStringIdCNF };
-void GEN_CSV_WRITER::executeEvent(int paEIID){
- switch (paEIID){
- case scm_nEventINITID:
- if(true == QI()){
- openCSVFile();
- }
- else{
- closeCSVFile();
- }
- sendOutputEvent(scm_nEventINITOID);
- break;
- case scm_nEventREQID:
- QO() = QI();
- if(true == QI()){
- writeCSVFileLine();
- }
- sendOutputEvent(scm_nEventREQID);
- break;
+
+const char * const GEN_CSV_WRITER::scmOK = "OK";
+const char * const GEN_CSV_WRITER::scmFileAlreadyOpened = "File already opened";
+const char * const GEN_CSV_WRITER::scmFileNotOpened = "File not opened";
+
+void GEN_CSV_WRITER::executeEvent(int paEIID) {
+ if(scm_nEventINITID == paEIID) {
+ if(QI()) {
+ openCSVFile();
+ } else {
+ closeCSVFile();
+ }
+ sendOutputEvent(scm_nEventINITOID);
+ } else if(scm_nEventREQID == paEIID) {
+ QO() = QI();
+ if(QI()) {
+ writeCSVFileLine();
+ }
+ sendOutputEvent(scm_nEventCNFID);
}
}
GEN_CSV_WRITER::GEN_CSV_WRITER(const CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
- CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), m_pstCSVFile(0), m_anDataInputNames(0), m_anDataInputTypeIds(0), m_anEIWith(0){
+ CGenFunctionBlock<CFunctionBlock>(paSrcRes, paInstanceNameId), mCSVFile(0), m_anDataInputNames(0), m_anDataInputTypeIds(0), m_anEIWith(0){
}
GEN_CSV_WRITER::~GEN_CSV_WRITER(){
delete[] m_anDataInputNames;
delete[] m_anDataInputTypeIds;
delete[] m_anEIWith;
+ closeCSVFile();
}
bool GEN_CSV_WRITER::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec &paInterfaceSpec) {
const char *acPos = strrchr(paConfigString, '_');
if(0 != acPos){
acPos++;
- paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(forte::core::util::strtoul(acPos,0,10));
- paInterfaceSpec.m_nNumDIs += 2U; // we have in addition to the SDs a QI and FILE_NAME data inputs
+ paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(forte::core::util::strtoul(acPos, 0, 10) + 2); // we have in addition to the SDs a QI and FILE_NAME data inputs
m_anDataInputNames = new CStringDictionary::TStringId[paInterfaceSpec.m_nNumDIs];
m_anDataInputTypeIds = new CStringDictionary::TStringId[paInterfaceSpec.m_nNumDIs];
@@ -111,49 +114,50 @@
return false;
}
-void GEN_CSV_WRITER::openCSVFile(){
+void GEN_CSV_WRITER::openCSVFile() {
QO() = false;
- if(0 == m_pstCSVFile){
- m_pstCSVFile = fopen(FILE_NAME().getValue(), "w+");
- if(0 != m_pstCSVFile){
- STATUS() = "OK";
+ if(0 == mCSVFile) {
+ mCSVFile = fopen(FILE_NAME().getValue(), "w+");
+ if(0 != mCSVFile) {
QO() = true;
- }
- else{
+ STATUS() = scmOK;
+ DEVLOG_INFO("[GEN_CSV_WRITER]: File %s successfully opened\n", FILE_NAME().getValue());
+ } else {
STATUS() = strerror(errno);
+ DEVLOG_ERROR("[GEN_CSV_WRITER]: Couldn't open file %s. Error: %s\n", FILE_NAME().getValue(), STATUS().getValue());
}
- }
- else{
- STATUS() = "File already open";
+ } else {
+ STATUS() = scmFileAlreadyOpened;
+ DEVLOG_ERROR("[GEN_CSV_WRITER]: Can't open file %s since it is already opened\n", FILE_NAME().getValue());
}
}
-void GEN_CSV_WRITER::closeCSVFile(){
+void GEN_CSV_WRITER::closeCSVFile() {
QO() = false;
- if(0 != m_pstCSVFile){
- if(0 == fclose(m_pstCSVFile)){
- STATUS() = "OK";
- }
- else{
+ if(0 != mCSVFile) {
+ if(0 == fclose(mCSVFile)) {
+ STATUS() = scmOK;
+ DEVLOG_INFO("[GEN_CSV_WRITER]: File %s successfully closed\n", FILE_NAME().getValue());
+ } else {
STATUS() = strerror(errno);
+ DEVLOG_ERROR("[GEN_CSV_WRITER]: Couldn't close file %s. Error: %s\n", FILE_NAME().getValue(), STATUS().getValue());
}
- m_pstCSVFile = 0;
+ mCSVFile = 0;
}
}
-void GEN_CSV_WRITER::writeCSVFileLine(){
- if(0 != m_pstCSVFile){
- char acBuffer[100];
- for(int i = 2; i < m_pstInterfaceSpec->m_nNumDIs; i++){
- int nLen = getDI(i)->toString(acBuffer, 100);
- fwrite(acBuffer, 1, nLen, m_pstCSVFile);
- fwrite("; ", 1, 2, m_pstCSVFile);
+void GEN_CSV_WRITER::writeCSVFileLine() {
+ if(0 != mCSVFile) {
+ char acBuffer[scmWriteBufferSize];
+ for(int i = 2; i < m_pstInterfaceSpec->m_nNumDIs; i++) {
+ int nLen = getDI(i)->toString(acBuffer, scmWriteBufferSize);
+ fwrite(acBuffer, 1, nLen, mCSVFile);
+ fwrite("; ", 1, 2, mCSVFile);
}
- fwrite("\n", 1, 1, m_pstCSVFile);
- }
- else{
+ fwrite("\n", 1, 1, mCSVFile);
+ } else {
QO() = false;
- STATUS() = "File not opened";
+ STATUS() = scmFileNotOpened;
+ DEVLOG_ERROR("[GEN_CSV_WRITER]: Can't write to file %s since it is not opened\n", FILE_NAME().getValue());
}
}
-
diff --git a/src/modules/utils/GEN_CSV_WRITER.h b/src/modules/utils/GEN_CSV_WRITER.h
index 633e84d..d9ec2f1 100644
--- a/src/modules/utils/GEN_CSV_WRITER.h
+++ b/src/modules/utils/GEN_CSV_WRITER.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2015 ACIN, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger
@@ -60,16 +61,24 @@
virtual ~GEN_CSV_WRITER();
private:
+
void openCSVFile();
void closeCSVFile();
void writeCSVFileLine();
- FILE *m_pstCSVFile;
+ FILE *mCSVFile;
CStringDictionary::TStringId *m_anDataInputNames;
CStringDictionary::TStringId *m_anDataInputTypeIds;
TDataIOID *m_anEIWith;
+
+ static const char * const scmOK;
+ static const char * const scmFileAlreadyOpened;
+ static const char * const scmFileNotOpened;
+
+ static const size_t scmWriteBufferSize = 100;
+
};
#endif //_GEN_CSV_WRITER_H_
diff --git a/src/modules/utils/GEN_F_MUX.cpp b/src/modules/utils/GEN_F_MUX.cpp
index a522aad..55b1416 100644
--- a/src/modules/utils/GEN_F_MUX.cpp
+++ b/src/modules/utils/GEN_F_MUX.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2013 Profactor GmbH, ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
@@ -34,10 +35,10 @@
m_anEIWith(0),
m_anEOWithIndexes(0),
m_anEOWith(0),
- m_nEInputs(0),
- m_nEOutputs(0),
- m_nDInputs(0),
- m_nDOutputs(0){
+ mEInputs(0),
+ mEOutputs(0),
+ mDInputs(0),
+ mDOutputs(0){
}
GEN_F_MUX::~GEN_F_MUX(){
@@ -54,15 +55,15 @@
void GEN_F_MUX::executeEvent(int paEIID){
- if(-1 < paEIID && static_cast<unsigned int>(paEIID) < m_nEInputs ){
+ if(-1 < paEIID && static_cast<size_t>(paEIID) < mEInputs) {
- int startIndex = paEIID * m_nDOutputs;
+ size_t startIndex = paEIID * mDOutputs;
bool status = true;
- for(int input_index = startIndex, output_index = 2; input_index < startIndex + static_cast<int>(m_nDOutputs); input_index++, output_index++){
+ for(size_t input_index = startIndex, output_index = 2; input_index < startIndex + mDOutputs; input_index++, output_index++) {
- CIEC_ANY *p_dataInput = getDI(input_index);
- CIEC_ANY *p_dataOutput = getDO(output_index);
+ CIEC_ANY *p_dataInput = getDI(static_cast<unsigned int>(input_index));
+ CIEC_ANY *p_dataOutput = getDO(static_cast<unsigned int>(output_index));
// check whether datatypes match
if(p_dataInput != 0 && p_dataOutput != 0 && p_dataInput->getDataTypeID() == p_dataOutput->getDataTypeID()){
@@ -144,15 +145,15 @@
}
else{
//set the data and event port numbers
- m_nEInputs = static_cast<unsigned int>(forte::core::util::strtoul(paramEI,0,10));
- m_nDOutputs = static_cast<unsigned int>(forte::core::util::strtoul(paramDO,0,10));
- m_nEOutputs = 1;
- m_nDInputs = m_nEInputs * m_nDOutputs;
+ mEInputs = static_cast<size_t>(forte::core::util::strtoul(paramEI, 0, 10));
+ mDOutputs = static_cast<size_t>(forte::core::util::strtoul(paramDO, 0, 10));
+ mEOutputs = 1;
+ mDInputs = mEInputs * mDOutputs;
- DEVLOG_DEBUG("EIs: %d; DIs: %d; EOs: %d; DOs: %d \n", m_nEInputs, m_nDInputs, m_nEOutputs, m_nDOutputs);
+ DEVLOG_DEBUG("EIs: %d; DIs: %d; EOs: %d; DOs: %d \n", mEInputs, mDInputs, mEOutputs, mDOutputs);
//return with error if there are not enough event inputs (use common merge FB instead!!)
- if(m_nEInputs < 2){
+ if(mEInputs < 2){
DEVLOG_ERROR("At least 2 Event Inputs need to be set\n");
return 0;
}
@@ -160,30 +161,30 @@
//now the number of needed eventInputs and dataOutputs are available in the integer array
//create the eventInputs
- if(m_nEInputs < CFunctionBlock::scm_nMaxInterfaceEvents && m_nDInputs < CFunctionBlock::scm_nMaxInterfaceEvents){
+ if(mEInputs < CFunctionBlock::scm_nMaxInterfaceEvents && mDInputs < CFunctionBlock::scm_nMaxInterfaceEvents){
//create the eventInputs
- m_anEventInputNames = new CStringDictionary::TStringId[m_nEInputs];
+ m_anEventInputNames = new CStringDictionary::TStringId[mEInputs];
- generateGenericInterfacePointNameArray("EI", m_anEventInputNames, m_nEInputs);
+ generateGenericInterfacePointNameArray("EI", m_anEventInputNames, mEInputs);
//create the data inputs
- m_anDataInputNames = new CStringDictionary::TStringId[m_nDInputs];
- m_anDataInputTypeIds = new CStringDictionary::TStringId[m_nDInputs];
+ m_anDataInputNames = new CStringDictionary::TStringId[mDInputs];
+ m_anDataInputTypeIds = new CStringDictionary::TStringId[mDInputs];
char diNames[cg_nIdentifierLength] = { "IN_" };
- int di_posIndex = 0;
- for(unsigned int ei = 0; ei < m_nEInputs; ei = ei + 1){
+ size_t di_posIndex = 0;
+ for(size_t ei = 0; ei < mEInputs; ei++) {
- for(unsigned int di = 0; di < m_nDOutputs; di = di + 1){
+ for(size_t di = 0; di < mDOutputs; di++) {
forte_snprintf(&(diNames[3]), 11 - 3, "%u_%u", ei + 1, di + 1);
- di_posIndex = ei * m_nDOutputs + di;
+ di_posIndex = ei * mDOutputs + di;
m_anDataInputNames[di_posIndex] = CStringDictionary::getInstance().insert(diNames);
m_anDataInputTypeIds[di_posIndex] = g_nStringIdANY;
}
}
//create the data outputs
- m_anDataOutputNames = new CStringDictionary::TStringId[m_nDOutputs + 2];
- m_anDataOutputTypeIds = new CStringDictionary::TStringId[m_nDOutputs + 2];
+ m_anDataOutputNames = new CStringDictionary::TStringId[mDOutputs + 2];
+ m_anDataOutputTypeIds = new CStringDictionary::TStringId[mDOutputs + 2];
//data outputs for status and QO
m_anDataOutputNames[0] = CStringDictionary::getInstance().insert("QO");
@@ -191,19 +192,19 @@
m_anDataOutputNames[1] = CStringDictionary::getInstance().insert("STATUS");
m_anDataOutputTypeIds[1] = g_nStringIdWSTRING;
- generateGenericDataPointArrays("OUT_", &(m_anDataOutputTypeIds[2]), &(m_anDataOutputNames[2]), m_nDOutputs);
+ generateGenericDataPointArrays("OUT_", &(m_anDataOutputTypeIds[2]), &(m_anDataOutputNames[2]), mDOutputs);
//now create the WITH constructs...
//first the With-Indexes Events
- m_anEIWithIndexes = new TForteInt16[m_nEInputs];
+ m_anEIWithIndexes = new TForteInt16[mEInputs];
m_anEOWithIndexes = new TForteInt16[2]; //contains terminating -1 value
- for(unsigned int ei_index = 0; ei_index < m_nEInputs; ei_index = ei_index + 1){
+ for(size_t ei_index = 0; ei_index < mEInputs; ei_index++) {
if(ei_index == 0){
m_anEIWithIndexes[ei_index] = 0;
}
else{
- m_anEIWithIndexes[ei_index] = static_cast<TForteInt16>(ei_index * (m_nDOutputs + 1));
+ m_anEIWithIndexes[ei_index] = static_cast<TForteInt16>(ei_index * (mDOutputs + 1));
}
}
@@ -211,15 +212,15 @@
m_anEOWithIndexes[1] = -1;
//second the With-Indexes for the data variables
- m_anEIWith = new TDataIOID[m_nDInputs + m_nEInputs]; //for inputs per event + '255' separators between withs
- m_anEOWith = new TDataIOID[m_nDOutputs + 2 + 1]; //for outputs only one '255' separator since one output event is needed + 2 for QO and STATUS
+ m_anEIWith = new TDataIOID[mDInputs + mEInputs]; //for inputs per event + '255' separators between withs
+ m_anEOWith = new TDataIOID[mDOutputs + 2 + 1]; //for outputs only one '255' separator since one output event is needed + 2 for QO and STATUS
//in-withs
int withListIndex = 0;
int dataIndex = 0;
- for(unsigned int in_block = 0; in_block < m_nEInputs; in_block = in_block + 1){
+ for(size_t in_block = 0; in_block < mEInputs; in_block++) {
- for(unsigned int in_with = 0; in_with < m_nDOutputs; in_with = in_with + 1){
+ for(size_t in_with = 0; in_with < mDOutputs; in_with++) {
m_anEIWith[withListIndex] = static_cast<TDataIOID>(dataIndex);
withListIndex++;
dataIndex++;
@@ -234,25 +235,25 @@
m_anEOWith[0] = 0; //for QO and STATUS
m_anEOWith[1] = 1;
- for(unsigned int out_with = 2; out_with < m_nDOutputs + 2; out_with = out_with + 1){
+ for(unsigned int out_with = 2; out_with < mDOutputs + 2; out_with++) {
m_anEOWith[out_with] = static_cast<TForteUInt8>(out_with);
}
//set '255' separator
- m_anEOWith[m_nDOutputs + 2] = scmWithListDelimiter;
+ m_anEOWith[mDOutputs + 2] = scmWithListDelimiter;
//create the interface Specification
- paInterfaceSpec.m_nNumEIs = static_cast<TForteUInt8>(m_nEInputs);
+ paInterfaceSpec.m_nNumEIs = static_cast<TForteUInt8>(mEInputs);
paInterfaceSpec.m_aunEINames = m_anEventInputNames;
paInterfaceSpec.m_anEIWith = m_anEIWith;
paInterfaceSpec.m_anEIWithIndexes = m_anEIWithIndexes;
- paInterfaceSpec.m_nNumEOs = static_cast<TForteUInt8>(m_nEOutputs);
+ paInterfaceSpec.m_nNumEOs = static_cast<TForteUInt8>(mEOutputs);
paInterfaceSpec.m_aunEONames = scm_anEventOutputNames;
paInterfaceSpec.m_anEOWith = m_anEOWith;
paInterfaceSpec.m_anEOWithIndexes = m_anEOWithIndexes;
- paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(m_nDInputs);
+ paInterfaceSpec.m_nNumDIs = static_cast<TForteUInt8>(mDInputs);
paInterfaceSpec.m_aunDINames = m_anDataInputNames;
paInterfaceSpec.m_aunDIDataTypeNames = m_anDataInputTypeIds;
- paInterfaceSpec.m_nNumDOs = static_cast<TForteUInt8>(m_nDOutputs + 2);
+ paInterfaceSpec.m_nNumDOs = static_cast<TForteUInt8>(mDOutputs + 2);
paInterfaceSpec.m_aunDONames = m_anDataOutputNames;
paInterfaceSpec.m_aunDODataTypeNames = m_anDataOutputTypeIds;
return true;
diff --git a/src/modules/utils/GEN_F_MUX.h b/src/modules/utils/GEN_F_MUX.h
index 5428734..a22dd1f 100644
--- a/src/modules/utils/GEN_F_MUX.h
+++ b/src/modules/utils/GEN_F_MUX.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2012 - 2015 Profactor GmbH, ACIN, fortiss Gmbh
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Monika Wenger, Alois Zoitl
@@ -38,10 +39,10 @@
TDataIOID *m_anEOWith;
//self-defined members
- unsigned int m_nEInputs;
- unsigned int m_nEOutputs;
- unsigned int m_nDInputs;
- unsigned int m_nDOutputs;
+ size_t mEInputs;
+ size_t mEOutputs;
+ size_t mDInputs;
+ size_t mDOutputs;
virtual void executeEvent(int paEIID);
virtual bool createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec &paInterfaceSpec);
diff --git a/src/modules/utils/GEN_VALUES2ARRAY.cpp b/src/modules/utils/GEN_VALUES2ARRAY.cpp
index d5ddd71..415c78c 100644
--- a/src/modules/utils/GEN_VALUES2ARRAY.cpp
+++ b/src/modules/utils/GEN_VALUES2ARRAY.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/utils/GEN_VALUES2ARRAY.h b/src/modules/utils/GEN_VALUES2ARRAY.h
index d8ede60..8e39813 100644
--- a/src/modules/utils/GEN_VALUES2ARRAY.h
+++ b/src/modules/utils/GEN_VALUES2ARRAY.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch, Alois Zoitl
diff --git a/src/modules/utils/GET_AT_INDEX.cpp b/src/modules/utils/GET_AT_INDEX.cpp
index 503a12b..df97c3a 100644
--- a/src/modules/utils/GET_AT_INDEX.cpp
+++ b/src/modules/utils/GET_AT_INDEX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/utils/GET_AT_INDEX.h b/src/modules/utils/GET_AT_INDEX.h
index 4001b7c..ba6cecc 100644
--- a/src/modules/utils/GET_AT_INDEX.h
+++ b/src/modules/utils/GET_AT_INDEX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/utils/GET_STRUCT_VALUE.cpp b/src/modules/utils/GET_STRUCT_VALUE.cpp
new file mode 100644
index 0000000..3de23ad
--- /dev/null
+++ b/src/modules/utils/GET_STRUCT_VALUE.cpp
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "GET_STRUCT_VALUE.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "GET_STRUCT_VALUE_gen.cpp"
+#endif
+
+#include <arch/devlog.h>
+
+DEFINE_FIRMWARE_FB(FORTE_GET_STRUCT_VALUE, g_nStringIdGET_STRUCT_VALUE)
+
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anDataInputNames[] = { g_nStringIdin_struct, g_nStringIdmember };
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anDataInputTypeIds[] = { g_nStringIdANY, g_nStringIdSTRING };
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anDataOutputNames[] = { g_nStringIdQO, g_nStringIdoutput };
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anDataOutputTypeIds[] = { g_nStringIdBOOL, g_nStringIdANY };
+const TForteInt16 FORTE_GET_STRUCT_VALUE::scm_anEIWithIndexes[] = { 0 };
+const TDataIOID FORTE_GET_STRUCT_VALUE::scm_anEIWith[] = { 1, 0, 255 };
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anEventInputNames[] = { g_nStringIdREQ };
+const TDataIOID FORTE_GET_STRUCT_VALUE::scm_anEOWith[] = { 0, 1, 255 };
+const TForteInt16 FORTE_GET_STRUCT_VALUE::scm_anEOWithIndexes[] = { 0, -1 };
+const CStringDictionary::TStringId FORTE_GET_STRUCT_VALUE::scm_anEventOutputNames[] = { g_nStringIdCNF };
+const SFBInterfaceSpec FORTE_GET_STRUCT_VALUE::scm_stFBInterfaceSpec = { 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes, 1, scm_anEventOutputNames,
+ scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds, 2, scm_anDataOutputNames, scm_anDataOutputTypeIds, 0, 0 };
+
+CIEC_ANY* FORTE_GET_STRUCT_VALUE::getMemberFromName(CIEC_STRUCT* paWhereToLook, char* paMemberName) {
+ CIEC_ANY* retVal = 0;
+
+ CStringDictionary::TStringId elementNameId = CStringDictionary::getInstance().getId(paMemberName);
+ if(CStringDictionary::scm_nInvalidStringId != elementNameId) {
+ retVal = paWhereToLook->getMemberNamed(elementNameId);
+ } else {
+ DEVLOG_ERROR("[GET_STRUCT_VALUE]: In instance %s, member %s was not found\n", getInstanceName(), paMemberName);
+ }
+
+ return retVal;
+}
+
+CIEC_ANY* FORTE_GET_STRUCT_VALUE::lookForMember(CIEC_STRUCT* paWhereToLook, char* paMemberName) {
+ CIEC_ANY* retVal = 0;
+
+ char* startOfName = paMemberName;
+ bool errorOcurred = false;
+
+ while('\0' != *paMemberName) {
+ if('.' == *paMemberName) {
+ *paMemberName = '\0';
+
+ CIEC_ANY *resultMember = getMemberFromName(paWhereToLook, startOfName);
+
+ if(0 != resultMember) {
+ if(CIEC_ANY::e_STRUCT == resultMember->getDataTypeID()) {
+ retVal = lookForMember(static_cast<CIEC_STRUCT*>(resultMember), paMemberName + 1);
+ if(0 == retVal) {
+ errorOcurred = true;
+ }
+ } else {
+ DEVLOG_ERROR("[GET_STRUCT_VALUE]: In instance %s, the non-struct member %s is followed by a sub-member which is not allowed\n", getInstanceName(),
+ startOfName);
+ errorOcurred = true;
+ }
+ } else {
+ DEVLOG_ERROR("[GET_STRUCT_VALUE]: In instance %s, the member %s in structure %s doesn't exist\n", getInstanceName(), startOfName,
+ CStringDictionary::getInstance().get(paWhereToLook->getStructTypeNameID()));
+ errorOcurred = true;
+ }
+ }
+
+ if(errorOcurred || 0 != retVal) {
+ break;
+ }
+ paMemberName++;
+ }
+
+ if(!errorOcurred && 0 == retVal) {
+ retVal = getMemberFromName(paWhereToLook, startOfName);
+ }
+
+ return retVal;
+}
+
+void FORTE_GET_STRUCT_VALUE::executeEvent(int paEIID) {
+ if(scm_nEventREQID == paEIID) {
+ QO() = 0;
+ if(CIEC_ANY::e_STRUCT == in_struct().getDataTypeID()) {
+ CIEC_STRING copyOfMember = member();
+ CIEC_ANY *foundMember = lookForMember(static_cast<CIEC_STRUCT*>(&in_struct()), copyOfMember.getValue());
+ if(0 != foundMember) {
+ if(foundMember->getDataTypeID() == output().getDataTypeID()) {
+ output().setValue(*foundMember);
+ QO() = 1;
+ } else {
+ DEVLOG_ERROR("[GET_STRUCT_VALUE]: In instance %s, the member %s was found but it doesn't match the output type %d\n",
+ getInstanceName(), member().getValue(), output().getDataTypeID());
+ }
+ } //error logging was done already in the internal function
+ } else {
+ DEVLOG_ERROR("[GET_STRUCT_VALUE]: In instance %s, the input structure is not of type structure but of type %d\n", getInstanceName(),
+ in_struct().getDataTypeID());
+ }
+
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
diff --git a/src/modules/utils/GET_STRUCT_VALUE.h b/src/modules/utils/GET_STRUCT_VALUE.h
new file mode 100644
index 0000000..5bdcca3
--- /dev/null
+++ b/src/modules/utils/GET_STRUCT_VALUE.h
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _GET_STRUCT_VALUE_H_
+#define _GET_STRUCT_VALUE_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_string.h>
+#include <forte_any.h>
+
+class FORTE_GET_STRUCT_VALUE : public CFunctionBlock {
+ DECLARE_FIRMWARE_FB(FORTE_GET_STRUCT_VALUE)
+
+ public:
+ FUNCTION_BLOCK_CTOR(FORTE_GET_STRUCT_VALUE){};
+
+ virtual ~FORTE_GET_STRUCT_VALUE() {};
+
+ private:
+
+ CIEC_ANY &in_struct() {
+ return *static_cast<CIEC_ANY*>(getDI(0));
+ };
+
+ CIEC_STRING &member() {
+ return *static_cast<CIEC_STRING*>(getDI(1));
+ };
+
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_ANY &output() {
+ return *static_cast<CIEC_ANY*>(getDO(1));
+ };
+
+ void executeEvent(int pa_nEIID);
+
+ CIEC_ANY* getMemberFromName(CIEC_STRUCT* paWhereToLook, char* paMemberName);
+
+ CIEC_ANY* lookForMember(CIEC_STRUCT* paWhereToLook, char* paMemberName);
+
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(1, 2, 2, 0);
+};
+
+#endif //_GET_STRUCT_VALUE_H_
+
diff --git a/src/modules/utils/OUT_ANY_CONSOLE.cpp b/src/modules/utils/OUT_ANY_CONSOLE.cpp
index 55e65a0..b7e86e0 100644
--- a/src/modules/utils/OUT_ANY_CONSOLE.cpp
+++ b/src/modules/utils/OUT_ANY_CONSOLE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 AIT, ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Alois Zoitl, Matthias Plasch
diff --git a/src/modules/utils/OUT_ANY_CONSOLE.h b/src/modules/utils/OUT_ANY_CONSOLE.h
index 01b9d45..0a4a687 100644
--- a/src/modules/utils/OUT_ANY_CONSOLE.h
+++ b/src/modules/utils/OUT_ANY_CONSOLE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 AIT, ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Thomas Strasser, Monika Wenger, Matthias Plasch
diff --git a/src/modules/utils/SET_AT_INDEX.cpp b/src/modules/utils/SET_AT_INDEX.cpp
index 302cf11..4950fa7 100644
--- a/src/modules/utils/SET_AT_INDEX.cpp
+++ b/src/modules/utils/SET_AT_INDEX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/utils/SET_AT_INDEX.h b/src/modules/utils/SET_AT_INDEX.h
index bdb7429..51338ad 100644
--- a/src/modules/utils/SET_AT_INDEX.h
+++ b/src/modules/utils/SET_AT_INDEX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch
diff --git a/src/modules/utils/STEST_END.cpp b/src/modules/utils/STEST_END.cpp
index 77364a2..5c08052 100644
--- a/src/modules/utils/STEST_END.cpp
+++ b/src/modules/utils/STEST_END.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2015 Profactor GmbH, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Michael Hofmann, Alois Zoitl
@@ -14,6 +15,7 @@
#include "STEST_END_gen.cpp"
#endif
#include "../../stdfblib/ita/RMT_DEV.h"
+#include <forte_thread.h>
DEFINE_FIRMWARE_FB(FORTE_STEST_END, g_nStringIdSTEST_END)
@@ -29,6 +31,7 @@
void FORTE_STEST_END::executeEvent(int pa_nEIID){
if(scm_nEventREQID == pa_nEIID){
+ CThread::sleepThread(250); //avoid killing the device before it was properly started (DEV_MGR still was initializing the ipCommlayer when it was killed)
getResource().getDevice().changeFBExecutionState(cg_nMGM_CMD_Kill);
}
}
diff --git a/src/modules/utils/STEST_END.h b/src/modules/utils/STEST_END.h
index e114dba..dd8ea1a 100644
--- a/src/modules/utils/STEST_END.h
+++ b/src/modules/utils/STEST_END.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2015 Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Michael Hofmann, Alois Zoitl
diff --git a/src/modules/utils/TEST_CONDITION.cpp b/src/modules/utils/TEST_CONDITION.cpp
new file mode 100644
index 0000000..17aa847
--- /dev/null
+++ b/src/modules/utils/TEST_CONDITION.cpp
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#include "TEST_CONDITION.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "TEST_CONDITION_gen.cpp"
+#endif
+
+#include <devlog.h>
+#include <resource.h>
+#include <criticalregion.h>
+
+unsigned int FORTE_TEST_CONDITION::smExecutedTests = 0;
+unsigned int FORTE_TEST_CONDITION::smFailedTests = 0;
+
+bool FORTE_TEST_CONDITION::smfinalReportPrinted = false;
+
+DEFINE_FIRMWARE_FB(FORTE_TEST_CONDITION, g_nStringIdTEST_CONDITION)
+
+const CStringDictionary::TStringId FORTE_TEST_CONDITION::scm_anDataInputNames[] = {g_nStringIdcheck};
+
+const CStringDictionary::TStringId FORTE_TEST_CONDITION::scm_anDataInputTypeIds[] = {g_nStringIdBOOL};
+
+const TForteInt16 FORTE_TEST_CONDITION::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_TEST_CONDITION::scm_anEIWith[] = {0, 255};
+const CStringDictionary::TStringId FORTE_TEST_CONDITION::scm_anEventInputNames[] = {g_nStringIdREQ};
+
+const TForteInt16 FORTE_TEST_CONDITION::scm_anEOWithIndexes[] = {-1, -1};
+const CStringDictionary::TStringId FORTE_TEST_CONDITION::scm_anEventOutputNames[] = {g_nStringIdCNF};
+
+const SFBInterfaceSpec FORTE_TEST_CONDITION::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, 0, 0, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 0, 0, 0,
+ 0, 0
+};
+
+FORTE_TEST_CONDITION::~FORTE_TEST_CONDITION() {
+ CCriticalRegion finalReportRegion(mFinalReportMutex);
+ if(!smfinalReportPrinted) {
+ smfinalReportPrinted = true;
+ DEVLOG_INFO(" ------------------------------------------------------------------------------\n");
+ DEVLOG_INFO(" ------------------------ [TEST_CONDITION FINAL REPORT] -----------------------\n");
+ if(smFailedTests) {
+ DEVLOG_ERROR(" ------------------------ %u tests executed, %u failed -----------------------\n", smExecutedTests, smFailedTests);
+ } else {
+ DEVLOG_INFO(" ------------------------ %u tests executed, %u failed -----------------------\n", smExecutedTests, smFailedTests);
+ }
+ DEVLOG_INFO(" ------------------------------------------------------------------------------\n");
+ }
+}
+
+
+void FORTE_TEST_CONDITION::executeEvent(int paEIID) {
+ if(scm_nEventREQID == paEIID) {
+ smExecutedTests++;
+ if(check()) {
+ DEVLOG_INFO(" ------------------------------ [TEST_CONDITION_PASSED] %s.%s passed\n", getResource().getInstanceName(), getInstanceName());
+ } else {
+ DEVLOG_ERROR("------------------------------ [TEST_CONDITION_FAILED] %s.%s failed ------------------------------\n", getResource().getInstanceName(),
+ getInstanceName());
+ smFailedTests++;
+ }
+ sendOutputEvent(scm_nEventCNFID);
+ }
+}
+
diff --git a/src/modules/utils/TEST_CONDITION.h b/src/modules/utils/TEST_CONDITION.h
new file mode 100644
index 0000000..660ea4c
--- /dev/null
+++ b/src/modules/utils/TEST_CONDITION.h
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2019, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial implementation
+ *******************************************************************************/
+
+#ifndef _TEST_CONDITION_H_
+#define _TEST_CONDITION_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_sync.h>
+
+class FORTE_TEST_CONDITION: public CFunctionBlock{
+ DECLARE_FIRMWARE_FB(FORTE_TEST_CONDITION)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_BOOL &check() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ static const TEventID scm_nEventREQID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventCNFID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ static unsigned int smExecutedTests;
+ static unsigned int smFailedTests;
+
+ static bool smfinalReportPrinted;
+
+
+ FORTE_FB_DATA_ARRAY(1, 1, 0, 0);
+
+ void executeEvent(int pa_nEIID);
+
+ CSyncObject mFinalReportMutex;
+
+public:
+ FUNCTION_BLOCK_CTOR(FORTE_TEST_CONDITION){
+ };
+
+ virtual ~FORTE_TEST_CONDITION();
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/utils/tests/CMakeLists.txt b/src/modules/utils/tests/CMakeLists.txt
deleted file mode 100644
index 99247c3..0000000
--- a/src/modules/utils/tests/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-#############################################################################
-# FORTE UTILITY FBs
-#############################################################################
-forte_add_test(Test_utils_1 test_utils_1.fboot 5)
-set_tests_properties (Test_utils_1 PROPERTIES WILL_FAIL true)
diff --git a/src/modules/utils/tests/test_utils_1.fboot b/src/modules/utils/tests/test_utils_1.fboot
deleted file mode 100644
index 63a021a..0000000
--- a/src/modules/utils/tests/test_utils_1.fboot
+++ /dev/null
@@ -1,22 +0,0 @@
-;<Request ID="0" Action="CREATE"><FB Name="EMB_RES" Type="EMB_RES" /></Request>
-EMB_RES;<Request ID="1" Action="CREATE"><FB Name="E_RESTART_1" Type="E_RESTART" /></Request>
-EMB_RES;<Request ID="2" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
-EMB_RES;<Request ID="3" Action="WRITE"><Connection Source="false" Destination="BOOL2BOOL.IN" /></Request>
-EMB_RES;<Request ID="4" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
-EMB_RES;<Request ID="5" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_1" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_1.QI" /></Request>
-EMB_RES;<Request ID="7" Action="WRITE"><Connection Source="ERROR: T" Destination="OUT_ANY_CONSOLE_1.LABEL" /></Request>
-EMB_RES;<Request ID="8" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_0" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="9" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_0.QI" /></Request>
-EMB_RES;<Request ID="10" Action="WRITE"><Connection Source="Done" Destination="OUT_ANY_CONSOLE_0.LABEL" /></Request>
-EMB_RES;<Request ID="11" Action="CREATE"><FB Name="STEST_END_0" Type="STEST_END" /></Request>
-EMB_RES;<Request ID="12" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="E_SWITCH.EI" /></Request>
-EMB_RES;<Request ID="13" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="OUT_ANY_CONSOLE_0.REQ" /></Request>
-EMB_RES;<Request ID="14" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_0.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="15" Action="CREATE"><Connection Source="E_RESTART_1.COLD" Destination="BOOL2BOOL.REQ" /></Request>
-EMB_RES;<Request ID="16" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="OUT_ANY_CONSOLE_1.REQ" /></Request>
-EMB_RES;<Request ID="17" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_1.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="18" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="E_SWITCH.G" /></Request>
-EMB_RES;<Request ID="19" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_1.IN" /></Request>
-EMB_RES;<Request ID="20" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_0.IN" /></Request>
-EMB_RES;<Request ID="21" Action="START"/>
diff --git a/src/modules/wagokbus/CMakeLists.txt b/src/modules/wagokbus/CMakeLists.txt
index 6060506..9599506 100644
--- a/src/modules/wagokbus/CMakeLists.txt
+++ b/src/modules/wagokbus/CMakeLists.txt
@@ -1,49 +1,54 @@
#*******************************************************************************
-# * Copyright (c) 2016 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Milan Vathoopan, Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2016 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Milan Vathoopan, Alois Zoitl - initial API and implementation and/or initial documentation
+# * Jose Cabral - Add modular IOs
# *******************************************************************************/
#############################################################################
# WAGO KBUS SIFBs
#############################################################################
forte_add_module(WagoKbus "Wago Kbus interface")
+
if(FORTE_MODULE_WagoKbus)
+ if("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
-forte_add_handler(WagoPFCProcessInterface::CKBusHandler processinterface)
-
-if("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
-
-##All Wago depedencies are added here
- forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
- forte_add_sourcefile_hcpp(../../stdfblib/io/IX)
- forte_add_sourcefile_hcpp( ../../stdfblib/io/QX)
- forte_add_sourcefile_hcpp( ../../stdfblib/io/QW)
- forte_add_sourcefile_hcpp( ../../stdfblib/io/IW)
- forte_add_sourcefile_hcpp(processinterface)
- forte_add_link_flags("-Wall")
-
- SET(FORTE_WAGO_INCLUDE_DIR "" CACHE STRING "Path where the include for wago is found")
- SET(FORTE_WAGO_LIB_DIR "" CACHE STRING "Path where the libraries for wago is found")
-
- forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR})
- forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR}/dal)
- forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR}/OsLinux)
- forte_add_link_directories(${FORTE_WAGO_LIB_DIR})
+ # All Wago depedencies are added here
+ if(FORTE_IO)
+ add_subdirectory(modular)
+ message("Building New Modular wago IOs")
+ else(FORTE_IO)
+ message("Building Old wago IOs")
+ forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+ forte_add_sourcefile_hcpp(../../stdfblib/io/IX)
+ forte_add_sourcefile_hcpp( ../../stdfblib/io/QX)
+ forte_add_sourcefile_hcpp( ../../stdfblib/io/QW)
+ forte_add_sourcefile_hcpp( ../../stdfblib/io/IW)
+ forte_add_sourcefile_hcpp(processinterface)
+ forte_add_handler(WagoPFCProcessInterface::CKBusHandler processinterface)
+ endif(FORTE_IO)
- forte_add_link_library(libdal.a liblibloader.so libpthread.so libffi.so libdbus-glib-1.so libglib-2.0.so librt.so)
- forte_add_link_library(libtypelabel.so liboslinux.so libdbuskbuscommon.so)
+ SET(FORTE_WAGO_INCLUDE_DIR "" CACHE STRING "Path where the include for wago is found")
+ SET(FORTE_WAGO_LIB_DIR "" CACHE STRING "Path where the libraries for wago is found")
+
+ forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR})
+ forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR}/dal)
+ forte_add_include_system_directories(${FORTE_WAGO_INCLUDE_DIR}/OsLinux)
+ forte_add_link_directories(${FORTE_WAGO_LIB_DIR})
+
+ forte_add_link_library(libdal.a liblibloader.so libpthread.so libffi.so libdbus-glib-1.so libglib-2.0.so librt.so)
+ forte_add_link_library(libtypelabel.so liboslinux.so libdbuskbuscommon.so)
+ forte_add_link_flags("-Wall")
+
+ #TODO: Further dependencies are to be checked and added later
-#TODO: Further dependencies are to be checked and added later
-
-else("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
- #TODO add check if we are really building for wago
- MESSAGE("wAGO_KBUS is only supported for FORTE on Linux platforms. Disabled Module!")
- set(FORTE_MODULE_wAGO_KBUS OFF)
-endif("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
+ else("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
+ MESSAGE(FATAL_ERROR "The WAGO_KBUS IO system is only supported for FORTE on Linux platforms!")
+ endif("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
endif(FORTE_MODULE_WagoKbus)
diff --git a/src/modules/wagokbus/modular/CMakeLists.txt b/src/modules/wagokbus/modular/CMakeLists.txt
new file mode 100644
index 0000000..b72070e
--- /dev/null
+++ b/src/modules/wagokbus/modular/CMakeLists.txt
@@ -0,0 +1,18 @@
+#*******************************************************************************
+# Copyright (c) 2018 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+forte_add_sourcefile_hcpp(wagoHandle wagoDeviceController)
+forte_add_sourcefile_hcpp(types/WagoMaster types/WagoBusAdapter types/wagoSlaveBase)
+forte_add_sourcefile_hcpp(types/Wago1506 types/Wago1405_6 types/Wago1504_5 types/Wago459)
+
diff --git a/src/modules/wagokbus/modular/types/Wago1405_6.cpp b/src/modules/wagokbus/modular/types/Wago1405_6.cpp
new file mode 100644
index 0000000..be36f5f
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1405_6.cpp
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1405_6
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#include "Wago1405_6.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "Wago1405_6_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_Wago1405_6, g_nStringIdWago1405_6)
+
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdDigitalInput_1, g_nStringIdDigitalInput_2, g_nStringIdDigitalInput_3, g_nStringIdDigitalInput_4, g_nStringIdDigitalInput_5, g_nStringIdDigitalInput_6, g_nStringIdDigitalInput_7, g_nStringIdDigitalInput_8, g_nStringIdDigitalInput_9, g_nStringIdDigitalInput_10, g_nStringIdDigitalInput_11, g_nStringIdDigitalInput_12, g_nStringIdDigitalInput_13, g_nStringIdDigitalInput_14, g_nStringIdDigitalInput_15, g_nStringIdDigitalInput_16};
+
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
+
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_Wago1405_6::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_Wago1405_6::scm_anEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 255};
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anEventInputNames[] = {g_nStringIdMAP};
+
+const TDataIOID FORTE_Wago1405_6::scm_anEOWith[] = {0, 255, 0, 1, 255};
+const TForteInt16 FORTE_Wago1405_6::scm_anEOWithIndexes[] = {0, 2, -1};
+const CStringDictionary::TStringId FORTE_Wago1405_6::scm_anEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND};
+
+const SAdapterInstanceDef FORTE_Wago1405_6::scm_astAdapterInstances[] = {
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true },
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }};
+
+const SFBInterfaceSpec FORTE_Wago1405_6::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 17, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 2,scm_astAdapterInstances};
diff --git a/src/modules/wagokbus/modular/types/Wago1405_6.h b/src/modules/wagokbus/modular/types/Wago1405_6.h
new file mode 100644
index 0000000..5bba065
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1405_6.h
@@ -0,0 +1,139 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1405_6
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#ifndef _WAGO1405_6_H_
+#define _WAGO1405_6_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_wstring.h>
+#include "WagoBusAdapter.h"
+#include "wagoSlaveBase.h"
+
+class FORTE_Wago1405_6: public WagoSlaveBase{
+ DECLARE_FIRMWARE_FB(FORTE_Wago1405_6)
+
+ public:
+ FUNCTION_BLOCK_CTOR_FOR_WAGO_SLAVES(FORTE_Wago1405_6, 36865){
+ };
+
+ virtual ~FORTE_Wago1405_6(){};
+
+ protected:
+
+ INIT_HANLDLES(16, 0, 0, 0)
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ CIEC_WSTRING &DigitalInput_1() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_WSTRING &DigitalInput_2() {
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_WSTRING &DigitalInput_3() {
+ return *static_cast<CIEC_WSTRING*>(getDI(3));
+ };
+
+ CIEC_WSTRING &DigitalInput_4() {
+ return *static_cast<CIEC_WSTRING*>(getDI(4));
+ };
+
+ CIEC_WSTRING &DigitalInput_5() {
+ return *static_cast<CIEC_WSTRING*>(getDI(5));
+ };
+
+ CIEC_WSTRING &DigitalInput_6() {
+ return *static_cast<CIEC_WSTRING*>(getDI(6));
+ };
+
+ CIEC_WSTRING &DigitalInput_7() {
+ return *static_cast<CIEC_WSTRING*>(getDI(7));
+ };
+
+ CIEC_WSTRING &DigitalInput_8() {
+ return *static_cast<CIEC_WSTRING*>(getDI(8));
+ };
+
+ CIEC_WSTRING &DigitalInput_9() {
+ return *static_cast<CIEC_WSTRING*>(getDI(9));
+ };
+
+ CIEC_WSTRING &DigitalInput_10() {
+ return *static_cast<CIEC_WSTRING*>(getDI(10));
+ };
+
+ CIEC_WSTRING &DigitalInput_11() {
+ return *static_cast<CIEC_WSTRING*>(getDI(11));
+ };
+
+ CIEC_WSTRING &DigitalInput_12() {
+ return *static_cast<CIEC_WSTRING*>(getDI(12));
+ };
+
+ CIEC_WSTRING &DigitalInput_13() {
+ return *static_cast<CIEC_WSTRING*>(getDI(13));
+ };
+
+ CIEC_WSTRING &DigitalInput_14() {
+ return *static_cast<CIEC_WSTRING*>(getDI(14));
+ };
+
+ CIEC_WSTRING &DigitalInput_15() {
+ return *static_cast<CIEC_WSTRING*>(getDI(15));
+ };
+
+ CIEC_WSTRING &DigitalInput_16() {
+ return *static_cast<CIEC_WSTRING*>(getDI(16));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_WSTRING &STATUS() {
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ };
+
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_WagoBusAdapter& BusAdapterOut() {
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[0]));
+ };
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ FORTE_WagoBusAdapter& BusAdapterIn() {
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[1]));
+ };
+ static const int scm_nBusAdapterInAdpNum = 1;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 17, 2, 2);
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/Wago1504_5.cpp b/src/modules/wagokbus/modular/types/Wago1504_5.cpp
new file mode 100644
index 0000000..64e13ec
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1504_5.cpp
@@ -0,0 +1,44 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1504_5
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#include "Wago1504_5.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "Wago1504_5_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_Wago1504_5, g_nStringIdWago1504_5)
+
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdDigitalOutput_1, g_nStringIdDigitalOutput_2, g_nStringIdDigitalOutput_3, g_nStringIdDigitalOutput_4, g_nStringIdDigitalOutput_5, g_nStringIdDigitalOutput_6, g_nStringIdDigitalOutput_7, g_nStringIdDigitalOutput_8, g_nStringIdDigitalOutput_9, g_nStringIdDigitalOutput_10, g_nStringIdDigitalOutput_11, g_nStringIdDigitalOutput_12, g_nStringIdDigitalOutput_13, g_nStringIdDigitalOutput_14, g_nStringIdDigitalOutput_15, g_nStringIdDigitalOutput_16};
+
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
+
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_Wago1504_5::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_Wago1504_5::scm_anEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 255};
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anEventInputNames[] = {g_nStringIdMAP};
+
+const TDataIOID FORTE_Wago1504_5::scm_anEOWith[] = {0, 255, 0, 1, 255};
+const TForteInt16 FORTE_Wago1504_5::scm_anEOWithIndexes[] = {0, 2, -1};
+const CStringDictionary::TStringId FORTE_Wago1504_5::scm_anEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND};
+
+const SAdapterInstanceDef FORTE_Wago1504_5::scm_astAdapterInstances[] = {
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true },
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }};
+
+const SFBInterfaceSpec FORTE_Wago1504_5::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 17, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 2,scm_astAdapterInstances};
+
diff --git a/src/modules/wagokbus/modular/types/Wago1504_5.h b/src/modules/wagokbus/modular/types/Wago1504_5.h
new file mode 100644
index 0000000..d23e8d8
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1504_5.h
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1504_5
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#ifndef _WAGO1504_5_H_
+#define _WAGO1504_5_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_wstring.h>
+#include "WagoBusAdapter.h"
+#include "wagoSlaveBase.h"
+
+class FORTE_Wago1504_5: public WagoSlaveBase{
+ DECLARE_FIRMWARE_FB(FORTE_Wago1504_5)
+
+ public:
+ FUNCTION_BLOCK_CTOR_FOR_WAGO_SLAVES(FORTE_Wago1504_5, 36866){
+ };
+
+ virtual ~FORTE_Wago1504_5(){};
+
+ protected:
+
+ INIT_HANLDLES(0, 16, 0, 0)
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_BOOL &QI(){
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ CIEC_WSTRING &DigitalOutput_1(){
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_WSTRING &DigitalOutput_2(){
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_WSTRING &DigitalOutput_3(){
+ return *static_cast<CIEC_WSTRING*>(getDI(3));
+ };
+
+ CIEC_WSTRING &DigitalOutput_4(){
+ return *static_cast<CIEC_WSTRING*>(getDI(4));
+ };
+
+ CIEC_WSTRING &DigitalOutput_5(){
+ return *static_cast<CIEC_WSTRING*>(getDI(5));
+ };
+
+ CIEC_WSTRING &DigitalOutput_6(){
+ return *static_cast<CIEC_WSTRING*>(getDI(6));
+ };
+
+ CIEC_WSTRING &DigitalOutput_7(){
+ return *static_cast<CIEC_WSTRING*>(getDI(7));
+ };
+
+ CIEC_WSTRING &DigitalOutput_8(){
+ return *static_cast<CIEC_WSTRING*>(getDI(8));
+ };
+
+ CIEC_WSTRING &DigitalOutput_9(){
+ return *static_cast<CIEC_WSTRING*>(getDI(9));
+ };
+
+ CIEC_WSTRING &DigitalOutput_10(){
+ return *static_cast<CIEC_WSTRING*>(getDI(10));
+ };
+
+ CIEC_WSTRING &DigitalOutput_11(){
+ return *static_cast<CIEC_WSTRING*>(getDI(11));
+ };
+
+ CIEC_WSTRING &DigitalOutput_12(){
+ return *static_cast<CIEC_WSTRING*>(getDI(12));
+ };
+
+ CIEC_WSTRING &DigitalOutput_13(){
+ return *static_cast<CIEC_WSTRING*>(getDI(13));
+ };
+
+ CIEC_WSTRING &DigitalOutput_14(){
+ return *static_cast<CIEC_WSTRING*>(getDI(14));
+ };
+
+ CIEC_WSTRING &DigitalOutput_15(){
+ return *static_cast<CIEC_WSTRING*>(getDI(15));
+ };
+
+ CIEC_WSTRING &DigitalOutput_16(){
+ return *static_cast<CIEC_WSTRING*>(getDI(16));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_BOOL &QO(){
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_WSTRING &STATUS(){
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ };
+
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_WagoBusAdapter& BusAdapterOut(){
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[0]));
+ };
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ FORTE_WagoBusAdapter& BusAdapterIn(){
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[1]));
+ };
+ static const int scm_nBusAdapterInAdpNum = 1;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 17, 2, 2);
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/Wago1506.cpp b/src/modules/wagokbus/modular/types/Wago1506.cpp
new file mode 100644
index 0000000..aa847f4
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1506.cpp
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1506
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#include "Wago1506.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "Wago1506_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_Wago1506, g_nStringIdWago1506)
+
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdDigitalInput_1, g_nStringIdDigitalInput_2, g_nStringIdDigitalInput_3, g_nStringIdDigitalInput_4, g_nStringIdDigitalInput_5, g_nStringIdDigitalInput_6, g_nStringIdDigitalInput_7, g_nStringIdDigitalInput_8, g_nStringIdDigitalOutput_1, g_nStringIdDigitalOutput_2, g_nStringIdDigitalOutput_3, g_nStringIdDigitalOutput_4, g_nStringIdDigitalOutput_5, g_nStringIdDigitalOutput_6, g_nStringIdDigitalOutput_7, g_nStringIdDigitalOutput_8};
+
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
+
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_Wago1506::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_Wago1506::scm_anEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 255};
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anEventInputNames[] = {g_nStringIdMAP};
+
+const TDataIOID FORTE_Wago1506::scm_anEOWith[] = {0, 255, 0, 1, 255};
+const TForteInt16 FORTE_Wago1506::scm_anEOWithIndexes[] = {0, 2, -1};
+const CStringDictionary::TStringId FORTE_Wago1506::scm_anEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND};
+
+const SAdapterInstanceDef FORTE_Wago1506::scm_astAdapterInstances[] = {
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true },
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }};
+
+const SFBInterfaceSpec FORTE_Wago1506::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 17, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 2,scm_astAdapterInstances};
diff --git a/src/modules/wagokbus/modular/types/Wago1506.h b/src/modules/wagokbus/modular/types/Wago1506.h
new file mode 100644
index 0000000..f32c262
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago1506.h
@@ -0,0 +1,140 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1506
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#ifndef _WAGO1506_H_
+#define _WAGO1506_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_wstring.h>
+#include "WagoBusAdapter.h"
+#include "wagoSlaveBase.h"
+
+class FORTE_Wago1506: public WagoSlaveBase {
+ DECLARE_FIRMWARE_FB(FORTE_Wago1506)
+
+ public:
+ FUNCTION_BLOCK_CTOR_FOR_WAGO_SLAVES(FORTE_Wago1506, 34831){
+ };
+
+ virtual ~FORTE_Wago1506(){};
+
+ protected:
+
+ INIT_HANLDLES(8, 8, 0, 0)
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_BOOL &QI() {
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ CIEC_WSTRING &DigitalInput_1() {
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_WSTRING &DigitalInput_2() {
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_WSTRING &DigitalInput_3() {
+ return *static_cast<CIEC_WSTRING*>(getDI(3));
+ };
+
+ CIEC_WSTRING &DigitalInput_4() {
+ return *static_cast<CIEC_WSTRING*>(getDI(4));
+ };
+
+ CIEC_WSTRING &DigitalInput_5() {
+ return *static_cast<CIEC_WSTRING*>(getDI(5));
+ };
+
+ CIEC_WSTRING &DigitalInput_6() {
+ return *static_cast<CIEC_WSTRING*>(getDI(6));
+ };
+
+ CIEC_WSTRING &DigitalInput_7() {
+ return *static_cast<CIEC_WSTRING*>(getDI(7));
+ };
+
+ CIEC_WSTRING &DigitalInput_8() {
+ return *static_cast<CIEC_WSTRING*>(getDI(8));
+ };
+
+ CIEC_WSTRING &DigitalOutput_1() {
+ return *static_cast<CIEC_WSTRING*>(getDI(9));
+ };
+
+ CIEC_WSTRING &DigitalOutput_2() {
+ return *static_cast<CIEC_WSTRING*>(getDI(10));
+ };
+
+ CIEC_WSTRING &DigitalOutput_3() {
+ return *static_cast<CIEC_WSTRING*>(getDI(11));
+ };
+
+ CIEC_WSTRING &DigitalOutput_4() {
+ return *static_cast<CIEC_WSTRING*>(getDI(12));
+ };
+
+ CIEC_WSTRING &DigitalOutput_5() {
+ return *static_cast<CIEC_WSTRING*>(getDI(13));
+ };
+
+ CIEC_WSTRING &DigitalOutput_6() {
+ return *static_cast<CIEC_WSTRING*>(getDI(14));
+ };
+
+ CIEC_WSTRING &DigitalOutput_7() {
+ return *static_cast<CIEC_WSTRING*>(getDI(15));
+ };
+
+ CIEC_WSTRING &DigitalOutput_8() {
+ return *static_cast<CIEC_WSTRING*>(getDI(16));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_BOOL &QO() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_WSTRING &STATUS() {
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ };
+
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_WagoBusAdapter& BusAdapterOut() {
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[0]));
+ };
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ FORTE_WagoBusAdapter& BusAdapterIn() {
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[1]));
+ };
+ static const int scm_nBusAdapterInAdpNum = 1;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 17, 2, 2);
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/Wago459.cpp b/src/modules/wagokbus/modular/types/Wago459.cpp
new file mode 100644
index 0000000..bec3808
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago459.cpp
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago459
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#include "Wago459.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "Wago459_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_Wago459, g_nStringIdWago459)
+
+const CStringDictionary::TStringId FORTE_Wago459::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdAnalogInput_1, g_nStringIdAnalogInput_2, g_nStringIdAnalogInput_3, g_nStringIdAnalogInput_4};
+
+const CStringDictionary::TStringId FORTE_Wago459::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING};
+
+const CStringDictionary::TStringId FORTE_Wago459::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
+
+const CStringDictionary::TStringId FORTE_Wago459::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_Wago459::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_Wago459::scm_anEIWith[] = {1, 2, 3, 4, 0, 255};
+const CStringDictionary::TStringId FORTE_Wago459::scm_anEventInputNames[] = {g_nStringIdMAP};
+
+const TDataIOID FORTE_Wago459::scm_anEOWith[] = {0, 255, 0, 1, 255};
+const TForteInt16 FORTE_Wago459::scm_anEOWithIndexes[] = {0, 2, -1};
+const CStringDictionary::TStringId FORTE_Wago459::scm_anEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND};
+
+const SAdapterInstanceDef FORTE_Wago459::scm_astAdapterInstances[] = {
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true },
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }};
+
+const SFBInterfaceSpec FORTE_Wago459::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 5, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 2,scm_astAdapterInstances};
diff --git a/src/modules/wagokbus/modular/types/Wago459.h b/src/modules/wagokbus/modular/types/Wago459.h
new file mode 100644
index 0000000..2ad939a
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/Wago459.h
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago459
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#ifndef _WAGO459_H_
+#define _WAGO459_H_
+
+#include <funcbloc.h>
+#include <forte_bool.h>
+#include <forte_wstring.h>
+#include "WagoBusAdapter.h"
+#include "wagoSlaveBase.h"
+
+class FORTE_Wago459: public WagoSlaveBase{
+ DECLARE_FIRMWARE_FB(FORTE_Wago459)
+
+ public:
+ FUNCTION_BLOCK_CTOR_FOR_WAGO_SLAVES(FORTE_Wago459, 459){
+ };
+
+ virtual ~FORTE_Wago459(){};
+
+ protected:
+
+ INIT_HANLDLES(0, 0, 4, 0)
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ CIEC_BOOL &QI(){
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ CIEC_WSTRING &AnalogInput_1(){
+ return *static_cast<CIEC_WSTRING*>(getDI(1));
+ };
+
+ CIEC_WSTRING &AnalogInput_2(){
+ return *static_cast<CIEC_WSTRING*>(getDI(2));
+ };
+
+ CIEC_WSTRING &AnalogInput_3(){
+ return *static_cast<CIEC_WSTRING*>(getDI(3));
+ };
+
+ CIEC_WSTRING &AnalogInput_4(){
+ return *static_cast<CIEC_WSTRING*>(getDI(4));
+ };
+
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_BOOL &QO(){
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_WSTRING &STATUS(){
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ };
+
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ FORTE_WagoBusAdapter& BusAdapterOut(){
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[0]));
+ };
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ FORTE_WagoBusAdapter& BusAdapterIn(){
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[1]));
+ };
+ static const int scm_nBusAdapterInAdpNum = 1;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 5, 2, 2);
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/WagoBusAdapter.cpp b/src/modules/wagokbus/modular/types/WagoBusAdapter.cpp
new file mode 100644
index 0000000..89cdea0
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/WagoBusAdapter.cpp
@@ -0,0 +1,52 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: WagoBusAdapter
+ *** Description:
+ *** Version:
+ *************************************************************************/
+
+#include "WagoBusAdapter.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "WagoBusAdapter_gen.cpp"
+#endif
+
+DEFINE_ADAPTER_TYPE(FORTE_WagoBusAdapter, g_nStringIdWagoBusAdapter)
+
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anDataInputNames[] = {g_nStringIdQO};
+
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anDataInputTypeIds[] = {g_nStringIdBOOL};
+
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anDataOutputNames[] = {g_nStringIdQI, g_nStringIdMasterId, g_nStringIdIndex};
+
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdUINT, g_nStringIdUINT};
+
+const TDataIOID FORTE_WagoBusAdapter::scm_anEIWith[] = {0, 255};
+const TForteInt16 FORTE_WagoBusAdapter::scm_anEIWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anEventInputNames[] = {g_nStringIdINITO};
+
+const TDataIOID FORTE_WagoBusAdapter::scm_anEOWith[] = {2, 1, 0, 255};
+const TForteInt16 FORTE_WagoBusAdapter::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_WagoBusAdapter::scm_anEventOutputNames[] = {g_nStringIdINIT};
+
+const SFBInterfaceSpec FORTE_WagoBusAdapter::scm_stFBInterfaceSpecSocket = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 3, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+const SFBInterfaceSpec FORTE_WagoBusAdapter::scm_stFBInterfaceSpecPlug = {
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes,
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes, 3, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 0, 0
+};
+
+const TForteUInt8 FORTE_WagoBusAdapter::scmSlaveConfigurationIO[] = { };
+const TForteUInt8 FORTE_WagoBusAdapter::scmSlaveConfigurationIONum = 0;
+
+
+
diff --git a/src/modules/wagokbus/modular/types/WagoBusAdapter.h b/src/modules/wagokbus/modular/types/WagoBusAdapter.h
new file mode 100644
index 0000000..626ddff
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/WagoBusAdapter.h
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: WagoBusAdapter
+ *** Description:
+ *** Version:
+ *************************************************************************/
+
+#ifndef _WAGOBUSADAPTER_H_
+#define _WAGOBUSADAPTER_H_
+
+#include "../../../../core/io/configFB/io_adapter_multi.h"
+#include <typelib.h>
+#include <forte_bool.h>
+#include <forte_uint.h>
+
+class FORTE_WagoBusAdapter : public forte::core::io::IOConfigFBMultiAdapter {
+ DECLARE_ADAPTER_TYPE(FORTE_WagoBusAdapter)
+
+ public:
+
+ ADAPTER_CTOR_FOR_IO_MULTI (FORTE_WagoBusAdapter){
+ };
+
+ static const TForteUInt8 scmSlaveConfigurationIO[];
+ static const TForteUInt8 scmSlaveConfigurationIONum;
+
+ virtual ~FORTE_WagoBusAdapter(){};
+
+ CIEC_BOOL &QO(){
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDI(0) : getDO(0));
+ };
+
+ CIEC_BOOL &QI(){
+ return *static_cast<CIEC_BOOL*>((isSocket()) ? getDO(0) : getDI(0));
+ };
+
+ CIEC_UINT &MasterId(){
+ return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(1) : getDI(1));
+ };
+
+ CIEC_UINT &Index(){
+ return *static_cast<CIEC_UINT*>((isSocket()) ? getDO(2) : getDI(2));
+ };
+
+ int INITO(){
+ return m_nParentAdapterListEventID + scm_nEventINITOID;
+ }
+
+ int INIT(){
+ return m_nParentAdapterListEventID + scm_nEventINITID;
+ }
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecSocket;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpecPlug;
+
+ static const TEventID scm_nEventINITOID = 0;
+ static const TEventID scm_nEventINITID = 0;
+
+ FORTE_ADAPTER_DATA_ARRAY(1, 1, 1, 3, 0);
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/WagoMaster.cpp b/src/modules/wagokbus/modular/types/WagoMaster.cpp
new file mode 100644
index 0000000..b73975c
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/WagoMaster.cpp
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: WagoMaster
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 1.0: 2018-09-12/cabral - null -
+ *************************************************************************/
+
+#include "WagoMaster.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "WagoMaster_gen.cpp"
+#endif
+
+#include "../wagoDeviceController.h"
+
+DEFINE_FIRMWARE_FB(FORTE_WagoMaster, g_nStringIdWagoMaster)
+
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdUpdateInterval};
+
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anDataInputTypeIds[] = { g_nStringIdBOOL, g_nStringIdUINT };
+
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS};
+
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING};
+
+const TForteInt16 FORTE_WagoMaster::scm_anEIWithIndexes[] = {0};
+const TDataIOID FORTE_WagoMaster::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anEventInputNames[] = {g_nStringIdINIT};
+
+const TDataIOID FORTE_WagoMaster::scm_anEOWith[] = {0, 1, 255, 1, 0, 255};
+const TForteInt16 FORTE_WagoMaster::scm_anEOWithIndexes[] = {0, 3, -1};
+const CStringDictionary::TStringId FORTE_WagoMaster::scm_anEventOutputNames[] = {g_nStringIdINITO, g_nStringIdIND};
+
+const SAdapterInstanceDef FORTE_WagoMaster::scm_astAdapterInstances[] = {
+{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }};
+
+const SFBInterfaceSpec FORTE_WagoMaster::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 2, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 2, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 1,scm_astAdapterInstances};
+
+void FORTE_WagoMaster::setInitialValues(){
+ UpdateInterval() = 25;
+}
+
+void FORTE_WagoMaster::setConfig() {
+ WagoDeviceController::WagoConfig config;
+ config.updateInterval = UpdateInterval();
+ getDeviceController()->setConfig(&config);
+}
+
+forte::core::io::IODeviceController* FORTE_WagoMaster::createDeviceController(CDeviceExecution& paDeviceExecution) {
+ return new WagoDeviceController(paDeviceExecution);
+}
diff --git a/src/modules/wagokbus/modular/types/WagoMaster.h b/src/modules/wagokbus/modular/types/WagoMaster.h
new file mode 100644
index 0000000..46b7b81
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/WagoMaster.h
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: WagoMaster
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 1.0: 2018-09-12/cabral - null -
+ *************************************************************************/
+
+#ifndef _WAGOMASTER_H_
+#define _WAGOMASTER_H_
+
+#include "../../../../core/io/configFB/io_master_multi.h"
+#include "WagoBusAdapter.h"
+
+class FORTE_WagoMaster : public forte::core::io::IOConfigFBMultiMaster {
+ DECLARE_FIRMWARE_FB(FORTE_WagoMaster)
+
+ public:
+ FUNCTION_BLOCK_CTOR_WITH_BASE_CLASS(FORTE_WagoMaster, forte::core::io::IOConfigFBMultiMaster){
+ };
+
+ virtual ~FORTE_WagoMaster(){};
+
+ CIEC_BOOL &QO(){
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ CIEC_WSTRING &STATUS(){
+ return *static_cast<CIEC_WSTRING*>(getDO(1));
+ };
+
+ CIEC_BOOL &QI(){
+ return *static_cast<CIEC_BOOL*>(getDI(0));
+ };
+
+ CIEC_BOOL &UpdateInterval(){
+ return *static_cast<CIEC_BOOL*>(getDI(1));
+ };
+
+ FORTE_WagoBusAdapter& BusAdapterOut(){
+ return (*static_cast<FORTE_WagoBusAdapter*>(m_apoAdapters[0]));
+ };
+
+ private:
+ static const CStringDictionary::TStringId scm_anDataInputNames[];
+ static const CStringDictionary::TStringId scm_anDataInputTypeIds[];
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+
+ static const TEventID scm_nEventINITID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const TDataIOID scm_anEIWith[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventINITOID = 0;
+ static const TEventID scm_nEventINDID = 1;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SAdapterInstanceDef scm_astAdapterInstances[];
+
+ static const int scm_nBusAdapterOutAdpNum = 0;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_FB_DATA_ARRAY(2, 2, 2, 1);
+
+ virtual void setInitialValues();
+
+ forte::core::io::IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution);
+
+ void setConfig();
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/modules/wagokbus/modular/types/wagoSlaveBase.cpp b/src/modules/wagokbus/modular/types/wagoSlaveBase.cpp
new file mode 100644
index 0000000..7d6d349
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/wagoSlaveBase.cpp
@@ -0,0 +1,56 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1506
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#include "wagoSlaveBase.h"
+#include "../wagoDeviceController.h"
+
+const TForteUInt8 WagoSlaveBase::scmSlaveConfigurationIO[] = { };
+const TForteUInt8 WagoSlaveBase::scmSlaveConfigurationIONum = 0;
+
+WagoSlaveBase::WagoSlaveBase(int paType, CResource* paResource, const SFBInterfaceSpec* paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte* paFBConnData, TForteByte* paFBVarsData) :
+ forte::core::io::IOConfigFBMultiSlave(scmSlaveConfigurationIO, scmSlaveConfigurationIONum, paType, paResource, paInterfaceSpec, paInstanceNameId,
+ paFBConnData, paFBVarsData) {
+}
+
+void WagoSlaveBase::initHandlesBase(size_t paNumberOfBoolInputs, size_t paNumberOfBoolOutputs, size_t paNumberOfAnalogInputs, size_t paNumberOfAnalogOutputs) {
+ size_t offset = 1; //skip QI
+
+ for(size_t i = 0; i < paNumberOfBoolInputs; i++) {
+ WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(offset + i)),
+ forte::core::io::IOMapper::In, mIndex, CIEC_ANY::e_BOOL, static_cast<TForteUInt32>(i));
+ initHandle(&desc);
+ }
+
+ offset += paNumberOfBoolInputs;
+
+ for(size_t i = 0; i < paNumberOfBoolOutputs; i++) {
+ WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(offset + i)),
+ forte::core::io::IOMapper::Out, mIndex, CIEC_ANY::e_BOOL, static_cast<TForteUInt32>(i));
+ initHandle(&desc);
+ }
+
+ offset += paNumberOfBoolOutputs;
+
+ for(size_t i = 0; i < paNumberOfAnalogInputs; i++) {
+ WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(offset + i)),
+ forte::core::io::IOMapper::In, mIndex, CIEC_ANY::e_WORD, static_cast<TForteUInt32>(i));
+ initHandle(&desc);
+ }
+
+ offset += paNumberOfAnalogInputs;
+
+ for(size_t i = 0; i < paNumberOfAnalogOutputs; i++) {
+ WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast<CIEC_WSTRING*>(getDI(offset + i)),
+ forte::core::io::IOMapper::Out, mIndex, CIEC_ANY::e_WORD, static_cast<TForteUInt32>(i));
+ initHandle(&desc);
+ }
+}
diff --git a/src/modules/wagokbus/modular/types/wagoSlaveBase.h b/src/modules/wagokbus/modular/types/wagoSlaveBase.h
new file mode 100644
index 0000000..3988902
--- /dev/null
+++ b/src/modules/wagokbus/modular/types/wagoSlaveBase.h
@@ -0,0 +1,45 @@
+/*************************************************************************
+ *** FORTE Library Element
+ ***
+ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x!
+ ***
+ *** Name: Wago1506
+ *** Description: Service Interface Function Block Type
+ *** Version:
+ *** 0.0: 2016-11-30/4DIAC-IDE - 4DIAC-Consortium -
+ *************************************************************************/
+
+#ifndef SRC_MODULES_WAGOKBUS_MODULAR_TYPES_WAGOSLAVEBASE_H_
+#define SRC_MODULES_WAGOKBUS_MODULAR_TYPES_WAGOSLAVEBASE_H_
+
+#include "../../../../core/io/configFB/io_slave_multi.h"
+
+#define FUNCTION_BLOCK_CTOR_FOR_WAGO_SLAVES(fbclass, type) \
+ fbclass(const CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : \
+ WagoSlaveBase(type, pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData)
+
+#define INIT_HANLDLES(noOfBoolInputs, noOfBoolOutputs, noOfAnalogInputs, noOfAnalogOutputs) \
+ void initHandles() override {initHandlesBase(noOfBoolInputs, noOfBoolOutputs, noOfAnalogInputs, noOfAnalogOutputs);};
+
+class WagoSlaveBase : public forte::core::io::IOConfigFBMultiSlave {
+
+ public:
+ WagoSlaveBase(int paType, CResource *paResource, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
+
+ virtual ~WagoSlaveBase() {
+ }
+
+ protected:
+
+ void initHandlesBase(size_t paNumberOfBoolInputs, size_t paNumberOfBoolOutputs, size_t paNumberOfAnalogInputs, size_t paNumberOfAnalogOutputs);
+
+ virtual void initHandles() = 0;
+
+ private:
+
+ static const TForteUInt8 scmSlaveConfigurationIO[];
+ static const TForteUInt8 scmSlaveConfigurationIONum;
+};
+
+#endif /* SRC_MODULES_WAGOKBUS_MODULAR_TYPES_WAGOSLAVEBASE_H_ */
diff --git a/src/modules/wagokbus/modular/wagoDeviceController.cpp b/src/modules/wagokbus/modular/wagoDeviceController.cpp
new file mode 100644
index 0000000..326ffb7
--- /dev/null
+++ b/src/modules/wagokbus/modular/wagoDeviceController.cpp
@@ -0,0 +1,193 @@
+/*************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *************************************************************************/
+
+#include "wagoDeviceController.h"
+#include "wagoHandle.h"
+#include "../../../core/utils/criticalregion.h"
+
+const char * const WagoDeviceController::scmKBusDeviceName = "libpackbus";
+
+const char * const WagoDeviceController::scmFailedToGetApplicationInterface = "Failed to get the application Interface";
+const char * const WagoDeviceController::scmFailedToInitializeKBus =
+ "Failed to initialize the KBus device. Probably there's another program that is using the bus";
+const char * const WagoDeviceController::scmFailedToScanDevices = "Failed to scan devices on the KBus";
+const char * const WagoDeviceController::scmFailedToOpenKBusDevice = "Failed to open KBus device.";
+
+const char * const WagoDeviceController::scmFailedToCreateKBusInfo = "Call to ldkc_KbusInfo_Create() failed";
+const char * const WagoDeviceController::scmFailedGetTerminalInfo = "Call to ldkc_KbusInfo_GetTerminalInfo() failed";
+const char * const WagoDeviceController::scmFailedGetTerminalList = "Call to ldkc_KbusInfo_GetTerminalList() failed";
+
+const char * const WagoDeviceController::scmFailedToGetDeviceList = "Failed to get device list";
+
+WagoDeviceController::WagoDeviceController(CDeviceExecution& paDeviceExecution) :
+ forte::core::io::IODeviceMultiController(paDeviceExecution), mAppDevInterface(0), mTaskId(0), mKBusDeviceId(scmInvalidDeviceId), mTerminalCount(0) {
+
+ memset(mTerminalIds, 0, sizeof(mTerminalIds));
+ memset(mTerminalInfos, 0, sizeof(mTerminalInfos));
+ mConfig.updateInterval = 25;
+}
+
+WagoDeviceController::~WagoDeviceController() {
+ //do nothing
+}
+
+void WagoDeviceController::setConfig(struct forte::core::io::IODeviceController::Config* paConfig) {
+ this->mConfig = *static_cast<WagoConfig*>(paConfig);
+}
+
+const char* WagoDeviceController::init() {
+ tDeviceInfo deviceList[scmNumberOfDevicesToScan]; // the list of devices given by the ADI
+
+ mAppDevInterface = adi_GetApplicationInterface();
+ if(!mAppDevInterface) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedToGetApplicationInterface);
+ return scmFailedToGetApplicationInterface;
+ }
+
+ if(DAL_SUCCESS != mAppDevInterface->Init()) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedToInitializeKBus);
+ return scmFailedToInitializeKBus;
+ }
+
+ if(DAL_SUCCESS != mAppDevInterface->ScanDevices()) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedToScanDevices);
+ return scmFailedToScanDevices;
+ }
+
+ mAppDevInterface->GetDeviceList(sizeof(deviceList), deviceList, &mTerminalCount); //always return DAL_SUCCESS
+
+ for(size_t i = 0; i < mTerminalCount; ++i) { // find kbus device
+ if(0 == strcmp(deviceList[i].DeviceName, scmKBusDeviceName)) {
+ mKBusDeviceId = deviceList[i].DeviceId;
+ if(0 != mAppDevInterface->OpenDevice(mKBusDeviceId)) {
+ DEVLOG_ERROR("[WagoDeviceController] %s \n", scmFailedToOpenKBusDevice);
+ return scmFailedToOpenKBusDevice;
+ }
+
+ return loadTerminalInformation();
+ }
+ }
+
+ for(size_t i = 0; i < mTerminalCount; i++) {
+ DEVLOG_INFO("[WagoDeviceController] Found device with ID: %d\n", mTerminalIds[i]);
+ }
+
+ return 0;
+}
+
+forte::core::io::IOHandle* WagoDeviceController::initHandle(forte::core::io::IODeviceController::HandleDescriptor *paHandleDescriptor) {
+ WagoHandleDescriptor desc = *static_cast<WagoHandleDescriptor*>(paHandleDescriptor);
+
+ TForteUInt32 outputOffset;
+ TForteUInt32 inputOffset;
+ switch(desc.mType){
+ case CIEC_ANY::e_BOOL:
+ outputOffset = mTerminalInfos[desc.mSlaveIndex].OffsetOutput_bits + desc.mChannel;
+ inputOffset = mTerminalInfos[desc.mSlaveIndex].OffsetInput_bits + desc.mChannel;
+ break;
+ case CIEC_ANY::e_WORD:
+ outputOffset = mTerminalInfos[desc.mSlaveIndex].OffsetOutput_bits + (2 * desc.mChannel);
+ inputOffset = mTerminalInfos[desc.mSlaveIndex].OffsetInput_bits + (2 * desc.mChannel);
+ break;
+ default:
+ return 0;
+ }
+
+ return new WagoHandle(this, desc.mType, desc.mDirection, mAppDevInterface, mTaskId, mKBusDeviceId, outputOffset, inputOffset);
+}
+
+void WagoDeviceController::deInit() {
+ if(0 != mAppDevInterface) {
+ if(0 != mAppDevInterface->CloseDevice(mKBusDeviceId)) {
+ DEVLOG_ERROR("[WagoDeviceController] There was a problem closing the KBus device\n");
+ }
+ mAppDevInterface->Exit(); // disconnect ADI-Interface
+ mKBusDeviceId = scmInvalidDeviceId;
+ mAppDevInterface = 0;
+ }
+}
+
+void WagoDeviceController::runLoop() {
+ tApplicationStateChangedEvent stEvent;
+
+ stEvent.State = ApplicationState_Running; // Set application state to "Running" to drive kbus by ourselves.
+ if(DAL_SUCCESS == mAppDevInterface->ApplicationStateChanged(stEvent)) {
+ while(isAlive()) {
+ CThread::sleepThread(mConfig.updateInterval);
+ if(!triggerKBusCycle()) {
+ break; //we have severe problem exit KBus handling thread
+ }
+
+ checkForInputChanges();
+ }
+ } else {
+ DEVLOG_ERROR("[WagoDeviceController] Set application state to 'Running' failed\n");
+ }
+}
+
+void WagoDeviceController::addSlaveHandle(int, forte::core::io::IOHandle* paHandle) {
+ CCriticalRegion criticalRegion(mHandleMutex);
+ paHandle->is(forte::core::io::IOMapper::In) ? mInputHandles.pushBack(paHandle) : mOutputHandles.pushBack(paHandle);
+}
+
+void WagoDeviceController::dropSlaveHandles(int) {
+ // Is handled by #dropHandles method
+}
+
+bool WagoDeviceController::isSlaveAvailable(int paIndex) {
+ return paIndex < mTerminalCount;
+}
+
+bool WagoDeviceController::checkSlaveType(int paIndex, int paType) {
+ return mTerminalIds[paIndex] == paType;
+}
+
+bool WagoDeviceController::isHandleValueEqual(forte::core::io::IOHandle* paHandle) {
+ return !static_cast<WagoHandle*>(paHandle)->check();
+}
+
+const char* WagoDeviceController::loadTerminalInformation() {
+ if(KbusInfo_Failed == ldkc_KbusInfo_Create()) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedToCreateKBusInfo);
+ return scmFailedToCreateKBusInfo;
+ }
+
+ if(KbusInfo_Failed == ldkc_KbusInfo_GetTerminalInfo(OS_ARRAY_SIZE(mTerminalInfos), mTerminalInfos, &mTerminalCount)) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedGetTerminalInfo);
+ ldkc_KbusInfo_Destroy();
+ return scmFailedGetTerminalInfo;
+ }
+
+ if(KbusInfo_Failed == ldkc_KbusInfo_GetTerminalList(OS_ARRAY_SIZE(mTerminalIds), mTerminalIds, NULL)) {
+ DEVLOG_ERROR("[WagoDeviceController] %s\n", scmFailedGetTerminalList);
+ ldkc_KbusInfo_Destroy();
+ return scmFailedGetTerminalList;
+ }
+
+ return 0;
+}
+
+bool WagoDeviceController::triggerKBusCycle() {
+ uint32_t pushRetVal = 0;
+
+ if(DAL_SUCCESS == mAppDevInterface->CallDeviceSpecificFunction("libpackbus_Push", &pushRetVal)) {
+ if(DAL_SUCCESS == pushRetVal) {
+ mAppDevInterface->WatchdogTrigger();
+ return true;
+ } else {
+ DEVLOG_ERROR("[WagoDeviceController] Function 'libpackbus_Push' failed\n");
+ }
+ } else {
+ DEVLOG_ERROR("[WagoDeviceController] CallDeviceSpecificFunction for 'libpackbus_Push' failed\n");
+ }
+ return false;
+}
diff --git a/src/modules/wagokbus/modular/wagoDeviceController.h b/src/modules/wagokbus/modular/wagoDeviceController.h
new file mode 100644
index 0000000..c834d76
--- /dev/null
+++ b/src/modules/wagokbus/modular/wagoDeviceController.h
@@ -0,0 +1,116 @@
+/*************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *************************************************************************/
+
+#ifndef SRC_MODULES_WAGOKBUS_MODULAR_WAGODEVICECONTROLLER_H_
+#define SRC_MODULES_WAGOKBUS_MODULAR_WAGODEVICECONTROLLER_H_
+
+#include "../../../core/io/device/io_controller_multi.h"
+
+#define OS_MUST_BE_ARRAY
+
+extern "C" {
+#include <dal/adi_application_interface.h>
+#include <ldkc_kbus_information.h>
+#include <ldkc_kbus_register_communication.h>
+}
+
+class WagoDeviceController : public forte::core::io::IODeviceMultiController {
+ public:
+ explicit WagoDeviceController(CDeviceExecution& paDeviceExecution);
+
+ virtual ~WagoDeviceController();
+
+ struct WagoConfig : forte::core::io::IODeviceController::Config {
+ unsigned int updateInterval; //!< Sets the frequency for the data update cycle. The default value is 25 Hz.
+ };
+
+ class WagoHandleDescriptor : public forte::core::io::IODeviceMultiController::HandleDescriptor {
+ public:
+ CIEC_ANY::EDataTypeID mType;
+ TForteUInt32 mChannel;
+
+ WagoHandleDescriptor(CIEC_WSTRING const &paId, forte::core::io::IOMapper::Direction paDirection, int paSlaveIndex, CIEC_ANY::EDataTypeID paType,
+ TForteUInt32 paChannel) :
+ forte::core::io::IODeviceMultiController::HandleDescriptor(paId, paDirection, paSlaveIndex), mType(paType), mChannel(paChannel) {
+ }
+ };
+
+ void setConfig(struct forte::core::io::IODeviceController::Config* paConfig) override;
+
+ void addSlaveHandle(int index, forte::core::io::IOHandle* paHandle) override;
+
+ void dropSlaveHandles(int paIndex) override;
+ protected:
+ const char* init();
+
+ forte::core::io::IOHandle* initHandle(forte::core::io::IODeviceController::HandleDescriptor *paHandleDescriptor) override;
+
+ void deInit() override;
+
+ void runLoop() override;
+
+ tApplicationDeviceInterface *mAppDevInterface;
+ uint32_t mTaskId;
+ tDeviceId mKBusDeviceId;
+
+ /*KBus Terminal information */
+ size_t mTerminalCount;
+ u16 mTerminalIds[LDKC_KBUS_TERMINAL_COUNT_MAX];
+ tldkc_KbusInfo_TerminalInfo mTerminalInfos[LDKC_KBUS_TERMINAL_COUNT_MAX];
+
+ WagoConfig mConfig;
+
+ /*! @brief Checks if the value of a handle has changed. Used by the #checkForInputChanges method.
+ *
+ * @param handle Handle which should be compared to the previous IO state
+ * @return True if the current state is equal to the previous IO state. In case it has changed, return false.
+ */
+ virtual bool isHandleValueEqual(forte::core::io::IOHandle* paHandle) override;
+
+ private:
+ /*! @brief Checks if a slave exists at the given index
+ *
+ * @param index Index/Position of the modular slave
+ * @return True in case a slave was found at the given position
+ */
+ bool isSlaveAvailable(int paIndex);
+
+ /*! @brief Checks if the slave type matches the configured type
+ *
+ * @param index Index/Position of the modular slave
+ * @param type Type identifier which describes the modular slave
+ * @return True in case the slave at the index has the given type
+ */
+ bool checkSlaveType(int paIndex, int paType);
+
+ const char* loadTerminalInformation();
+
+ bool triggerKBusCycle();
+
+ static const tDeviceId scmInvalidDeviceId = -1;
+ static const size_t scmNumberOfDevicesToScan = 10;
+
+ static const char * const scmKBusDeviceName;
+
+ static const char * const scmFailedToGetApplicationInterface;
+ static const char * const scmFailedToInitializeKBus;
+ static const char * const scmFailedToScanDevices;
+ static const char * const scmFailedToOpenKBusDevice;
+ static const char * const scmFailedToGetDeviceList;
+
+ static const char * const scmFailedToCreateKBusInfo;
+ static const char * const scmFailedGetTerminalInfo;
+ static const char * const scmFailedGetTerminalList;
+
+};
+
+#endif /* SRC_MODULES_WAGOKBUS_MODULAR_WAGODEVICECONTROLLER_H_ */
diff --git a/src/modules/wagokbus/modular/wagoHandle.cpp b/src/modules/wagokbus/modular/wagoHandle.cpp
new file mode 100644
index 0000000..aea9a86
--- /dev/null
+++ b/src/modules/wagokbus/modular/wagoHandle.cpp
@@ -0,0 +1,132 @@
+/*************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *************************************************************************/
+
+#include "wagoHandle.h"
+
+WagoHandle::WagoHandle(WagoDeviceController *paController, CIEC_ANY::EDataTypeID paType, forte::core::io::IOMapper::Direction paDirection,
+ tApplicationDeviceInterface * paAppDevInterface, uint32_t paTaskId, tDeviceId paKBusDeviceId, TForteUInt32 paOutputOffset, TForteUInt32 paInputOffset) :
+ forte::core::io::IOHandle(paController, paDirection, paType), mAppDevInterface(paAppDevInterface), mTaskId(paTaskId), mKBusDeviceId(paKBusDeviceId),
+ mOutputOffset(paOutputOffset), mInputOffset(paInputOffset) {
+ switch(mType){
+ case CIEC_ANY::e_BOOL:
+ mLastValue = new CIEC_BOOL;
+ break;
+ case CIEC_ANY::e_WORD:
+ mLastValue = new CIEC_WORD;
+ break;
+ default:
+ mLastValue = 0;
+ }
+}
+
+WagoHandle::~WagoHandle() {
+ if(0 != mLastValue) {
+ delete mLastValue;
+ }
+}
+
+void WagoHandle::set(const CIEC_ANY &paState) {
+ mAppDevInterface->WriteStart(mKBusDeviceId, mTaskId);
+
+ switch(mType){
+ case CIEC_ANY::e_BOOL:
+ setBoolean(static_cast<const CIEC_BOOL&>(paState));
+ break;
+ case CIEC_ANY::e_WORD:
+ setWord(static_cast<const CIEC_WORD&>(paState));
+ break;
+ default:
+ break;
+ }
+
+ mAppDevInterface->WriteEnd(mKBusDeviceId, mTaskId);
+}
+
+void WagoHandle::get(CIEC_ANY &paState) {
+ mAppDevInterface->ReadStart(mKBusDeviceId, mTaskId);
+
+ switch(mType){
+ case CIEC_ANY::e_BOOL:
+ getBoolean(static_cast<CIEC_BOOL&>(paState));
+ break;
+ case CIEC_ANY::e_WORD:
+ getWord(static_cast<CIEC_WORD&>(paState));
+ break;
+ default:
+ break;
+ }
+
+ mAppDevInterface->ReadEnd(mKBusDeviceId, mTaskId);
+}
+
+bool WagoHandle::check() {
+ bool changed = false;
+ switch(mType){
+ case CIEC_ANY::e_BOOL:
+ changed = checkBoolean();
+ break;
+ case CIEC_ANY::e_WORD:
+ changed = checkWord();
+ break;
+ default:
+ break;
+ }
+ return changed;
+}
+
+void WagoHandle::dropObserver() {
+ CIEC_WORD state = 0; //should work for boolean too
+ set(state);
+ forte::core::io::IOHandle::dropObserver();
+}
+
+void WagoHandle::getBoolean(CIEC_BOOL &paState) {
+ bool *inDataBool = 0;
+ mAppDevInterface->ReadBool(mKBusDeviceId, mTaskId, mInputOffset, inDataBool);
+ paState = inDataBool;
+}
+
+void WagoHandle::getWord(CIEC_WORD &paState) {
+ TForteByte inDataWord[2];
+ mAppDevInterface->ReadBytes(mKBusDeviceId, mTaskId, mInputOffset, 2, inDataWord);
+ paState = static_cast<TForteWord>((static_cast<TForteWord>(inDataWord[1]) << 8) + (static_cast<TForteWord>(inDataWord[0])));
+}
+
+void WagoHandle::setBoolean(const CIEC_BOOL &paState) {
+ bool outDataBool = paState;
+ mAppDevInterface->WriteBool(mKBusDeviceId, mTaskId, mOutputOffset, outDataBool);
+}
+
+void WagoHandle::setWord(const CIEC_WORD &paState) {
+ TForteWord dataWord = paState;
+ TForteByte outData[2];
+ outData[0] = static_cast<TForteByte>(dataWord & 0x00FF);
+ outData[1] = static_cast<TForteByte>(dataWord >> 8);
+ mAppDevInterface->WriteBytes(mKBusDeviceId, mTaskId, mOutputOffset, 2, outData);
+}
+
+bool WagoHandle::checkBoolean() {
+ bool retVal;
+ CIEC_BOOL value;
+ get(value);
+ retVal = (value != *static_cast<CIEC_BOOL*>(mLastValue));
+ mLastValue->setValue(value);
+ return retVal;
+}
+bool WagoHandle::checkWord() {
+ bool retVal;
+ CIEC_WORD value;
+ get(value);
+ retVal = (value != *static_cast<CIEC_WORD*>(mLastValue));
+ mLastValue->setValue(value);
+ return retVal;
+}
diff --git a/src/modules/wagokbus/modular/wagoHandle.h b/src/modules/wagokbus/modular/wagoHandle.h
new file mode 100644
index 0000000..78c8a88
--- /dev/null
+++ b/src/modules/wagokbus/modular/wagoHandle.h
@@ -0,0 +1,58 @@
+/*************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *************************************************************************/
+
+#ifndef SRC_MODULES_WAGOKBUS_MODULAR_WAGOHANDLE_H_
+#define SRC_MODULES_WAGOKBUS_MODULAR_WAGOHANDLE_H_
+
+#include "../../../core/datatypes/forte_word.h"
+#include "../../../core/io/mapper/io_handle.h"
+#include "wagoDeviceController.h"
+
+class WagoHandle : public forte::core::io::IOHandle {
+ public:
+ WagoHandle(WagoDeviceController *paController, CIEC_ANY::EDataTypeID paType, forte::core::io::IOMapper::Direction paDirection,
+ tApplicationDeviceInterface * paAppDevInterface, uint32_t paTaskId, tDeviceId paKBusDeviceId, TForteUInt32 paOutputOffset, TForteUInt32 paInputOffset);
+
+ virtual ~WagoHandle();
+
+ virtual void set(const CIEC_ANY &) override;
+
+ void get(CIEC_ANY &) override;
+
+ bool check();
+
+ private:
+
+ void getBoolean(CIEC_BOOL &paState);
+
+ void getWord(CIEC_WORD &paState);
+
+ void setBoolean(const CIEC_BOOL &paState);
+
+ void setWord(const CIEC_WORD &paState);
+
+ bool checkBoolean();
+
+ bool checkWord();
+
+ tApplicationDeviceInterface *mAppDevInterface;
+ uint32_t mTaskId;
+ tDeviceId mKBusDeviceId;
+ TForteUInt32 mOutputOffset;
+ TForteUInt32 mInputOffset;
+ CIEC_ANY* mLastValue;
+
+ virtual void dropObserver() override;
+
+};
+
+#endif /* SRC_MODULES_WAGOKBUS_MODULAR_WAGOHANDLE_H_ */
diff --git a/src/modules/wagokbus/processinterface.cpp b/src/modules/wagokbus/processinterface.cpp
index 1f3ca37..39cb4f6 100644
--- a/src/modules/wagokbus/processinterface.cpp
+++ b/src/modules/wagokbus/processinterface.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -14,91 +15,86 @@
#include <datatype.h>
#include <extevhandlerhelper.h>
-
DEFINE_HANDLER(WagoPFCProcessInterface::CKBusHandler)
-WagoPFCProcessInterface::WagoPFCProcessInterface(CResource *paSrcRes,
- const SFBInterfaceSpec *paInterfaceSpec,
- const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData,
- TForteByte *paFBVarsData) :
- CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData),
- mSlot(0), mChannel(0), mTerminalInfo(0), mInitialized(false){
+WagoPFCProcessInterface::WagoPFCProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec,
+ const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData, TForteByte *paFBVarsData) :
+ CProcessInterfaceBase(paSrcRes, paInterfaceSpec, paInstanceNameId, paFBConnData, paFBVarsData), mSlot(0), mChannel(0), mTerminalInfo(0), mInitialized(false) {
}
-
-WagoPFCProcessInterface::~WagoPFCProcessInterface(){
+WagoPFCProcessInterface::~WagoPFCProcessInterface() {
deinitialise();
}
-bool WagoPFCProcessInterface::initialise(bool paInput){
+bool WagoPFCProcessInterface::initialise(bool paInput) {
mInitialized = false;
std::vector<std::string> paramsList(generateParameterList());
char *pBuffer;
if(!paramsList.empty()) {
- mSlot = strtol(paramsList[0].c_str(),&pBuffer,10);
- mChannel= strtol(paramsList[1].c_str(),&pBuffer,10);
+ mSlot = strtol(paramsList[0].c_str(), &pBuffer, 10);
+ mChannel = strtol(paramsList[1].c_str(), &pBuffer, 10);
}
- if((getExtEvHandler<CKBusHandler>(*this).getTerminalId(mSlot))){
- mTerminalInfo = getExtEvHandler<CKBusHandler>(*this).getTerminalInfo(mSlot);
- if(0 != mTerminalInfo){
- if((paInput) && (getDO(2)->getDataTypeID() == CIEC_ANY::e_BOOL)){
+ if((getExtEvHandler<CKBusHandler>(*this).isIdValid(static_cast<TForteUInt8>(mSlot)))) {
+ mTerminalInfo = getExtEvHandler<CKBusHandler>(*this).getTerminalInfo(static_cast<TForteUInt8>(mSlot));
+ if(0 != mTerminalInfo) {
+ if((paInput) && (getDO(2)->getDataTypeID() == CIEC_ANY::e_BOOL)) {
getExtEvHandler<CKBusHandler>(*this).registerKBusReadFB(this);
}
QO() = QI();
- if(!getExtEvHandler<CKBusHandler>(*this).isAlive()){
+ if(!getExtEvHandler<CKBusHandler>(*this).isAlive()) {
getExtEvHandler<CKBusHandler>(*this).start();
}
mInitialized = true;
setEventChainExecutor(m_poInvokingExecEnv);
- return mInitialized;
}
}
+ return mInitialized;
}
-bool WagoPFCProcessInterface::deinitialise(){
+bool WagoPFCProcessInterface::deinitialise() {
getExtEvHandler<CKBusHandler>(*this).unregisterKBusReadFB(this);
return true;
}
-bool WagoPFCProcessInterface::readPin(){
+bool WagoPFCProcessInterface::readPin() {
return true;
}
-bool WagoPFCProcessInterface::writePin(){
+bool WagoPFCProcessInterface::writePin() {
getExtEvHandler<CKBusHandler>(*this).writeOutputDataBitToKBus(mTerminalInfo, mChannel, OUT_X());
return true;
}
-bool WagoPFCProcessInterface::readWord(){
+bool WagoPFCProcessInterface::readWord() {
TForteWord inDataWord(0);
getExtEvHandler<CKBusHandler>(*this).readInputDataWordfromKBus(mTerminalInfo, mChannel, &inDataWord);
IN_W() = inDataWord;
return true;
}
-bool WagoPFCProcessInterface::writeWord(){
+bool WagoPFCProcessInterface::writeWord() {
getExtEvHandler<CKBusHandler>(*this).writeOutputDataWordToKBus(mTerminalInfo, mChannel, OUT_W());
return true;
}
-bool WagoPFCProcessInterface::checkInputData(){
+bool WagoPFCProcessInterface::checkInputData() {
bool retVal = false;
bool inDataBool(false);
getExtEvHandler<CKBusHandler>(*this).readInputDataBitfromKBus(mTerminalInfo, mChannel, &inDataBool);
- if (inDataBool != IN_X()){
+ if(inDataBool != IN_X()) {
IN_X() = inDataBool;
retVal = true;
}
return retVal;
}
-WagoPFCProcessInterface::CKBusHandler::CKBusHandler(CDeviceExecution& paDeviceExecution) : CExternalEventHandler(paDeviceExecution),
- mTaskId(0){ // 0 has been taken from example may needs to be rechecked
+WagoPFCProcessInterface::CKBusHandler::CKBusHandler(CDeviceExecution& paDeviceExecution) :
+ CExternalEventHandler(paDeviceExecution), mTaskId(0) { // 0 has been taken from example may needs to be rechecked
tDeviceInfo deviceList[10]; // the list of devices given by the ADI
size_t nrDevicesFound; // number of devices found
mAppDevInterface = adi_GetApplicationInterface();
@@ -107,12 +103,12 @@
mAppDevInterface->GetDeviceList(sizeof(deviceList), deviceList, &nrDevicesFound);
// find kbus device
- for(size_t i = 0; i < nrDevicesFound; ++i){
- if(strcmp(deviceList[i].DeviceName, "libpackbus") == 0){
+ for(size_t i = 0; i < nrDevicesFound; ++i) {
+ if(strcmp(deviceList[i].DeviceName, "libpackbus") == 0) {
mKBusDeviceId = deviceList[i].DeviceId;
- if(mAppDevInterface->OpenDevice(mKBusDeviceId) == DAL_SUCCESS){
- if(loadTerminalInformation()){
- return; //we successfully initialized everything so we can return
+ if(mAppDevInterface->OpenDevice(mKBusDeviceId) == DAL_SUCCESS) {
+ if(loadTerminalInformation()) {
+ return; //we successfully initialized everything so we can return
}
}
}
@@ -122,120 +118,109 @@
closeKBusInterface();
}
- WagoPFCProcessInterface::CKBusHandler::~CKBusHandler(){
- closeKBusInterface();
- }
+WagoPFCProcessInterface::CKBusHandler::~CKBusHandler() {
+ closeKBusInterface();
+}
- bool WagoPFCProcessInterface::CKBusHandler::isKBusRunning(){
- return ((isAlive()) && (mKBusDeviceId != scmInvalidDeviceId));
- }
+bool WagoPFCProcessInterface::CKBusHandler::isKBusRunning() {
+ return ((isAlive()) && (mKBusDeviceId != scmInvalidDeviceId));
+}
- bool WagoPFCProcessInterface::CKBusHandler::loadTerminalInformation(){
- bool bRetVal = false;
+bool WagoPFCProcessInterface::CKBusHandler::loadTerminalInformation() {
+ bool bRetVal = false;
- if(KbusInfo_Failed != ldkc_KbusInfo_Create()){
- if(KbusInfo_Failed != ldkc_KbusInfo_GetTerminalInfo(OS_ARRAY_SIZE(mTerminalDescription), mTerminalDescription, &mTerminalCount)){
- if(KbusInfo_Failed != ldkc_KbusInfo_GetTerminalList(OS_ARRAY_SIZE(mTerminalIds), mTerminalIds, NULL)){
- bRetVal = true;
- }
- else{
- DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_GetTerminalList() failed\n");
- }
- }
- else{
- DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_GetTerminalInfo() failed\n");
- }
- bRetVal = true;
- }else{
- DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_Create() failed\n");
+ if(KbusInfo_Failed != ldkc_KbusInfo_Create()) {
+ if(KbusInfo_Failed != ldkc_KbusInfo_GetTerminalInfo(OS_ARRAY_SIZE(mTerminalDescription), mTerminalDescription, &mTerminalCount)) {
+ if(KbusInfo_Failed != ldkc_KbusInfo_GetTerminalList(OS_ARRAY_SIZE(mTerminalIds), mTerminalIds, NULL)) {
+ bRetVal = true;
+ } else {
+ DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_GetTerminalList() failed\n");
+ }
+ } else {
+ DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_GetTerminalInfo() failed\n");
+ }
+ bRetVal = true;
+ } else {
+ DEVLOG_ERROR("CKBusHandler: ldkc_KbusInfo_Create() failed\n");
}
- if(!bRetVal){
- ldkc_KbusInfo_Destroy();
+ if(!bRetVal) {
+ ldkc_KbusInfo_Destroy();
}
return bRetVal;
}
-bool WagoPFCProcessInterface::CKBusHandler::getTerminalId(TForteUInt8 paSlot){
- u16 unRetVal = 0;
- bool retVal = false;
- if(paSlot <= mTerminalCount){
- unRetVal = mTerminalIds[paSlot];
- retVal = true;
- }
- return retVal;
+bool WagoPFCProcessInterface::CKBusHandler::isIdValid(TForteUInt8 paSlot) {
+ return (paSlot <= mTerminalCount);
}
-tldkc_KbusInfo_TerminalInfo *WagoPFCProcessInterface::CKBusHandler::getTerminalInfo(TForteUInt8 paSlot){
+tldkc_KbusInfo_TerminalInfo *WagoPFCProcessInterface::CKBusHandler::getTerminalInfo(TForteUInt8 paSlot) {
tldkc_KbusInfo_TerminalInfo *pstRetVal = 0;
- if(paSlot <= mTerminalCount){
+ if(paSlot <= mTerminalCount) {
pstRetVal = &(mTerminalDescription[paSlot]);
}
return pstRetVal;
}
-void WagoPFCProcessInterface::CKBusHandler::run(){
+void WagoPFCProcessInterface::CKBusHandler::run() {
//TODO add thread priority settings
//bool retVal= false;
tApplicationStateChangedEvent stEvent;
// Set application state to "Running" to drive kbus by ourselves.
stEvent.State = ApplicationState_Running;
- if(DAL_SUCCESS == mAppDevInterface->ApplicationStateChanged(stEvent)){
- while(isAlive()){
- CThread::sleepThread(10); // wait 10 ms TODO make this configurable
- if(!triggerKBusCycle()){
- //we have severe problem exit KBus handling thread
- //TODO check how can we recover or at least inform the user
- break;
- }
- // read inputs inform FBs
- updateReadData();
+ if(DAL_SUCCESS == mAppDevInterface->ApplicationStateChanged(stEvent)) {
+ while(isAlive()) {
+ CThread::sleepThread(10); // wait 10 ms TODO make this configurable
+ if(!triggerKBusCycle()) {
+ //we have severe problem exit KBus handling thread
+ //TODO check how can we recover or at least inform the user
+ break;
+ }
+ // read inputs inform FBs
+ updateReadData();
}
- }
- else{
+ } else {
DEVLOG_ERROR("CKBusHandler: Set application state to 'Running' failed\n");
}
closeKBusInterface();
}
-bool WagoPFCProcessInterface::CKBusHandler::triggerKBusCycle(){
+bool WagoPFCProcessInterface::CKBusHandler::triggerKBusCycle() {
bool bRetVal = false;
uint32_t unPushRetVal = 0;
- if(DAL_SUCCESS == mAppDevInterface->CallDeviceSpecificFunction("libpackbus_Push", &unPushRetVal)){
- if(DAL_SUCCESS == unPushRetVal){
+ if(DAL_SUCCESS == mAppDevInterface->CallDeviceSpecificFunction("libpackbus_Push", &unPushRetVal)) {
+ if(DAL_SUCCESS == unPushRetVal) {
mAppDevInterface->WatchdogTrigger();
bRetVal = true;
- }
- else{
+ } else {
DEVLOG_ERROR("CKBusHandler: Function 'libpackbus_Push' failed\n");
}
- }
- else{
+ } else {
DEVLOG_ERROR("CKBusHandler: CallDeviceSpecificFunction for 'libpackbus_Push' failed\n");
}
return bRetVal;
}
-std::vector<std::string> WagoPFCProcessInterface::generateParameterList(){
- std:: stringstream streamBuf(std::string(PARAMS().getValue()));
- std:: vector<std::string> retVal;
- std:: string segment;
+std::vector<std::string> WagoPFCProcessInterface::generateParameterList() {
+ std::stringstream streamBuf(std::string(PARAMS().getValue()));
+ std::vector<std::string> retVal;
+ std::string segment;
- while(std::getline(streamBuf, segment, '.')){ //seperate the PARAMS input by '.' for easier processing
+ while(std::getline(streamBuf, segment, '.')) { //seperate the PARAMS input by '.' for easier processing
retVal.push_back(segment);
}
return retVal;
}
-void WagoPFCProcessInterface::CKBusHandler::updateReadData(){
+void WagoPFCProcessInterface::CKBusHandler::updateReadData() {
//long pa_Value = strtol(m_acIndata, NULL, 16);
mReadFBListSync.lock();
mAppDevInterface->ReadStart(mKBusDeviceId, mTaskId); /* lock PD-In data */
TReadFBContainer::Iterator itEnd(mReadFBList.end());
- for(TReadFBContainer::Iterator itRunner = mReadFBList.begin(); itRunner != itEnd; ++itRunner){
- if((*itRunner)->checkInputData()){
+ for(TReadFBContainer::Iterator itRunner = mReadFBList.begin(); itRunner != itEnd; ++itRunner) {
+ if((*itRunner)->checkInputData()) {
// If data has changed, give the indication event
startNewEventChain(*itRunner);
}
@@ -245,24 +230,23 @@
mReadFBListSync.unlock();
}
-void WagoPFCProcessInterface::CKBusHandler::registerKBusReadFB(WagoPFCProcessInterface *paFB){
+void WagoPFCProcessInterface::CKBusHandler::registerKBusReadFB(WagoPFCProcessInterface *paFB) {
mReadFBListSync.lock();
mReadFBList.pushBack(paFB);
mReadFBListSync.unlock();
}
-void WagoPFCProcessInterface::CKBusHandler::unregisterKBusReadFB(WagoPFCProcessInterface *paFB){
+void WagoPFCProcessInterface::CKBusHandler::unregisterKBusReadFB(WagoPFCProcessInterface *paFB) {
mReadFBListSync.lock();
TReadFBContainer::Iterator itRunner(mReadFBList.begin());
TReadFBContainer::Iterator itRefNode(mReadFBList.end());
TReadFBContainer::Iterator itEnd(mReadFBList.end());
- while(itRunner != itEnd){
- if(*itRunner == paFB){
- if(itRefNode == itEnd){
+ while(itRunner != itEnd) {
+ if(*itRunner == paFB) {
+ if(itRefNode == itEnd) {
mReadFBList.popFront();
- }
- else{
+ } else {
mReadFBList.eraseAfter(itRefNode);
}
break;
@@ -275,35 +259,37 @@
mReadFBListSync.unlock();
}
-void WagoPFCProcessInterface::CKBusHandler::writeOutputDataBitToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, bool paOutDataBool){
+void WagoPFCProcessInterface::CKBusHandler::writeOutputDataBitToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, bool paOutDataBool) {
mAppDevInterface->WriteStart(mKBusDeviceId, mTaskId);
mAppDevInterface->WriteBool(mKBusDeviceId, mTaskId, ((paTerminal->OffsetOutput_bits) + paChannel), paOutDataBool);
mAppDevInterface->WriteEnd(mKBusDeviceId, mTaskId);
}
-void WagoPFCProcessInterface::CKBusHandler::readInputDataBitfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, bool *paInDataBool){
+void WagoPFCProcessInterface::CKBusHandler::readInputDataBitfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, bool *paInDataBool) {
mAppDevInterface->ReadBool(mKBusDeviceId, mTaskId, ((paTerminal->OffsetInput_bits) + paChannel), paInDataBool);
}
-void WagoPFCProcessInterface::CKBusHandler::readInputDataWordfromKBus( tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, TForteWord *paInDataWord){
+void WagoPFCProcessInterface::CKBusHandler::readInputDataWordfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel,
+ TForteWord *paInDataWord) {
TForteByte InData[2];
mAppDevInterface->ReadStart(mKBusDeviceId, mTaskId); /* lock PD-In data */
- mAppDevInterface->ReadBytes(mKBusDeviceId, mTaskId, ((paTerminal->OffsetInput_bits) + (paChannel*2)),2, InData);
+ mAppDevInterface->ReadBytes(mKBusDeviceId, mTaskId, ((paTerminal->OffsetInput_bits) + (paChannel * 2)), 2, InData);
mAppDevInterface->ReadEnd(mKBusDeviceId, mTaskId); /* unlock PD-In data */
*paInDataWord = static_cast<TForteWord>((static_cast<TForteWord>(InData[1]) << 8) + (static_cast<TForteWord>(InData[0])));
}
-void WagoPFCProcessInterface::CKBusHandler::writeOutputDataWordToKBus( tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, TForteWord paOutDataWord){
+void WagoPFCProcessInterface::CKBusHandler::writeOutputDataWordToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel,
+ TForteWord paOutDataWord) {
TForteByte outData[2];
- outData[0] = static_cast <TForteByte> (paOutDataWord & 0x00FF);
- outData[1] = static_cast <TForteByte> (paOutDataWord >> 8);
+ outData[0] = static_cast<TForteByte>(paOutDataWord & 0x00FF);
+ outData[1] = static_cast<TForteByte>(paOutDataWord >> 8);
mAppDevInterface->WriteStart(mKBusDeviceId, mTaskId);
- mAppDevInterface->WriteBytes(mKBusDeviceId, mTaskId, ((paTerminal->OffsetOutput_bits) + (paChannel*2)), 2, outData);
+ mAppDevInterface->WriteBytes(mKBusDeviceId, mTaskId, ((paTerminal->OffsetOutput_bits) + (paChannel * 2)), 2, outData);
mAppDevInterface->WriteEnd(mKBusDeviceId, mTaskId);
}
-void WagoPFCProcessInterface::CKBusHandler::closeKBusInterface(){
- if(0 != mAppDevInterface){
+void WagoPFCProcessInterface::CKBusHandler::closeKBusInterface() {
+ if(0 != mAppDevInterface) {
mAppDevInterface->CloseDevice(mKBusDeviceId); // close kbus device
mAppDevInterface->Exit(); // disconnect ADI-Interface
mKBusDeviceId = scmInvalidDeviceId;
@@ -311,15 +297,15 @@
}
}
-void WagoPFCProcessInterface::CKBusHandler::enableHandler(void){
+void WagoPFCProcessInterface::CKBusHandler::enableHandler(void) {
}
-void WagoPFCProcessInterface::CKBusHandler::disableHandler(void){
+void WagoPFCProcessInterface::CKBusHandler::disableHandler(void) {
}
-void WagoPFCProcessInterface::CKBusHandler::setPriority(int paPriority){
+void WagoPFCProcessInterface::CKBusHandler::setPriority(int) {
}
-int WagoPFCProcessInterface::CKBusHandler::getPriority(void) const{
+int WagoPFCProcessInterface::CKBusHandler::getPriority(void) const {
return 0;
}
diff --git a/src/modules/wagokbus/processinterface.h b/src/modules/wagokbus/processinterface.h
index 67572a1..ff6f23c 100644
--- a/src/modules/wagokbus/processinterface.h
+++ b/src/modules/wagokbus/processinterface.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Milan Vathoopan, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -32,69 +33,64 @@
#include <ldkc_kbus_register_communication.h>
}
-class WagoPFCProcessInterface : public CProcessInterfaceBase{
+class WagoPFCProcessInterface : public CProcessInterfaceBase {
public:
// wago PFC process interface declaration
- WagoPFCProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec,
- const CStringDictionary::TStringId paInstanceNameId, TForteByte *paFBConnData,
- TForteByte *paFBVarsData);
+ WagoPFCProcessInterface(CResource *paSrcRes, const SFBInterfaceSpec *paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId,
+ TForteByte *paFBConnData, TForteByte *paFBVarsData);
virtual ~WagoPFCProcessInterface();
// cppcheck-suppress noConstructor
- class CKBusHandler : public CExternalEventHandler, public CThread{
- DECLARE_HANDLER(CKBusHandler)
+ class CKBusHandler : public CExternalEventHandler, public CThread {
+ DECLARE_HANDLER(CKBusHandler)
- public:
- //!KBus interface handling is up and running correctly
- bool isKBusRunning();
- //bool onKBusCylce(WagoPFCProcessInterface &pa_roKBusHandler); can be used for more complex kbus handling
- bool getTerminalId(TForteUInt8 paSlot);
- tldkc_KbusInfo_TerminalInfo *getTerminalInfo(TForteUInt8 paSlot);
- void registerKBusReadFB(WagoPFCProcessInterface *paFB);
- void unregisterKBusReadFB(WagoPFCProcessInterface *paFB);
- void writeOutputDataBitToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32,
- bool paOutDataBool);
- void writeOutputDataWordToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal,
- TForteUInt32 paChannel, TForteWord paOutDataWord);
- void readInputDataBitfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal,
- TForteUInt32 paChannel, bool *paInDataBool);
- void readInputDataWordfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal,
- TForteUInt32 paChannel, TForteWord *paInDataWord);
- virtual void run();
- /*!Go through the read list notifying the registered FBs on the new cycle allowing
- * them to update their data and if necessary activate an event chain*/
+ public:
+ //!KBus interface handling is up and running correctly
+ bool isKBusRunning();
+ //bool onKBusCylce(WagoPFCProcessInterface &pa_roKBusHandler); can be used for more complex kbus handling
+ bool isIdValid(TForteUInt8 paSlot);
+ tldkc_KbusInfo_TerminalInfo *getTerminalInfo(TForteUInt8 paSlot);
+ void registerKBusReadFB(WagoPFCProcessInterface *paFB);
+ void unregisterKBusReadFB(WagoPFCProcessInterface *paFB);
+ void writeOutputDataBitToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32, bool paOutDataBool);
+ void writeOutputDataWordToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, TForteWord paOutDataWord);
+ void readInputDataBitfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, bool *paInDataBool);
+ void readInputDataWordfromKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, TForteWord *paInDataWord);
+ virtual void run();
+ /*!Go through the read list notifying the registered FBs on the new cycle allowing
+ * them to update their data and if necessary activate an event chain*/
- /* functions needed for the external event handler interface */
- void enableHandler(void);
- void disableHandler(void);
- void setPriority(int paPriority);
- int getPriority(void) const;
+ /* functions needed for the external event handler interface */
+ void enableHandler(void);
+ void disableHandler(void);
+ void setPriority(int paPriority);
+ int getPriority(void) const;
- private:
- // Private methods
- void updateReadData();
- void closeKBusInterface();
- bool triggerKBusCycle();
- bool loadTerminalInformation();
+ private:
+ // Private methods
+ void updateReadData();
+ void closeKBusInterface();
+ bool triggerKBusCycle();
+ bool loadTerminalInformation();
- //Valid device ids are always greater than 0
- typedef CSinglyLinkedList<WagoPFCProcessInterface *> TReadFBContainer;
+ //Valid device ids are always greater than 0
+ typedef CSinglyLinkedList<WagoPFCProcessInterface *> TReadFBContainer;
- static const tDeviceId scmInvalidDeviceId = -1;
+ static const tDeviceId scmInvalidDeviceId = -1;
- TReadFBContainer mReadFBList;
- CSyncObject mReadFBListSync;
+ TReadFBContainer mReadFBList;
+ CSyncObject mReadFBListSync;
- //Data types for KBus Search
- tApplicationDeviceInterface * mAppDevInterface;
- uint32_t mTaskId;
- tDeviceId mKBusDeviceId;
+ //Data types for KBus Search
+ tApplicationDeviceInterface * mAppDevInterface;
+ uint32_t mTaskId;
+ tDeviceId mKBusDeviceId;
- /*KBus Terminal information */
- size_t mTerminalCount;
- u16 mTerminalIds[LDKC_KBUS_TERMINAL_COUNT_MAX];
- tldkc_KbusInfo_TerminalInfo mTerminalDescription[LDKC_KBUS_TERMINAL_COUNT_MAX];
- };
+ /*KBus Terminal information */
+ size_t mTerminalCount;
+ u16 mTerminalIds[LDKC_KBUS_TERMINAL_COUNT_MAX];
+ tldkc_KbusInfo_TerminalInfo mTerminalDescription[LDKC_KBUS_TERMINAL_COUNT_MAX];
+ };
protected:
// Protected member variables
diff --git a/src/modules/xquery/CMakeLists.txt b/src/modules/xquery/CMakeLists.txt
index c67d3ad..7e86cd6 100644
--- a/src/modules/xquery/CMakeLists.txt
+++ b/src/modules/xquery/CMakeLists.txt
@@ -1,5 +1,5 @@
# *********************************************************************
-# * Copyright (c) 2017 fortiss GmbH
+# Copyright (c) 2017 fortiss GmbH
# *
# * This program and the accompanying materials are made
# * available under the terms of the Eclipse Public License 2.0
diff --git a/src/stdfblib/CMakeLists.txt b/src/stdfblib/CMakeLists.txt
index be8fa7a..cd926a7 100644
--- a/src/stdfblib/CMakeLists.txt
+++ b/src/stdfblib/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010, 2011 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2010, 2011 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# * Johannes Messmer - add IO directory
# *******************************************************************************/
diff --git a/src/stdfblib/events/ARTimeOut.cpp b/src/stdfblib/events/ARTimeOut.cpp
index 8328b9b..91faac2 100644
--- a/src/stdfblib/events/ARTimeOut.cpp
+++ b/src/stdfblib/events/ARTimeOut.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/ARTimeOut.h b/src/stdfblib/events/ARTimeOut.h
index 0607853..8206920 100644
--- a/src/stdfblib/events/ARTimeOut.h
+++ b/src/stdfblib/events/ARTimeOut.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/ATimeOut.cpp b/src/stdfblib/events/ATimeOut.cpp
index 8aa2819..3c81d9e 100644
--- a/src/stdfblib/events/ATimeOut.cpp
+++ b/src/stdfblib/events/ATimeOut.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/ATimeOut.h b/src/stdfblib/events/ATimeOut.h
index 5771e93..19a797b 100644
--- a/src/stdfblib/events/ATimeOut.h
+++ b/src/stdfblib/events/ATimeOut.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/CMakeLists.txt b/src/stdfblib/events/CMakeLists.txt
index cfcae8f..a4eb1c9 100644
--- a/src/stdfblib/events/CMakeLists.txt
+++ b/src/stdfblib/events/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2014 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl, Monika Wenger
+# Copyright (c) 2010 - 2014 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl, Monika Wenger
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
@@ -22,4 +23,4 @@
forte_add_sourcefile_hcpp(E_CYCLE E_DEMUX E_F_TRIG E_PERMIT)
forte_add_sourcefile_hcpp(E_RDELAY E_RESTART E_R_TRIG E_SPLIT E_SWITCH)
forte_add_sourcefile_hcpp(GEN_E_DEMUX GEN_E_MUX)
-forte_add_sourcefile_hcpp(ATimeOut E_TimeOut ARTimeOut E_RTimeOut)
+forte_add_sourcefile_hcpp(ATimeOut E_TimeOut ARTimeOut E_RTimeOut E_T_FF)
diff --git a/src/stdfblib/events/E_CTD.cpp b/src/stdfblib/events/E_CTD.cpp
index eb3512b..b25c2b4 100644
--- a/src/stdfblib/events/E_CTD.cpp
+++ b/src/stdfblib/events/E_CTD.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2014 ACIN
* 2019 Johannes Kepler University Linz
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_CTD.h b/src/stdfblib/events/E_CTD.h
index 6b1a4b0..6206127 100644
--- a/src/stdfblib/events/E_CTD.h
+++ b/src/stdfblib/events/E_CTD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_CTU.cpp b/src/stdfblib/events/E_CTU.cpp
index 1e6732a..cf9f983 100644
--- a/src/stdfblib/events/E_CTU.cpp
+++ b/src/stdfblib/events/E_CTU.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians, Ingo Hegny
diff --git a/src/stdfblib/events/E_CTU.h b/src/stdfblib/events/E_CTU.h
index d04e731..f14e7db 100644
--- a/src/stdfblib/events/E_CTU.h
+++ b/src/stdfblib/events/E_CTU.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_CTUD.cpp b/src/stdfblib/events/E_CTUD.cpp
index e41f63d..c0ab70a 100644
--- a/src/stdfblib/events/E_CTUD.cpp
+++ b/src/stdfblib/events/E_CTUD.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
* 2019 Johannes Kepler University Linz
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_CTUD.h b/src/stdfblib/events/E_CTUD.h
index 10013fa..0e455e3 100644
--- a/src/stdfblib/events/E_CTUD.h
+++ b/src/stdfblib/events/E_CTUD.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_CYCLE.cpp b/src/stdfblib/events/E_CYCLE.cpp
index 909c5ae..5055f5f 100644
--- a/src/stdfblib/events/E_CYCLE.cpp
+++ b/src/stdfblib/events/E_CYCLE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_CYCLE.h b/src/stdfblib/events/E_CYCLE.h
index 38f1de8..0504373 100644
--- a/src/stdfblib/events/E_CYCLE.h
+++ b/src/stdfblib/events/E_CYCLE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_DELAY.cpp b/src/stdfblib/events/E_DELAY.cpp
index 382aec2..954b8b3 100644
--- a/src/stdfblib/events/E_DELAY.cpp
+++ b/src/stdfblib/events/E_DELAY.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
@@ -27,10 +28,8 @@
mActive = false;
}
else{
- if(csm_nEventSTARTID == pa_nEIID ){
- if(!mActive){
- setEventChainExecutor(m_poInvokingExecEnv); // E_DELAY will execute in the same thread on as from where it has been triggered.
- }
+ if(csm_nEventSTARTID == pa_nEIID && !mActive) {
+ setEventChainExecutor(m_poInvokingExecEnv); // E_DELAY will execute in the same thread on as from where it has been triggered.
}
CTimedFB::executeEvent(pa_nEIID);
}
diff --git a/src/stdfblib/events/E_DELAY.h b/src/stdfblib/events/E_DELAY.h
index 60bfa3f..c678962 100644
--- a/src/stdfblib/events/E_DELAY.h
+++ b/src/stdfblib/events/E_DELAY.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_DEMUX.cpp b/src/stdfblib/events/E_DEMUX.cpp
index 2c39d67..fb30066 100644
--- a/src/stdfblib/events/E_DEMUX.cpp
+++ b/src/stdfblib/events/E_DEMUX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians, Ingo Hegny
@@ -44,11 +45,10 @@
};
void E_DEMUX::executeEvent(int pa_nEIID){
- if(scm_nEventEIID == pa_nEIID){
- if(K() <= 3){
- sendOutputEvent( K()); // the value of K corresponds to the outputevent ID;
- // as a result of this we could make a generic E_DEMUX
- // and even a generic E_MUX
- }
+ if(scm_nEventEIID == pa_nEIID && K() <= 3) {
+ sendOutputEvent(K());
+ // the value of K corresponds to the outputevent ID;
+ // as a result of this we could make a generic E_DEMUX
+ // and even a generic E_MUX
}
}
diff --git a/src/stdfblib/events/E_DEMUX.h b/src/stdfblib/events/E_DEMUX.h
index c7f8ba8..476c5c5 100644
--- a/src/stdfblib/events/E_DEMUX.h
+++ b/src/stdfblib/events/E_DEMUX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_D_FF.cpp b/src/stdfblib/events/E_D_FF.cpp
index e8256ab..f1c6ebf 100644
--- a/src/stdfblib/events/E_D_FF.cpp
+++ b/src/stdfblib/events/E_D_FF.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians, Ingo Hegny
@@ -48,10 +49,8 @@
};
void E_D_FF::executeEvent(int pa_nEIID){
- if(scm_nEventCLKID == pa_nEIID){
- if(D() != Q()){
- Q() = D();
- sendOutputEvent( scm_nEventEOID);
- }
+ if(scm_nEventCLKID == pa_nEIID && D() != Q()) {
+ Q() = D();
+ sendOutputEvent(scm_nEventEOID);
}
}
diff --git a/src/stdfblib/events/E_D_FF.h b/src/stdfblib/events/E_D_FF.h
index 0d120d1..d382ed8 100644
--- a/src/stdfblib/events/E_D_FF.h
+++ b/src/stdfblib/events/E_D_FF.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_F_TRIG.cpp b/src/stdfblib/events/E_F_TRIG.cpp
index 1786b88..5951917 100644
--- a/src/stdfblib/events/E_F_TRIG.cpp
+++ b/src/stdfblib/events/E_F_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2007 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny
diff --git a/src/stdfblib/events/E_F_TRIG.h b/src/stdfblib/events/E_F_TRIG.h
index 9d87bf0..bf2db68 100644
--- a/src/stdfblib/events/E_F_TRIG.h
+++ b/src/stdfblib/events/E_F_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2007 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny
diff --git a/src/stdfblib/events/E_MERGE.cpp b/src/stdfblib/events/E_MERGE.cpp
index b15563c..1988a50 100644
--- a/src/stdfblib/events/E_MERGE.cpp
+++ b/src/stdfblib/events/E_MERGE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_MERGE.h b/src/stdfblib/events/E_MERGE.h
index 49ff339..c4b69c9 100644
--- a/src/stdfblib/events/E_MERGE.h
+++ b/src/stdfblib/events/E_MERGE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_PERMIT.cpp b/src/stdfblib/events/E_PERMIT.cpp
index 46647b0..ea1b28a 100644
--- a/src/stdfblib/events/E_PERMIT.cpp
+++ b/src/stdfblib/events/E_PERMIT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_PERMIT.h b/src/stdfblib/events/E_PERMIT.h
index b94d3e8..0148675 100644
--- a/src/stdfblib/events/E_PERMIT.h
+++ b/src/stdfblib/events/E_PERMIT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_RDELAY.cpp b/src/stdfblib/events/E_RDELAY.cpp
index 1547e2e..545a7d5 100644
--- a/src/stdfblib/events/E_RDELAY.cpp
+++ b/src/stdfblib/events/E_RDELAY.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_RDELAY.h b/src/stdfblib/events/E_RDELAY.h
index 77d0246..e3beeb4 100644
--- a/src/stdfblib/events/E_RDELAY.h
+++ b/src/stdfblib/events/E_RDELAY.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_REND.cpp b/src/stdfblib/events/E_REND.cpp
index 0d68d96..eeaa69b 100644
--- a/src/stdfblib/events/E_REND.cpp
+++ b/src/stdfblib/events/E_REND.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_REND.h b/src/stdfblib/events/E_REND.h
index 9080da4..80f2192 100644
--- a/src/stdfblib/events/E_REND.h
+++ b/src/stdfblib/events/E_REND.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_RESTART.cpp b/src/stdfblib/events/E_RESTART.cpp
index c772842..6ead5b3 100644
--- a/src/stdfblib/events/E_RESTART.cpp
+++ b/src/stdfblib/events/E_RESTART.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Gerhard Ebenhofer,
@@ -43,16 +44,14 @@
0
};
-void E_RESTART::executeEvent(int pa_nEIID){
- if(cg_nExternalEventID == pa_nEIID){
- if(cg_nInvalidEventID != mEventToSend){
- sendOutputEvent(mEventToSend);
- if(csmSTOPID == mEventToSend){
- //stop event is sent put the FB finally into the stopped state
- CFunctionBlock::changeFBExecutionState(cg_nMGM_CMD_Stop);
- // release semaphore to indicate that the stop event was sent now
- mSuspendSemaphore.inc();
- }
+void E_RESTART::executeEvent(int pa_nEIID) {
+ if(cg_nExternalEventID == pa_nEIID && cg_nInvalidEventID != mEventToSend) {
+ sendOutputEvent(mEventToSend);
+ if(csmSTOPID == mEventToSend) {
+ //stop event is sent put the FB finally into the stopped state
+ CFunctionBlock::changeFBExecutionState(cg_nMGM_CMD_Stop);
+ // release semaphore to indicate that the stop event was sent now
+ mSuspendSemaphore.inc();
}
}
}
diff --git a/src/stdfblib/events/E_RESTART.h b/src/stdfblib/events/E_RESTART.h
index b922521..7a5e3b7 100644
--- a/src/stdfblib/events/E_RESTART.h
+++ b/src/stdfblib/events/E_RESTART.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Martin Melik Merkumians,
diff --git a/src/stdfblib/events/E_RS.cpp b/src/stdfblib/events/E_RS.cpp
index b621dbb..83cde61 100644
--- a/src/stdfblib/events/E_RS.cpp
+++ b/src/stdfblib/events/E_RS.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians, Ingo Hegny
diff --git a/src/stdfblib/events/E_RS.h b/src/stdfblib/events/E_RS.h
index 334e346..583b706 100644
--- a/src/stdfblib/events/E_RS.h
+++ b/src/stdfblib/events/E_RS.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_RTimeOut.cpp b/src/stdfblib/events/E_RTimeOut.cpp
index e374134..b906eff 100644
--- a/src/stdfblib/events/E_RTimeOut.cpp
+++ b/src/stdfblib/events/E_RTimeOut.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_RTimeOut.h b/src/stdfblib/events/E_RTimeOut.h
index bc89e22..b55154a 100644
--- a/src/stdfblib/events/E_RTimeOut.h
+++ b/src/stdfblib/events/E_RTimeOut.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_R_TRIG.cpp b/src/stdfblib/events/E_R_TRIG.cpp
index 6d1fcbb..e117688 100644
--- a/src/stdfblib/events/E_R_TRIG.cpp
+++ b/src/stdfblib/events/E_R_TRIG.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2007 - 2013 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny
diff --git a/src/stdfblib/events/E_R_TRIG.h b/src/stdfblib/events/E_R_TRIG.h
index 71c269e..a830ef4 100644
--- a/src/stdfblib/events/E_R_TRIG.h
+++ b/src/stdfblib/events/E_R_TRIG.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2007 - 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny
diff --git a/src/stdfblib/events/E_SELECT.cpp b/src/stdfblib/events/E_SELECT.cpp
index e38382b..e70fd77 100644
--- a/src/stdfblib/events/E_SELECT.cpp
+++ b/src/stdfblib/events/E_SELECT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_SELECT.h b/src/stdfblib/events/E_SELECT.h
index 6ea8d4a..c07ca82 100644
--- a/src/stdfblib/events/E_SELECT.h
+++ b/src/stdfblib/events/E_SELECT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_SPLIT.cpp b/src/stdfblib/events/E_SPLIT.cpp
index e292855..edfcc8a 100644
--- a/src/stdfblib/events/E_SPLIT.cpp
+++ b/src/stdfblib/events/E_SPLIT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_SPLIT.h b/src/stdfblib/events/E_SPLIT.h
index 643dfb2..bd6b8a3 100644
--- a/src/stdfblib/events/E_SPLIT.h
+++ b/src/stdfblib/events/E_SPLIT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer
diff --git a/src/stdfblib/events/E_SR.cpp b/src/stdfblib/events/E_SR.cpp
index 4696b7e..9f087a0 100644
--- a/src/stdfblib/events/E_SR.cpp
+++ b/src/stdfblib/events/E_SR.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_SR.h b/src/stdfblib/events/E_SR.h
index e637ddc..29168e8 100644
--- a/src/stdfblib/events/E_SR.h
+++ b/src/stdfblib/events/E_SR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Gerhard Ebenhofer,
diff --git a/src/stdfblib/events/E_SWITCH.cpp b/src/stdfblib/events/E_SWITCH.cpp
index cd44015..f4b4ee7 100644
--- a/src/stdfblib/events/E_SWITCH.cpp
+++ b/src/stdfblib/events/E_SWITCH.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians, Ingo Hegny
diff --git a/src/stdfblib/events/E_SWITCH.h b/src/stdfblib/events/E_SWITCH.h
index 4c0fe62..cb35462 100644
--- a/src/stdfblib/events/E_SWITCH.h
+++ b/src/stdfblib/events/E_SWITCH.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny
diff --git a/src/stdfblib/events/E_T_FF.cpp b/src/stdfblib/events/E_T_FF.cpp
new file mode 100644
index 0000000..04fc034
--- /dev/null
+++ b/src/stdfblib/events/E_T_FF.cpp
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2017 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+#include "E_T_FF.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "E_T_FF_gen.cpp"
+#endif
+
+DEFINE_FIRMWARE_FB(FORTE_E_T_FF, g_nStringIdE_T_FF)
+
+const CStringDictionary::TStringId FORTE_E_T_FF::scm_anDataOutputNames[] = {g_nStringIdQ};
+
+const CStringDictionary::TStringId FORTE_E_T_FF::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL};
+
+const TForteInt16 FORTE_E_T_FF::scm_anEIWithIndexes[] = {-1};
+const CStringDictionary::TStringId FORTE_E_T_FF::scm_anEventInputNames[] = {g_nStringIdCLK};
+
+const TDataIOID FORTE_E_T_FF::scm_anEOWith[] = {0, 255};
+const TForteInt16 FORTE_E_T_FF::scm_anEOWithIndexes[] = {0, -1};
+const CStringDictionary::TStringId FORTE_E_T_FF::scm_anEventOutputNames[] = {g_nStringIdEO};
+
+const SFBInterfaceSpec FORTE_E_T_FF::scm_stFBInterfaceSpec = {
+ 1, scm_anEventInputNames, 0, scm_anEIWithIndexes,
+ 1, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 0, 0, 0,
+ 1, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+void FORTE_E_T_FF::alg_TOGGLE(void){
+Q() = !Q();
+}
+
+
+void FORTE_E_T_FF::enterStateSTART(void){
+ m_nECCState = scm_nStateSTART;
+}
+
+void FORTE_E_T_FF::enterStateSET(void){
+ m_nECCState = scm_nStateSET;
+ alg_TOGGLE();
+ sendOutputEvent( scm_nEventEOID);
+}
+
+void FORTE_E_T_FF::executeEvent(int pa_nEIID){
+ bool bTransitionCleared;
+ do{
+ bTransitionCleared = true;
+ switch(m_nECCState){
+ case scm_nStateSTART:
+ if(scm_nEventCLKID == pa_nEIID)
+ enterStateSET();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ case scm_nStateSET:
+ if((1))
+ enterStateSTART();
+ else
+ bTransitionCleared = false; //no transition cleared
+ break;
+ default:
+ DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 1.", m_nECCState.operator TForteUInt16 ());
+ m_nECCState = 0; //0 is always the initial state
+ break;
+ }
+ pa_nEIID = cg_nInvalidEventID; // we have to clear the event after the first check in order to ensure correct behavior
+ }while(bTransitionCleared);
+}
+
+
diff --git a/src/stdfblib/events/E_T_FF.h b/src/stdfblib/events/E_T_FF.h
new file mode 100644
index 0000000..81060d3
--- /dev/null
+++ b/src/stdfblib/events/E_T_FF.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2017 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+#ifndef _E_T_FF_H_
+#define _E_T_FF_H_
+
+#include <basicfb.h>
+#include <forte_bool.h>
+
+class FORTE_E_T_FF: public CBasicFB{
+ DECLARE_FIRMWARE_FB(FORTE_E_T_FF)
+
+private:
+ static const CStringDictionary::TStringId scm_anDataOutputNames[];
+ static const CStringDictionary::TStringId scm_anDataOutputTypeIds[];
+ CIEC_BOOL &Q() {
+ return *static_cast<CIEC_BOOL*>(getDO(0));
+ };
+
+ static const TEventID scm_nEventCLKID = 0;
+ static const TForteInt16 scm_anEIWithIndexes[];
+ static const CStringDictionary::TStringId scm_anEventInputNames[];
+
+ static const TEventID scm_nEventEOID = 0;
+ static const TForteInt16 scm_anEOWithIndexes[];
+ static const TDataIOID scm_anEOWith[];
+ static const CStringDictionary::TStringId scm_anEventOutputNames[];
+
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+
+ FORTE_BASIC_FB_DATA_ARRAY(1, 0, 1, 0, 0);
+ void alg_TOGGLE(void);
+ static const TForteInt16 scm_nStateSTART = 0;
+ static const TForteInt16 scm_nStateSET = 1;
+
+ void enterStateSTART(void);
+ void enterStateSET(void);
+
+ virtual void executeEvent(int pa_nEIID);
+
+public:
+ FORTE_E_T_FF(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) :
+ CBasicFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId,
+ 0, m_anFBConnData, m_anFBVarsData){
+ };
+
+ virtual ~FORTE_E_T_FF(){};
+
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/stdfblib/events/E_TimeOut.cpp b/src/stdfblib/events/E_TimeOut.cpp
index fa8ddd7..e4ef743 100644
--- a/src/stdfblib/events/E_TimeOut.cpp
+++ b/src/stdfblib/events/E_TimeOut.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/E_TimeOut.h b/src/stdfblib/events/E_TimeOut.h
index bfacc09..a2d2b0e 100644
--- a/src/stdfblib/events/E_TimeOut.h
+++ b/src/stdfblib/events/E_TimeOut.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/events/GEN_E_DEMUX.cpp b/src/stdfblib/events/GEN_E_DEMUX.cpp
index 892b290..ce69196 100644
--- a/src/stdfblib/events/GEN_E_DEMUX.cpp
+++ b/src/stdfblib/events/GEN_E_DEMUX.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 - 2015 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Matthias Plasch
@@ -35,10 +36,8 @@
}
void GEN_E_DEMUX::executeEvent(int paEIID){
- if(scm_nEventEIID == paEIID){
- if(K() < m_pstInterfaceSpec->m_nNumEOs){
- sendOutputEvent(K()); // the value of K corresponds to the output event ID;
- }
+ if(scm_nEventEIID == paEIID && K() < m_pstInterfaceSpec->m_nNumEOs) {
+ sendOutputEvent(K()); // the value of K corresponds to the output event ID;
}
}
diff --git a/src/stdfblib/events/GEN_E_DEMUX.h b/src/stdfblib/events/GEN_E_DEMUX.h
index 9526a2e..14c94ad 100644
--- a/src/stdfblib/events/GEN_E_DEMUX.h
+++ b/src/stdfblib/events/GEN_E_DEMUX.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/stdfblib/events/GEN_E_MUX.cpp b/src/stdfblib/events/GEN_E_MUX.cpp
index 2e49603..e9494e5 100644
--- a/src/stdfblib/events/GEN_E_MUX.cpp
+++ b/src/stdfblib/events/GEN_E_MUX.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 - 2015 ACIN, Profactor GmbH, fortiss GmbH
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Matthias Plasch
diff --git a/src/stdfblib/events/GEN_E_MUX.h b/src/stdfblib/events/GEN_E_MUX.h
index 921a8f2..d2cc3e8 100644
--- a/src/stdfblib/events/GEN_E_MUX.h
+++ b/src/stdfblib/events/GEN_E_MUX.h
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
diff --git a/src/stdfblib/io/IB.cpp b/src/stdfblib/io/IB.cpp
index 4eaebfb..9e1e6c5 100644
--- a/src/stdfblib/io/IB.cpp
+++ b/src/stdfblib/io/IB.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/IB.h b/src/stdfblib/io/IB.h
index b05f16b..fddcf2b 100644
--- a/src/stdfblib/io/IB.h
+++ b/src/stdfblib/io/IB.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/ID.cpp b/src/stdfblib/io/ID.cpp
index 6d3d963..9a1558e 100644
--- a/src/stdfblib/io/ID.cpp
+++ b/src/stdfblib/io/ID.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/ID.h b/src/stdfblib/io/ID.h
index 7b19649..2be549b 100644
--- a/src/stdfblib/io/ID.h
+++ b/src/stdfblib/io/ID.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/IL.cpp b/src/stdfblib/io/IL.cpp
index 4a023ad..965757a 100644
--- a/src/stdfblib/io/IL.cpp
+++ b/src/stdfblib/io/IL.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/IL.h b/src/stdfblib/io/IL.h
index 5b14d95..28bd44a 100644
--- a/src/stdfblib/io/IL.h
+++ b/src/stdfblib/io/IL.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/IW.cpp b/src/stdfblib/io/IW.cpp
index e4f0afa..4a8b022 100644
--- a/src/stdfblib/io/IW.cpp
+++ b/src/stdfblib/io/IW.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/IW.h b/src/stdfblib/io/IW.h
index 2c636a5..97392fe 100644
--- a/src/stdfblib/io/IW.h
+++ b/src/stdfblib/io/IW.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/IX.cpp b/src/stdfblib/io/IX.cpp
index 4ca877c..a364fac 100644
--- a/src/stdfblib/io/IX.cpp
+++ b/src/stdfblib/io/IX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Waldemar Eisenmenger, Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/IX.h b/src/stdfblib/io/IX.h
index 6278d81..e61b1ab 100644
--- a/src/stdfblib/io/IX.h
+++ b/src/stdfblib/io/IX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Waldemar Eisenmenger, Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QB.cpp b/src/stdfblib/io/QB.cpp
index 6cd5e3a..8cd6af4 100644
--- a/src/stdfblib/io/QB.cpp
+++ b/src/stdfblib/io/QB.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/QB.h b/src/stdfblib/io/QB.h
index ae886bd..a065444 100644
--- a/src/stdfblib/io/QB.h
+++ b/src/stdfblib/io/QB.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/QD.cpp b/src/stdfblib/io/QD.cpp
index c5fc71d..7bd702f 100644
--- a/src/stdfblib/io/QD.cpp
+++ b/src/stdfblib/io/QD.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QD.h b/src/stdfblib/io/QD.h
index e7dc6fb..101779c 100644
--- a/src/stdfblib/io/QD.h
+++ b/src/stdfblib/io/QD.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015, 2016 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QL.cpp b/src/stdfblib/io/QL.cpp
index 82e1c25..b7f4f0f 100644
--- a/src/stdfblib/io/QL.cpp
+++ b/src/stdfblib/io/QL.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/QL.h b/src/stdfblib/io/QL.h
index 94f2301..b800823 100644
--- a/src/stdfblib/io/QL.h
+++ b/src/stdfblib/io/QL.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - adds intial implememtation
diff --git a/src/stdfblib/io/QW.cpp b/src/stdfblib/io/QW.cpp
index 5207d9d..31da992 100644
--- a/src/stdfblib/io/QW.cpp
+++ b/src/stdfblib/io/QW.cpp
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QW.h b/src/stdfblib/io/QW.h
index 5abf4d4..602b83f 100644
--- a/src/stdfblib/io/QW.h
+++ b/src/stdfblib/io/QW.h
@@ -1,9 +1,10 @@
/*************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Gerd Kainz - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QX.cpp b/src/stdfblib/io/QX.cpp
index 0ee0135..16709ea 100644
--- a/src/stdfblib/io/QX.cpp
+++ b/src/stdfblib/io/QX.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Waldemar Eisenmenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/QX.h b/src/stdfblib/io/QX.h
index 2f84bda..1191005 100644
--- a/src/stdfblib/io/QX.h
+++ b/src/stdfblib/io/QX.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Waldemar Eisenmenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/io/processinterfacebase.h b/src/stdfblib/io/processinterfacebase.h
index d2fa39c..f556a7e 100644
--- a/src/stdfblib/io/processinterfacebase.h
+++ b/src/stdfblib/io/processinterfacebase.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 - 2015 fortiss GmbH, 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/src/stdfblib/ita/CMakeLists.txt b/src/stdfblib/ita/CMakeLists.txt
index 1ec8a45..7c091c5 100644
--- a/src/stdfblib/ita/CMakeLists.txt
+++ b/src/stdfblib/ita/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl
+# Copyright (c) 2010 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
@@ -14,4 +15,7 @@
#############################################################################
SET(SOURCE_GROUP ${SOURCE_GROUP}\\ita)
forte_add_sourcefile_hcpp(DEV_MGR EMB_RES RMT_DEV RMT_RES)
-forte_add_sourcefile_hcpp(ForteBootFileLoader)
+
+if(FORTE_SUPPORT_BOOT_FILE)
+ forte_add_sourcefile_hcpp(ForteBootFileLoader)
+endif(FORTE_SUPPORT_BOOT_FILE)
diff --git a/src/stdfblib/ita/DEV_MGR.cpp b/src/stdfblib/ita/DEV_MGR.cpp
index 8aafa34..66c412d 100644
--- a/src/stdfblib/ita/DEV_MGR.cpp
+++ b/src/stdfblib/ita/DEV_MGR.cpp
@@ -1,676 +1,697 @@
-/*******************************************************************************
- * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Rene Smodic, Thomas Strasser, Gerhard Ebenhofer,
- * Oliver Hummer, Ingo Hegny, Michael Hofmann, Martin Melik Merkumians
- * - initial API and implementation and/or initial documentation
- * Monika Wenger
- * - fix: apostrophes are deleted in parseWriteConnectionData
- * Jens Reimann
- * - Enhance bootfile loading behavior
- * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
- *******************************************************************************/
-#include <string.h>
-#include "DEV_MGR.h"
-#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
-#include "DEV_MGR_gen.cpp"
-#endif
-#include "../../core/device.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "ForteBootFileLoader.h"
-#include "../../core/utils/string_utils.h"
-
-DEFINE_FIRMWARE_FB(DEV_MGR, g_nStringIdDEV_MGR)
-
-const CStringDictionary::TStringId DEV_MGR::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdID, g_nStringIdRESP};
-
-const CStringDictionary::TStringId DEV_MGR::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdSTRING};
-
-const CStringDictionary::TStringId DEV_MGR::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS, g_nStringIdDST, g_nStringIdRQST};
-
-const CStringDictionary::TStringId DEV_MGR::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING};
-
-const TForteInt16 DEV_MGR::scm_anEIWithIndexes[] = {0, -1};
-const TDataIOID DEV_MGR::scm_anEIWith[] = {0, 1, 255};
-const CStringDictionary::TStringId DEV_MGR::scm_anEventInputNames[] = {g_nStringIdINIT, g_nStringIdREQ};
-
-const TDataIOID DEV_MGR::scm_anEOWith[] = {0, 1, 255, 2, 3, 255};
-const TForteInt16 DEV_MGR::scm_anEOWithIndexes[] = {0, -1, 3};
-const CStringDictionary::TStringId DEV_MGR::scm_anEventOutputNames[] = {g_nStringIdINITO, g_nStringIdCNF};
-
-const SFBInterfaceSpec DEV_MGR::scm_stFBInterfaceSpec = {
- 2, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
- 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 3, scm_anDataInputNames, scm_anDataInputTypeIds,
- 4, scm_anDataOutputNames, scm_anDataOutputTypeIds,
- 0, 0
-};
-
-const char * const DEV_MGR::scm_sMGMResponseTexts[13] = { "RDY", "BAD_PARAMS", "LOCAL_TERMINATION", "SYSTEM_TERMINATION", "NOT_READY", "UNSUPPORTED_CMD", "UNSUPPORTED_TYPE", "NO_SUCH_OBJECT", "INVALID_OBJECT", "INVALID_OPERATION", "INVALID_STATE", "OVERFLOW", "INVALID_DST" };
-
-void DEV_MGR::executeEvent(int paEIID){
- if(scm_nEventINITID == paEIID){
-#ifdef FORTE_SUPPORT_BOOT_FILE
- if((true == QI()) && (false == QO())){
- //this is the first time init is called try to load a boot file
- ForteBootFileLoader loader(*this);
- if(loader.isOpen() && LOAD_RESULT_OK == loader.loadBootFile()){
- DEVLOG_INFO("Bootfile correctly loaded\n");
- }
- }
-#endif
- CCommFB::executeEvent(paEIID); //initialize the underlying server FB
- }else{
- if(cg_nExternalEventID == paEIID && //we received a message on the network let the server correctly handle it
- forte::com_infra::e_ProcessDataOk == CCommFB::receiveData()){ //the message was correctly received
- executeRQST();
- //send response
- CCommFB::sendData();
- }
- }
-}
-
-void DEV_MGR::executeRQST(void){
- mCommand.mAdditionalParams.clear();
- EMGMResponse resp = parseAndExecuteMGMCommand(DST().getValue(), RQST().getValue());
-
-#ifdef FORTE_SUPPORT_MONITORING
- if (0 != mCommand.mMonitorResponse.length()) {
- generateMonitorResponse(resp, mCommand);
- } else
-#endif //FORTE_SUPPORT_MONITORING
- if(0 < mCommand.mAdditionalParams.length()){
- generateLongResponse(resp, mCommand);
- }
- else{
- generateResponse(mCommand.mID, resp);
- }
-}
-
-char *DEV_MGR::parseRequest(char *paRequestString, forte::core::SManagementCMD &paCommand){
-//first check if it is an management request
- char *acCommandStart = 0;
- static const int scnCommandLength[] = {7, 7, 6, 5, 5, 6, 5, 6, 6};
-
- if(!strncmp("<Request ID=\"", paRequestString, 13)){
- int i = 13;
- int j;
- paCommand.mID = &(paRequestString[i]);
- for(j = 0; paRequestString[i] != '\"'; ++i, ++j){
- if(j >= 7){
- return 0;
- }
- }
- paRequestString[i] = '\0'; //close ID
- ++i;
- acCommandStart = strchr((&paRequestString[i]), '\"');
- if(acCommandStart != 0){
- acCommandStart++; //this is the real start of the command
- if(!strncmp("CREATE", acCommandStart, 6)){
- paCommand.mCMD = cg_nMGM_CMD_Create_Group;
- }
- else if(!strncmp("DELETE", acCommandStart, 6)){
- paCommand.mCMD = cg_nMGM_CMD_Delete_Group;
- }
- else if(!strncmp("START", acCommandStart, 5)){
- paCommand.mCMD = cg_nMGM_CMD_Start;
- }
- else if(!strncmp("STOP", acCommandStart, 4)){
- paCommand.mCMD = cg_nMGM_CMD_Stop;
- }
- else if(!strncmp("KILL", acCommandStart, 4)){
- paCommand.mCMD = cg_nMGM_CMD_Kill;
- }
- else if(!strncmp("RESET", acCommandStart, 5)){
- paCommand.mCMD = cg_nMGM_CMD_Reset;
- }
- else if(!strncmp("READ", acCommandStart, 4)){
- paCommand.mCMD = cg_nMGM_CMD_Read;
- }
- else if(!strncmp("WRITE", acCommandStart, 5)){
- paCommand.mCMD = cg_nMGM_CMD_Write;
- }
-#ifdef FORTE_SUPPORT_QUERY_CMD
- else if(!strncmp("QUERY", acCommandStart, 5)){
- paCommand.mCMD = cg_nMGM_CMD_Query_Group;
- }
-#endif
- else{
- return 0;
- }
- acCommandStart += scnCommandLength[paCommand.mCMD];
- }
- }
- return acCommandStart;
-}
-
-#ifdef FORTE_DYNAMIC_TYPE_LOAD
-bool DEV_MGR::parseXType(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand, char *paRequestType){
- bool retVal = false;
- size_t nReqLength = strlen((const char *) paRequestType);
- if(!strncmp(paRequestType, paRequestPartLeft, nReqLength)){
- paRequestPartLeft = &(paRequestPartLeft[nReqLength]);
- if('*' != paRequestPartLeft[0]){
- int i = parseIdentifier(paRequestPartLeft, paCommand.mFirstParam);
- paRequestPartLeft = (-1 == i) ? 0 : strchr(&(paRequestPartLeft[i + 1]), '>');
- }
- if(0 != paRequestPartLeft){
- paRequestPartLeft++;
- char* endOfRequest = strchr(paRequestPartLeft, '<');
- *endOfRequest = '\0';
- forte::core::util::transformEscapedXMLToNonEscapedText(paRequestPartLeft);
- paCommand.mAdditionalParams = paRequestPartLeft;
- retVal = true;
- }
- }
- return retVal;
-}
-#endif
-
-bool DEV_MGR::parseFBData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- bool retVal = false;
-
- if(!strncmp("FB Name=\"", paRequestPartLeft, 9)){
- char *acBuf = &(paRequestPartLeft[9]);
- int i = 0;
- if(acBuf[0] != '*'){
- i = parseIdentifier(acBuf, paCommand.mFirstParam);
- acBuf = (-1 == i) ? 0 : strchr(&(acBuf[i + 1]), '\"');
- }
- else{
- acBuf = strchr(&(acBuf[i + 2]), '\"');
- }
-
- if(acBuf != 0){
- if(acBuf[1] != '*'){
- ++acBuf;
- i = parseIdentifier(acBuf, paCommand.mSecondParam);
- if(-1 != i){
- acBuf = strchr(&(acBuf[i + 1]), '\"');
- if(acBuf != 0){
- // We have an application name given
- ++acBuf;
- TForteUInt16 nBufLength = static_cast<TForteUInt16>(strcspn(acBuf, "\"") + 1);
- paCommand.mAdditionalParams.assign(acBuf, nBufLength);
- }
- }
- else{
- return false;
- }
- }
- retVal = true;
- }
- }
- return retVal;
-}
-
-int DEV_MGR::parseIdentifier(char *paIdentifierStart, forte::core::TNameIdentifier &paIdentifier){
- for(char *runner = paIdentifierStart, *start = paIdentifierStart; '\0' != *runner; ++runner){
- if('.' == *runner){
- *runner = '\0';
- if(!paIdentifier.pushBack(CStringDictionary::getInstance().insert(start))){
- return -1;
- }
- *runner = '.';
- start = runner + 1;
- } else if ('"' == *runner){
- *runner = '\0';
- if(!paIdentifier.pushBack(CStringDictionary::getInstance().insert(start))){
- return -1;
- }
- *runner = '"';
- return static_cast<int>(runner - paIdentifierStart);
- }
- }
- return -1;
-}
-
-bool DEV_MGR::parseConnectionData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- bool bRetVal = false;
- if(!strncmp("Connection Source=\"", paRequestPartLeft, sizeof("Connection Source=\"") - 1)){
- int i = parseIdentifier(&(paRequestPartLeft[19]), paCommand.mFirstParam);
- if(-1 != i){
- char *acBuf = strchr(&(paRequestPartLeft[i + 21]), '\"');
- if(acBuf != 0){
- parseIdentifier(&(acBuf[1]), paCommand.mSecondParam);
- bRetVal = (-1 != i);
- }
- }
- }
- return bRetVal;
-}
-
-bool DEV_MGR::parseWriteConnectionData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- bool retVal = false;
- if(!strncmp("Connection Source=\"", paRequestPartLeft, sizeof("Connection Source=\"") - 1)){
- paRequestPartLeft = &(paRequestPartLeft[19]);
-
- char* endOfSource = strchr(paRequestPartLeft, '\"');
- if(0 == endOfSource){
- return false;
- }
- *endOfSource = '\0';
- forte::core::util::transformEscapedXMLToNonEscapedText(paRequestPartLeft);
- paCommand.mAdditionalParams = paRequestPartLeft;
- *endOfSource = '"'; // restore the string
- paRequestPartLeft = strchr(endOfSource + 1, '\"');
- if(0 != paRequestPartLeft){
- retVal = (-1 != parseIdentifier(&paRequestPartLeft[1], paCommand.mFirstParam));
- }
- }
- return retVal;
-}
-
-void DEV_MGR::parseCreateData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- if(0 != paRequestPartLeft){
- switch (paRequestPartLeft[0]){
-#ifdef FORTE_DYNAMIC_TYPE_LOAD
- case 'A': // we have an Adapter to Create
- if(parseXType(paRequestPartLeft, paCommand, "AdapterType Name=\"")){
- paCommand.mCMD = cg_nMGM_CMD_Create_AdapterType;
- }
- break;
-#endif
- case 'F': // we have an FB to Create
- if(parseFBData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Create_FBInstance;
- }
-#ifdef FORTE_DYNAMIC_TYPE_LOAD
- else if(parseXType(paRequestPartLeft, paCommand, "FBType Name=\"")){
- paCommand.mCMD = cg_nMGM_CMD_Create_FBType;
- }
-#endif
- break;
- case 'C': // we have an Connection to Create
- if(parseConnectionData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Create_Connection;
- }
- break;
-#ifdef FORTE_SUPPORT_MONITORING
- case 'W': // we have an Watch to Add
- if(parseMonitoringData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Add_Watch;
- }
- break;
-#endif //FORTE_SUPPORT_MONITORING
- default:
- break;
- }
- }
-}
-
-void DEV_MGR::parseDeleteData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- if(0 != paRequestPartLeft){
- switch (paRequestPartLeft[0]){
- case 'F': // we have an FB to delete
- if(parseFBData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Delete_FBInstance;
- }
- break;
- case 'C': // we have an Connection to delete
- if(parseConnectionData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Delete_Connection;
- }
- break;
-#ifdef FORTE_SUPPORT_MONITORING
- case 'W': // we have an Watch to remove
- if(parseMonitoringData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Remove_Watch;
- }
- break;
-#endif // FORTE_SUPPORT_MONITORING
- default:
- break;
- }
- }
-}
-
-void DEV_MGR::parseAdditionalStateCommandData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- if(0 != paRequestPartLeft){
- if('/' != paRequestPartLeft[0] && //if we have an additional xml token parse if it is an FB definition
- !parseFBData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- }
- }
-}
-
-void DEV_MGR::parseReadData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- if(0 != paRequestPartLeft){
-#ifdef FORTE_SUPPORT_MONITORING
- if('W' == paRequestPartLeft[0]){
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Read_Watches;
- } else
-#endif // FORTE_SUPPORT_MONITORING
- if(parseConnectionData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_Read;
- }
- }
-}
-
-void DEV_MGR::parseWriteData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- //We need an additional xml connection token parse if it is an connection definition
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- if(0 != paRequestPartLeft && parseWriteConnectionData(paRequestPartLeft, paCommand)){
-#ifdef FORTE_SUPPORT_MONITORING
- char *pch = strstr(paRequestPartLeft, "force=\"");
- if (0 != pch) {
- if (!strncmp(&pch[7], "true", sizeof("true") - 1)) {
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Force;
- } else if (!strncmp(&pch[7], "false", sizeof("false") - 1)) {
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_ClearForce;
- }
- } else if ((2 == paCommand.mAdditionalParams.length()) &&
- (('$' == paCommand.mAdditionalParams.getValue()[0]) &&
- (('e' == paCommand.mAdditionalParams.getValue()[1]) ||('E' == paCommand.mAdditionalParams.getValue()[1]) ))){
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Trigger_Event;
- }else if ((3 == paCommand.mAdditionalParams.length()) &&
- (('$' == paCommand.mAdditionalParams.getValue()[0]) &&
- (('e' == paCommand.mAdditionalParams.getValue()[1]) ||('E' == paCommand.mAdditionalParams.getValue()[1]) ) &&
- (('r' == paCommand.mAdditionalParams.getValue()[2]) ||('R' == paCommand.mAdditionalParams.getValue()[2]) ) )){
- paCommand.mCMD = cg_nMGM_CMD_Monitoring_Reset_Event_Count;
- }else
-#endif // FORTE_SUPPORT_MONITORING
- paCommand.mCMD = cg_nMGM_CMD_Write;
- }
-}
-
-#ifdef FORTE_SUPPORT_QUERY_CMD
-void DEV_MGR::parseQueryData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- paCommand.mCMD = cg_nMGM_CMD_INVALID;
- if(0 != paRequestPartLeft){
- switch (paRequestPartLeft[0]){
- case 'F': // query fb or fb type list
- if(!strncmp(paRequestPartLeft, "FBT", sizeof("FBT") - 1)){
- if(parseTypeListData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_QUERY_FBTypes;
- } else {
- paCommand.mCMD = cg_nMGM_CMD_Query_Group;
- }
- }else if(parseFBData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_QUERY_FB;
- }
- break;
- case 'C': // query connection list
- if(parseConnectionData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_QUERY_Connection;
- }
- break;
- case 'D': // query datatype list
- if(!strncmp(paRequestPartLeft, "DataType", sizeof("DataType") - 1)){
- if(parseTypeListData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_QUERY_DTTypes;
- } else {
- paCommand.mCMD = cg_nMGM_CMD_Query_Group;
- }
- }
- break;
- case 'A': // query adaptertype list
- if(!strncmp(paRequestPartLeft, "AdapterT", sizeof("AdapterT") - 1)){
- if(parseTypeListData(paRequestPartLeft, paCommand)){
- paCommand.mCMD = cg_nMGM_CMD_QUERY_AdapterTypes;
- } else {
- paCommand.mCMD = cg_nMGM_CMD_Query_Group;
- }
- }
-
- break;
- default:
- break;
- }
- }
-}
-
-bool DEV_MGR::parseTypeListData(char *paRequestPartLeft, forte::core::SManagementCMD &){
- bool retVal = true;
-
- if (!strncmp("DataType Name=\"", paRequestPartLeft, sizeof("DataType Name=\"") - 1)) {
- if(paRequestPartLeft[15] != '*'){ //does not support query for DataType-Declaration
- retVal = false;
- }
- }
- else if(!strncmp("FBType Name=\"", paRequestPartLeft, sizeof("FBType Name=\"") - 1)){
- if(paRequestPartLeft[13] != '*'){ //does not support query for DataType-Declaration
- retVal = false;
- }
- }
- else if(!strncmp("AdapterType Name=\"", paRequestPartLeft, sizeof("AdapterType Name=\"") - 1)){
- if(paRequestPartLeft[18] != '*'){ //does not support query for DataType-Declaration
- retVal = false;
- }
- }
- return retVal;
-}
-#endif
-
-void DEV_MGR::generateResponse(const char *paID, EMGMResponse paResp){
- RESP().clear();
- RESP().append("<Response ID=\"");
- if (0 != paID) {
- RESP().append(paID);
- }
- RESP().append("\"");
- if(e_RDY != paResp){
- RESP().append(" Reason=\"");
- RESP().append(scm_sMGMResponseTexts[paResp]);
- RESP().append("\"");
- }
- RESP().append(" />");
-}
-
-void DEV_MGR::generateLongResponse(EMGMResponse paResp, forte::core::SManagementCMD &paCMD){
- RESP().clear();
- RESP().reserve(static_cast<TForteUInt16>(255 + (paCMD.mAdditionalParams.length())));
- RESP().append("<Response ID=\"");
- if (0 != paCMD.mID) {
- RESP().append(paCMD.mID);
- }
- RESP().append("\"");
- if(e_RDY != paResp){
- RESP().append(" Reason=\"");
- RESP().append(scm_sMGMResponseTexts[paResp]);
- RESP().append("\">\n ");
- }
- else{
- RESP().append(">\n ");
- if(paCMD.mCMD == cg_nMGM_CMD_Read){
- RESP().append("<Connection Source=\"");
- appedIdentifierName(RESP(), paCMD.mFirstParam);
- RESP().append("\" Destination=\"");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\" />");
- }
-#ifdef FORTE_SUPPORT_QUERY_CMD
- else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_Connection){
- if ((paCMD.mFirstParam.isEmpty()) &&
- (paCMD.mSecondParam.isEmpty())) { //src & dst = *
- RESP().append(paCMD.mAdditionalParams.getValue());
- }
- else { //either src or dst = * (both != * should be treated by generateResponse
- RESP().append("<EndpointList>\n ");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\n </EndpointList>");
- }
- }
- else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_FB){
- if(!paCMD.mFirstParam.isEmpty()) { //Name != "*"
- if(!paCMD.mSecondParam.isEmpty()){ //Type != "*"
- RESP().append("<FBStatus Status=\"");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\" />");
- } else { //Type == "*"
- RESP().append("<FB Name=\"");
- appedIdentifierName(RESP(), paCMD.mFirstParam);
- RESP().append("\" Type=\"");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\" />");
- }
- }
- else{
- RESP().append("<FBList>\n ");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\n </FBList>");
- }
- }
- else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_FBTypes || paCMD.mCMD == cg_nMGM_CMD_QUERY_AdapterTypes){
- RESP().append("<NameList>\n ");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\n </NameList>");
- }
- else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_DTTypes){
- RESP().append("<DTList>\n ");
- RESP().append(paCMD.mAdditionalParams.getValue());
- RESP().append("\n </DTList>");
- }
-#endif
- }
- RESP().append("\n</Response>");
-}
-
-void DEV_MGR::appedIdentifierName(CIEC_STRING& paDest, forte::core::TNameIdentifier &paIdentifier){
- if(!paIdentifier.isEmpty()){
- for(forte::core::TNameIdentifier::CIterator runner(paIdentifier.begin());
- runner != paIdentifier.end(); ++runner){
- paDest.append(CStringDictionary::getInstance().get(*runner));
- paDest.append(".");
- }
- paDest.append(CStringDictionary::getInstance().get(paIdentifier.back()));
- }
-}
-
-DEV_MGR::DEV_MGR(CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
- CCommFB(paInstanceNameId, paSrcRes, forte::com_infra::e_Server),
- m_poDevice(paSrcRes->getDevice()) {
- setupFBInterface(&scm_stFBInterfaceSpec, m_anFBConnData, m_anFBVarsData);
- mCommand.mAdditionalParams.reserve(255);
- mCommand.mAdditionalParams.clear();
-}
-
-DEV_MGR::~DEV_MGR(){
- freeAllData();
- m_pstInterfaceSpec = 0; //block any wrong cleanup in the generic fb base class of CBaseCommFB
-}
-
-EMGMResponse DEV_MGR::parseAndExecuteMGMCommand(char *paDest, char *paCommand){
- EMGMResponse eResp = e_INVALID_OBJECT;
- if(0 != strchr(paCommand, '>')){
- mCommand.mDestination = (strlen(paDest) != 0) ? CStringDictionary::getInstance().insert(paDest) : CStringDictionary::scm_nInvalidStringId;
- mCommand.mFirstParam.clear();
- mCommand.mSecondParam.clear();
- if ( 255 <= mCommand.mAdditionalParams.getCapacity()) {
- mCommand.mAdditionalParams.reserve(255);
- }
- mCommand.mID=0;
-#ifdef FORTE_SUPPORT_MONITORING
- mCommand.mMonitorResponse.clear();
-#endif // FORTE_SUPPORT_MONITORING
- char *acRequestPartLeft = parseRequest(paCommand, mCommand);
- if(0 != acRequestPartLeft){
- acRequestPartLeft = strchr(acRequestPartLeft, '<');
- if(0 != acRequestPartLeft){
- acRequestPartLeft++; //point to the next character after the <
- }
- // we got the command for execution
- // now check the rest of the data
- switch (mCommand.mCMD){
- case cg_nMGM_CMD_Create_Group: // create something
- parseCreateData(acRequestPartLeft, mCommand);
- break;
- case cg_nMGM_CMD_Delete_Group: //delete something
- parseDeleteData(acRequestPartLeft, mCommand);
- break;
- case cg_nMGM_CMD_Start:
- case cg_nMGM_CMD_Stop:
- case cg_nMGM_CMD_Kill:
- case cg_nMGM_CMD_Reset:
- parseAdditionalStateCommandData(acRequestPartLeft, mCommand);
- break;
- case cg_nMGM_CMD_Read:
- parseReadData(acRequestPartLeft, mCommand);
- break;
- case cg_nMGM_CMD_Write:
- parseWriteData(acRequestPartLeft, mCommand);
- break;
-#ifdef FORTE_SUPPORT_QUERY_CMD
- case cg_nMGM_CMD_Query_Group: // query something
- parseQueryData(acRequestPartLeft, mCommand);
-#endif
- break;
- default:
- break;
- }
-
- if(cg_nMGM_CMD_INVALID != mCommand.mCMD) {
- eResp = m_poDevice.executeMGMCommand(mCommand);
- }
- }
- else {
- eResp = e_UNSUPPORTED_CMD;
- }
- }
- return eResp;
-}
-
-#ifdef FORTE_SUPPORT_MONITORING
-
-bool DEV_MGR::parseMonitoringData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
- bool bRetVal = false;
- if(!strncmp("Watch Source=\"", paRequestPartLeft, sizeof("Watch Source=\"") - 1)){
- int i = parseIdentifier(&(paRequestPartLeft[14]), paCommand.mFirstParam);
- if(-1 != i){
- char *acBuf = strchr(&(paRequestPartLeft[i + 16]), '\"');
- if(acBuf != 0){
- parseIdentifier(&(acBuf[1]), paCommand.mSecondParam);
- bRetVal = (-1 != i);
- }
- }
- }
- return bRetVal;
-}
-
-void DEV_MGR::generateMonitorResponse(EMGMResponse paResp, forte::core::SManagementCMD &paCMD){
- RESP().clear();
- if(e_RDY != paResp){
- RESP().append("<Response ID=\"");
- RESP().append(paCMD.mID);
- RESP().append("\"");
- RESP().append(" Reason=\"");
- RESP().append(scm_sMGMResponseTexts[paResp]);
- RESP().append("\">\n ");
- RESP().append("\n</Response>");
- }else{
- TForteUInt16 size = static_cast<TForteUInt16>(paCMD.mMonitorResponse.length() + strlen(paCMD.mID) + 74);
- RESP().reserve(size);
-
- RESP().clear();
- RESP().append("<Response ID=\"");
- RESP().append(paCMD.mID);
- RESP().append("\"");
- RESP().append(">\n ");
- if(paCMD.mCMD == cg_nMGM_CMD_Monitoring_Read_Watches) {
- RESP().append("<Watches>\n ");
- RESP().append(paCMD.mMonitorResponse.getValue());
- RESP().append("\n </Watches>");
- }
- RESP().append("\n</Response>");
- }
- paCMD.mMonitorResponse.clear();
-}
-
-#endif // FORTE_SUPPORT_MONITORING
-
-bool DEV_MGR::executeCommand(char *paDest, char *paCommand){
- EMGMResponse eResp = parseAndExecuteMGMCommand(paDest, paCommand);
- if(eResp != e_RDY){
- DEVLOG_ERROR("Boot file error. DEV_MGR says error is %s\n", DEV_MGR::scm_sMGMResponseTexts[eResp]);
- }
- return (eResp == e_RDY);
-}
+/*******************************************************************************
+ * Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Rene Smodic, Thomas Strasser, Gerhard Ebenhofer,
+ * Oliver Hummer, Ingo Hegny, Michael Hofmann, Martin Melik Merkumians
+ * - initial API and implementation and/or initial documentation
+ * Monika Wenger
+ * - fix: apostrophes are deleted in parseWriteConnectionData
+ * Jens Reimann
+ * - Enhance bootfile loading behavior
+ * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
+ *******************************************************************************/
+#include <string.h>
+#include "DEV_MGR.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "DEV_MGR_gen.cpp"
+#endif
+#include "../../core/device.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "ForteBootFileLoader.h"
+#include "../../core/utils/string_utils.h"
+
+DEFINE_FIRMWARE_FB(DEV_MGR, g_nStringIdDEV_MGR)
+
+const CStringDictionary::TStringId DEV_MGR::scm_anDataInputNames[] = {g_nStringIdQI, g_nStringIdID, g_nStringIdRESP};
+
+const CStringDictionary::TStringId DEV_MGR::scm_anDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdSTRING};
+
+const CStringDictionary::TStringId DEV_MGR::scm_anDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS, g_nStringIdDST, g_nStringIdRQST};
+
+const CStringDictionary::TStringId DEV_MGR::scm_anDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING};
+
+const TForteInt16 DEV_MGR::scm_anEIWithIndexes[] = {0, -1};
+const TDataIOID DEV_MGR::scm_anEIWith[] = {0, 1, 255};
+const CStringDictionary::TStringId DEV_MGR::scm_anEventInputNames[] = {g_nStringIdINIT, g_nStringIdREQ};
+
+const TDataIOID DEV_MGR::scm_anEOWith[] = {0, 1, 255, 2, 3, 255};
+const TForteInt16 DEV_MGR::scm_anEOWithIndexes[] = {0, -1, 3};
+const CStringDictionary::TStringId DEV_MGR::scm_anEventOutputNames[] = {g_nStringIdINITO, g_nStringIdCNF};
+
+const SFBInterfaceSpec DEV_MGR::scm_stFBInterfaceSpec = {
+ 2, scm_anEventInputNames, scm_anEIWith, scm_anEIWithIndexes,
+ 2, scm_anEventOutputNames, scm_anEOWith, scm_anEOWithIndexes, 3, scm_anDataInputNames, scm_anDataInputTypeIds,
+ 4, scm_anDataOutputNames, scm_anDataOutputTypeIds,
+ 0, 0
+};
+
+const char * const DEV_MGR::scm_sMGMResponseTexts[13] = { "RDY", "BAD_PARAMS", "LOCAL_TERMINATION", "SYSTEM_TERMINATION", "NOT_READY", "UNSUPPORTED_CMD", "UNSUPPORTED_TYPE", "NO_SUCH_OBJECT", "INVALID_OBJECT", "INVALID_OPERATION", "INVALID_STATE", "OVERFLOW", "INVALID_DST" };
+
+void DEV_MGR::executeEvent(int paEIID){
+ if(scm_nEventINITID == paEIID){
+#ifdef FORTE_SUPPORT_BOOT_FILE
+ if((true == QI()) && (false == QO())){
+ //this is the first time init is called try to load a boot file
+ ForteBootFileLoader loader(*this);
+ if(loader.isOpen() && LOAD_RESULT_OK == loader.loadBootFile()){
+ DEVLOG_INFO("Bootfile correctly loaded\n");
+ }
+ }
+#endif
+ CCommFB::executeEvent(paEIID); //initialize the underlying server FB
+ }else{
+ if(cg_nExternalEventID == paEIID && //we received a message on the network let the server correctly handle it
+ forte::com_infra::e_ProcessDataOk == CCommFB::receiveData()){ //the message was correctly received
+ executeRQST();
+ //send response
+ CCommFB::sendData();
+ }
+ }
+}
+
+void DEV_MGR::executeRQST(void){
+ mCommand.mAdditionalParams.clear();
+ EMGMResponse resp = parseAndExecuteMGMCommand(DST().getValue(), RQST().getValue());
+
+#ifdef FORTE_SUPPORT_MONITORING
+ if (0 != mCommand.mMonitorResponse.length()) {
+ generateMonitorResponse(resp, mCommand);
+ } else
+#endif //FORTE_SUPPORT_MONITORING
+ if(0 < mCommand.mAdditionalParams.length()){
+ generateLongResponse(resp, mCommand);
+ }
+ else{
+ generateResponse(mCommand.mID, resp);
+ }
+}
+
+char *DEV_MGR::parseRequest(char *paRequestString, forte::core::SManagementCMD &paCommand){
+//first check if it is an management request
+ char *acCommandStart = 0;
+ static const int scnCommandLength[] = {7, 7, 6, 5, 5, 6, 5, 6, 6};
+
+ if(!strncmp("<Request ID=\"", paRequestString, 13)){
+ int i = 13;
+ int j;
+ paCommand.mID = &(paRequestString[i]);
+ for(j = 0; paRequestString[i] != '\"'; ++i, ++j){
+ if(j >= 7){
+ return 0;
+ }
+ }
+ paRequestString[i] = '\0'; //close ID
+ ++i;
+ acCommandStart = strchr((&paRequestString[i]), '\"');
+ if(acCommandStart != 0){
+ acCommandStart++; //this is the real start of the command
+ if(!strncmp("CREATE", acCommandStart, 6)){
+ paCommand.mCMD = cg_nMGM_CMD_Create_Group;
+ }
+ else if(!strncmp("DELETE", acCommandStart, 6)){
+ paCommand.mCMD = cg_nMGM_CMD_Delete_Group;
+ }
+ else if(!strncmp("START", acCommandStart, 5)){
+ paCommand.mCMD = cg_nMGM_CMD_Start;
+ }
+ else if(!strncmp("STOP", acCommandStart, 4)){
+ paCommand.mCMD = cg_nMGM_CMD_Stop;
+ }
+ else if(!strncmp("KILL", acCommandStart, 4)){
+ paCommand.mCMD = cg_nMGM_CMD_Kill;
+ }
+ else if(!strncmp("RESET", acCommandStart, 5)){
+ paCommand.mCMD = cg_nMGM_CMD_Reset;
+ }
+ else if(!strncmp("READ", acCommandStart, 4)){
+ paCommand.mCMD = cg_nMGM_CMD_Read;
+ }
+ else if(!strncmp("WRITE", acCommandStart, 5)){
+ paCommand.mCMD = cg_nMGM_CMD_Write;
+ }
+#ifdef FORTE_SUPPORT_QUERY_CMD
+ else if(!strncmp("QUERY", acCommandStart, 5)){
+ paCommand.mCMD = cg_nMGM_CMD_Query_Group;
+ }
+#endif
+ else{
+ return 0;
+ }
+ acCommandStart += scnCommandLength[paCommand.mCMD];
+ }
+ }
+ return acCommandStart;
+}
+
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+bool DEV_MGR::parseXType(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand, const char *paRequestType) {
+ bool retVal = false;
+ size_t nReqLength = strlen(paRequestType);
+ if(!strncmp(paRequestType, paRequestPartLeft, nReqLength)){
+ paRequestPartLeft = &(paRequestPartLeft[nReqLength]);
+ if('*' != paRequestPartLeft[0]){
+ int i = parseIdentifier(paRequestPartLeft, paCommand.mFirstParam);
+ paRequestPartLeft = (-1 == i) ? 0 : strchr(&(paRequestPartLeft[i + 1]), '>');
+ }
+ if(0 != paRequestPartLeft){
+ paRequestPartLeft++;
+ char* endOfRequest = strchr(paRequestPartLeft, '<');
+ *endOfRequest = '\0';
+ forte::core::util::transformEscapedXMLToNonEscapedText(paRequestPartLeft);
+ paCommand.mAdditionalParams = paRequestPartLeft;
+ retVal = true;
+ }
+ }
+ return retVal;
+}
+#endif
+
+bool DEV_MGR::parseFBData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ bool retVal = false;
+
+ if(!strncmp("FB Name=\"", paRequestPartLeft, 9)){
+ char *acBuf = &(paRequestPartLeft[9]);
+ int i = 0;
+ if(acBuf[0] != '*'){
+ i = parseIdentifier(acBuf, paCommand.mFirstParam);
+ acBuf = (-1 == i) ? 0 : strchr(&(acBuf[i + 1]), '\"');
+ }
+ else{
+ acBuf = strchr(&(acBuf[i + 2]), '\"');
+ }
+
+ if(acBuf != 0){
+ if(acBuf[1] != '*'){
+ ++acBuf;
+ i = parseIdentifier(acBuf, paCommand.mSecondParam);
+ if(-1 != i){
+ acBuf = strchr(&(acBuf[i + 1]), '\"');
+ if(acBuf != 0){
+ // We have an application name given
+ ++acBuf;
+ TForteUInt16 nBufLength = static_cast<TForteUInt16>(strcspn(acBuf, "\"") + 1);
+ paCommand.mAdditionalParams.assign(acBuf, nBufLength);
+ }
+ }
+ else{
+ return false;
+ }
+ }
+ retVal = true;
+ }
+ }
+ return retVal;
+}
+
+int DEV_MGR::parseIdentifier(char *paIdentifierStart, forte::core::TNameIdentifier &paIdentifier){
+ for(char *runner = paIdentifierStart, *start = paIdentifierStart; '\0' != *runner; ++runner){
+ if('.' == *runner){
+ *runner = '\0';
+ if(!paIdentifier.pushBack(CStringDictionary::getInstance().insert(start))){
+ return -1;
+ }
+ *runner = '.';
+ start = runner + 1;
+ } else if ('"' == *runner){
+ *runner = '\0';
+ if(!paIdentifier.pushBack(CStringDictionary::getInstance().insert(start))){
+ return -1;
+ }
+ *runner = '"';
+ return static_cast<int>(runner - paIdentifierStart);
+ }
+ }
+ return -1;
+}
+
+bool DEV_MGR::parseConnectionData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ bool bRetVal = false;
+ if(!strncmp("Connection Source=\"", paRequestPartLeft, sizeof("Connection Source=\"") - 1)){
+ int i = parseIdentifier(&(paRequestPartLeft[19]), paCommand.mFirstParam);
+ if(-1 != i){
+ char *acBuf = strchr(&(paRequestPartLeft[i + 21]), '\"');
+ if(acBuf != 0){
+ parseIdentifier(&(acBuf[1]), paCommand.mSecondParam);
+ bRetVal = (-1 != i);
+ }
+ }
+ }
+ return bRetVal;
+}
+
+bool DEV_MGR::parseWriteConnectionData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ bool retVal = false;
+ if(!strncmp("Connection Source=\"", paRequestPartLeft, sizeof("Connection Source=\"") - 1)){
+ paRequestPartLeft = &(paRequestPartLeft[19]);
+
+ char* endOfSource = strchr(paRequestPartLeft, '\"');
+ if(0 == endOfSource){
+ return false;
+ }
+ *endOfSource = '\0';
+ forte::core::util::transformEscapedXMLToNonEscapedText(paRequestPartLeft);
+ paCommand.mAdditionalParams = paRequestPartLeft;
+ *endOfSource = '"'; // restore the string
+ paRequestPartLeft = strchr(endOfSource + 1, '\"');
+ if(0 != paRequestPartLeft){
+ retVal = (-1 != parseIdentifier(&paRequestPartLeft[1], paCommand.mFirstParam));
+ }
+ }
+ return retVal;
+}
+
+void DEV_MGR::parseCreateData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ if(0 != paRequestPartLeft){
+ switch (paRequestPartLeft[0]){
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+ case 'A': // we have an Adapter to Create
+ if(parseXType(paRequestPartLeft, paCommand, "AdapterType Name=\"")){
+ paCommand.mCMD = cg_nMGM_CMD_Create_AdapterType;
+ }
+ break;
+#endif
+ case 'F': // we have an FB to Create
+ if(parseFBData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Create_FBInstance;
+ }
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+ else if(parseXType(paRequestPartLeft, paCommand, "FBType Name=\"")){
+ paCommand.mCMD = cg_nMGM_CMD_Create_FBType;
+ }
+#endif
+ break;
+ case 'C': // we have an Connection to Create
+ if(parseConnectionData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Create_Connection;
+ }
+ break;
+#ifdef FORTE_SUPPORT_MONITORING
+ case 'W': // we have an Watch to Add
+ if(parseMonitoringData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Add_Watch;
+ }
+ break;
+#endif //FORTE_SUPPORT_MONITORING
+ default:
+ break;
+ }
+ }
+}
+
+void DEV_MGR::parseDeleteData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ if(0 != paRequestPartLeft){
+ switch (paRequestPartLeft[0]){
+ case 'F': // we have an FB to delete
+ if(parseFBData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Delete_FBInstance;
+ }
+ break;
+ case 'C': // we have an Connection to delete
+ if(parseConnectionData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Delete_Connection;
+ }
+ break;
+#ifdef FORTE_SUPPORT_MONITORING
+ case 'W': // we have an Watch to remove
+ if(parseMonitoringData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Remove_Watch;
+ }
+ break;
+#endif // FORTE_SUPPORT_MONITORING
+ default:
+ break;
+ }
+ }
+}
+
+void DEV_MGR::parseAdditionalStateCommandData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ if(0 != paRequestPartLeft && '/' != paRequestPartLeft[0] && //if we have an additional xml token parse if it is an FB definition
+ !parseFBData(paRequestPartLeft, paCommand)) {
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ }
+}
+
+void DEV_MGR::parseReadData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ if(0 != paRequestPartLeft){
+#ifdef FORTE_SUPPORT_MONITORING
+ if('W' == paRequestPartLeft[0]){
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Read_Watches;
+ } else
+#endif // FORTE_SUPPORT_MONITORING
+ if(parseConnectionData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_Read;
+ }
+ }
+}
+
+void DEV_MGR::parseWriteData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ //We need an additional xml connection token parse if it is an connection definition
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ if(0 != paRequestPartLeft && parseWriteConnectionData(paRequestPartLeft, paCommand)){
+#ifdef FORTE_SUPPORT_MONITORING
+ char *pch = strstr(paRequestPartLeft, "force=\"");
+ if (0 != pch) {
+ if (!strncmp(&pch[7], "true", sizeof("true") - 1)) {
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Force;
+ } else if (!strncmp(&pch[7], "false", sizeof("false") - 1)) {
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_ClearForce;
+ }
+ } else if ((2 == paCommand.mAdditionalParams.length()) &&
+ (('$' == paCommand.mAdditionalParams.getValue()[0]) &&
+ (('e' == paCommand.mAdditionalParams.getValue()[1]) ||('E' == paCommand.mAdditionalParams.getValue()[1]) ))){
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Trigger_Event;
+ }else if ((3 == paCommand.mAdditionalParams.length()) &&
+ (('$' == paCommand.mAdditionalParams.getValue()[0]) &&
+ (('e' == paCommand.mAdditionalParams.getValue()[1]) ||('E' == paCommand.mAdditionalParams.getValue()[1]) ) &&
+ (('r' == paCommand.mAdditionalParams.getValue()[2]) ||('R' == paCommand.mAdditionalParams.getValue()[2]) ) )){
+ paCommand.mCMD = cg_nMGM_CMD_Monitoring_Reset_Event_Count;
+ }else
+#endif // FORTE_SUPPORT_MONITORING
+ paCommand.mCMD = cg_nMGM_CMD_Write;
+ }
+}
+
+#ifdef FORTE_SUPPORT_QUERY_CMD
+void DEV_MGR::parseQueryData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ paCommand.mCMD = cg_nMGM_CMD_INVALID;
+ if(0 != paRequestPartLeft){
+ switch (paRequestPartLeft[0]){
+ case 'F': // query fb or fb type list
+ if(!strncmp(paRequestPartLeft, "FBT", sizeof("FBT") - 1)){
+ if(parseTypeListData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_FBTypes;
+ }
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+ else if(parseXType(paRequestPartLeft, paCommand, "FBType Name=\"")){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_FBType;
+ }
+#endif
+ else {
+ paCommand.mCMD = cg_nMGM_CMD_Query_Group;
+ }
+ }else if(parseFBData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_FB;
+ }
+ break;
+ case 'C': // query connection list
+ if(parseConnectionData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_Connection;
+ }
+ break;
+ case 'D': // query datatype list
+ if(!strncmp(paRequestPartLeft, "DataType", sizeof("DataType") - 1)){
+ if(parseTypeListData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_DTTypes;
+ } else {
+ paCommand.mCMD = cg_nMGM_CMD_Query_Group;
+ }
+ }
+ break;
+ case 'A': // query adaptertype list
+ if(!strncmp(paRequestPartLeft, "AdapterT", sizeof("AdapterT") - 1)){
+ if(parseTypeListData(paRequestPartLeft, paCommand)){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_AdapterTypes;
+ }
+#ifdef FORTE_DYNAMIC_TYPE_LOAD
+ else if(parseXType(paRequestPartLeft, paCommand, "AdapterType Name=\"")){
+ paCommand.mCMD = cg_nMGM_CMD_QUERY_AdapterType;
+ }
+#endif
+ else {
+ paCommand.mCMD = cg_nMGM_CMD_Query_Group;
+ }
+ }
+
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+bool DEV_MGR::parseTypeListData(char *paRequestPartLeft, forte::core::SManagementCMD &){
+ bool retVal = true;
+
+ if (!strncmp("DataType Name=\"", paRequestPartLeft, sizeof("DataType Name=\"") - 1)) {
+ if(paRequestPartLeft[15] != '*'){ //does not support query for DataType-Declaration
+ retVal = false;
+ }
+ }
+ else if(!strncmp("FBType Name=\"", paRequestPartLeft, sizeof("FBType Name=\"") - 1)){
+ if(paRequestPartLeft[13] != '*'){ //supports query for FBType-Declaration only for DynamicTypeLoad profile (LUA enabled)
+ retVal = false;
+ }
+ }
+ else if(!strncmp("AdapterType Name=\"", paRequestPartLeft, sizeof("AdapterType Name=\"") - 1)){
+ if(paRequestPartLeft[18] != '*'){ //does not support query for AdapterType-Declaration
+ retVal = false;
+ }
+ }
+ return retVal;
+}
+#endif
+
+void DEV_MGR::generateResponse(const char *paID, EMGMResponse paResp){
+ RESP().clear();
+ RESP().append("<Response ID=\"");
+ if (0 != paID) {
+ RESP().append(paID);
+ }
+ RESP().append("\"");
+ if(e_RDY != paResp){
+ RESP().append(" Reason=\"");
+ RESP().append(scm_sMGMResponseTexts[paResp]);
+ RESP().append("\"");
+ }
+ RESP().append(" />");
+}
+
+void DEV_MGR::generateLongResponse(EMGMResponse paResp, forte::core::SManagementCMD &paCMD){
+ RESP().clear();
+ RESP().reserve(static_cast<TForteUInt16>(255 + (paCMD.mAdditionalParams.length())));
+ RESP().append("<Response ID=\"");
+ if (0 != paCMD.mID) {
+ RESP().append(paCMD.mID);
+ }
+ RESP().append("\"");
+ if(e_RDY != paResp){
+ RESP().append(" Reason=\"");
+ RESP().append(scm_sMGMResponseTexts[paResp]);
+ RESP().append("\">\n ");
+ }
+ else{
+ RESP().append(">\n ");
+ if(paCMD.mCMD == cg_nMGM_CMD_Read){
+ RESP().append("<Connection Source=\"");
+ appedIdentifierName(RESP(), paCMD.mFirstParam);
+ RESP().append("\" Destination=\"");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\" />");
+ }
+#ifdef FORTE_SUPPORT_QUERY_CMD
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_Connection){
+ if ((paCMD.mFirstParam.isEmpty()) &&
+ (paCMD.mSecondParam.isEmpty())) { //src & dst = *
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ }
+ else { //either src or dst = * (both != * should be treated by generateResponse
+ RESP().append("<EndpointList>\n ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\n </EndpointList>");
+ }
+ }
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_FB){
+ if(!paCMD.mFirstParam.isEmpty()) { //Name != "*"
+ if(!paCMD.mSecondParam.isEmpty()){ //Type != "*"
+ RESP().append("<FBStatus Status=\"");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\" />");
+ } else { //Type == "*"
+ RESP().append("<FB Name=\"");
+ appedIdentifierName(RESP(), paCMD.mFirstParam);
+ RESP().append("\" Type=\"");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\" />");
+ }
+ }
+ else{
+ RESP().append("<FBList>\n ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\n </FBList>");
+ }
+ }
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_FBTypes || paCMD.mCMD == cg_nMGM_CMD_QUERY_AdapterTypes){
+ RESP().append("<NameList>\n ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\n </NameList>");
+ }
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_DTTypes){
+ RESP().append("<DTList>\n ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append("\n </DTList>");
+ }
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_FBType){
+ RESP().append("<FBType Comment=\"generated\" ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append(" </FBType>");
+ }
+ else if(paCMD.mCMD == cg_nMGM_CMD_QUERY_AdapterType){
+ RESP().append("<AdapterType Comment=\"generated\" ");
+ RESP().append(paCMD.mAdditionalParams.getValue());
+ RESP().append(" <Service Comment=\"generated\" LeftInterface=\"SOCKET\" RightInterface=\"PLUG\"/>\n</AdapterType>");
+ }
+#endif
+ }
+ RESP().append("\n</Response>");
+}
+
+void DEV_MGR::appedIdentifierName(CIEC_STRING& paDest, forte::core::TNameIdentifier &paIdentifier){
+ if(!paIdentifier.isEmpty()){
+ for(forte::core::TNameIdentifier::CIterator runner(paIdentifier.begin());
+ runner != paIdentifier.end(); ++runner){
+ paDest.append(CStringDictionary::getInstance().get(*runner));
+ paDest.append(".");
+ }
+ paDest.append(CStringDictionary::getInstance().get(paIdentifier.back()));
+ }
+}
+
+DEV_MGR::DEV_MGR(CStringDictionary::TStringId paInstanceNameId, CResource *paSrcRes) :
+ CCommFB(paInstanceNameId, paSrcRes, forte::com_infra::e_Server),
+ m_poDevice(paSrcRes->getDevice()) {
+ setupFBInterface(&scm_stFBInterfaceSpec, m_anFBConnData, m_anFBVarsData);
+ mCommand.mAdditionalParams.reserve(255);
+ mCommand.mAdditionalParams.clear();
+}
+
+DEV_MGR::~DEV_MGR(){
+ freeAllData();
+ m_pstInterfaceSpec = 0; //block any wrong cleanup in the generic fb base class of CBaseCommFB
+}
+
+EMGMResponse DEV_MGR::parseAndExecuteMGMCommand(char *paDest, char *paCommand){
+ EMGMResponse eResp = e_INVALID_OBJECT;
+ if(0 != strchr(paCommand, '>')){
+ mCommand.mDestination = (strlen(paDest) != 0) ? CStringDictionary::getInstance().insert(paDest) : CStringDictionary::scm_nInvalidStringId;
+ mCommand.mFirstParam.clear();
+ mCommand.mSecondParam.clear();
+ if ( 255 <= mCommand.mAdditionalParams.getCapacity()) {
+ mCommand.mAdditionalParams.reserve(255);
+ }
+ mCommand.mID=0;
+#ifdef FORTE_SUPPORT_MONITORING
+ mCommand.mMonitorResponse.clear();
+#endif // FORTE_SUPPORT_MONITORING
+ char *acRequestPartLeft = parseRequest(paCommand, mCommand);
+ if(0 != acRequestPartLeft){
+ acRequestPartLeft = strchr(acRequestPartLeft, '<');
+ if(0 != acRequestPartLeft){
+ acRequestPartLeft++; //point to the next character after the <
+ }
+ // we got the command for execution
+ // now check the rest of the data
+ switch (mCommand.mCMD){
+ case cg_nMGM_CMD_Create_Group: // create something
+ parseCreateData(acRequestPartLeft, mCommand);
+ break;
+ case cg_nMGM_CMD_Delete_Group: //delete something
+ parseDeleteData(acRequestPartLeft, mCommand);
+ break;
+ case cg_nMGM_CMD_Start:
+ case cg_nMGM_CMD_Stop:
+ case cg_nMGM_CMD_Kill:
+ case cg_nMGM_CMD_Reset:
+ parseAdditionalStateCommandData(acRequestPartLeft, mCommand);
+ break;
+ case cg_nMGM_CMD_Read:
+ parseReadData(acRequestPartLeft, mCommand);
+ break;
+ case cg_nMGM_CMD_Write:
+ parseWriteData(acRequestPartLeft, mCommand);
+ break;
+#ifdef FORTE_SUPPORT_QUERY_CMD
+ case cg_nMGM_CMD_Query_Group: // query something
+ parseQueryData(acRequestPartLeft, mCommand);
+#endif
+ break;
+ default:
+ break;
+ }
+
+ if(cg_nMGM_CMD_INVALID != mCommand.mCMD) {
+ eResp = m_poDevice.executeMGMCommand(mCommand);
+ }
+ }
+ else {
+ eResp = e_UNSUPPORTED_CMD;
+ }
+ }
+ return eResp;
+}
+
+#ifdef FORTE_SUPPORT_MONITORING
+
+bool DEV_MGR::parseMonitoringData(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand){
+ bool bRetVal = false;
+ if(!strncmp("Watch Source=\"", paRequestPartLeft, sizeof("Watch Source=\"") - 1)){
+ int i = parseIdentifier(&(paRequestPartLeft[14]), paCommand.mFirstParam);
+ if(-1 != i){
+ char *acBuf = strchr(&(paRequestPartLeft[i + 16]), '\"');
+ if(acBuf != 0){
+ parseIdentifier(&(acBuf[1]), paCommand.mSecondParam);
+ bRetVal = (-1 != i);
+ }
+ }
+ }
+ return bRetVal;
+}
+
+void DEV_MGR::generateMonitorResponse(EMGMResponse paResp, forte::core::SManagementCMD &paCMD){
+ RESP().clear();
+ if(e_RDY != paResp){
+ RESP().append("<Response ID=\"");
+ RESP().append(paCMD.mID);
+ RESP().append("\"");
+ RESP().append(" Reason=\"");
+ RESP().append(scm_sMGMResponseTexts[paResp]);
+ RESP().append("\">\n ");
+ RESP().append("\n</Response>");
+ }else{
+ TForteUInt16 size = static_cast<TForteUInt16>(paCMD.mMonitorResponse.length() + strlen(paCMD.mID) + 74);
+ RESP().reserve(size);
+
+ RESP().clear();
+ RESP().append("<Response ID=\"");
+ RESP().append(paCMD.mID);
+ RESP().append("\"");
+ RESP().append(">\n ");
+ if(paCMD.mCMD == cg_nMGM_CMD_Monitoring_Read_Watches) {
+ RESP().append("<Watches>\n ");
+ RESP().append(paCMD.mMonitorResponse.getValue());
+ RESP().append("\n </Watches>");
+ }
+ RESP().append("\n</Response>");
+ }
+ paCMD.mMonitorResponse.clear();
+}
+
+#endif // FORTE_SUPPORT_MONITORING
+
+bool DEV_MGR::executeCommand(char *paDest, char *paCommand){
+ EMGMResponse eResp = parseAndExecuteMGMCommand(paDest, paCommand);
+ if(eResp != e_RDY){
+ DEVLOG_ERROR("Boot file error. DEV_MGR says error is %s\n", DEV_MGR::scm_sMGMResponseTexts[eResp]);
+ }
+ return (eResp == e_RDY);
+}
diff --git a/src/stdfblib/ita/DEV_MGR.h b/src/stdfblib/ita/DEV_MGR.h
index b63fa8e..3892f7d 100644
--- a/src/stdfblib/ita/DEV_MGR.h
+++ b/src/stdfblib/ita/DEV_MGR.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Thomas Strasser, Gerhard Ebenhofer,
@@ -87,7 +88,7 @@
* \param pa_requestType the type that should be searched
* \return true if the FB type could be parsed
*/
- static bool parseXType(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand, char *paRequestType);
+ static bool parseXType(char *paRequestPartLeft, forte::core::SManagementCMD &paCommand, const char *paRequestType);
/*! \brief Parse the given request that is left after parsing the header to parse connection data
*
* \param paRequestPartLeft data of the request that has been left after parsing the header
@@ -120,7 +121,7 @@
* @return number of bytes used from the character array or -1 if the identifier could not be parsed
*/
static int parseIdentifier(char *paIdentifierStart, forte::core::TNameIdentifier &paIdentifier);
-
+
virtual void executeEvent(int pa_nEIID);
#ifdef FORTE_SUPPORT_MONITORING
diff --git a/src/stdfblib/ita/EMB_RES.cpp b/src/stdfblib/ita/EMB_RES.cpp
index ed4d5da..ee4badb 100644
--- a/src/stdfblib/ita/EMB_RES.cpp
+++ b/src/stdfblib/ita/EMB_RES.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Gerhard Ebenhofer,
@@ -16,8 +17,9 @@
#endif
-DEFINE_FIRMWARE_FB(EMB_RES, g_nStringIdEMB_RES)
-;
+DEFINE_FIRMWARE_FB(EMB_RES, g_nStringIdEMB_RES);
+
+const SFBInterfaceSpec EMB_RES::scm_stFBInterfaceSpec = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
EMB_RES::EMB_RES(CStringDictionary::TStringId pa_nInstanceNameId,
CResource* pa_poDevice) :
diff --git a/src/stdfblib/ita/EMB_RES.h b/src/stdfblib/ita/EMB_RES.h
index d5aea35..ee8b08b 100644
--- a/src/stdfblib/ita/EMB_RES.h
+++ b/src/stdfblib/ita/EMB_RES.h
@@ -1,30 +1,32 @@
-/*******************************************************************************
- * Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl, Thomas Strasser
- * - initial API and implementation and/or initial documentation
- *******************************************************************************/
-#ifndef _EMB_RES_H_
-#define _EMB_RES_H_
-
-#include <resource.h>
-
-
-class EMB_RES : public CResource{
- DECLARE_FIRMWARE_FB(EMB_RES);
-
- public:
- EMB_RES(CStringDictionary::TStringId pa_nInstanceNameId,
- CResource* pa_poDevice);
- virtual ~EMB_RES();
-
- private:
-};
-
-#endif //close the ifdef sequence from the beginning of the file
-
+/*******************************************************************************
+ * Copyright (c) 2006 - 2015 ACIN, Profactor GmbH, fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl, Thomas Strasser
+ * - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+#ifndef _EMB_RES_H_
+#define _EMB_RES_H_
+
+#include <resource.h>
+
+
+class EMB_RES : public CResource{
+ DECLARE_FIRMWARE_FB(EMB_RES);
+
+ public:
+ EMB_RES(CStringDictionary::TStringId pa_nInstanceNameId,
+ CResource* pa_poDevice);
+ virtual ~EMB_RES();
+
+ private:
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
+};
+
+#endif //close the ifdef sequence from the beginning of the file
+
diff --git a/src/stdfblib/ita/ForteBootFileLoader.cpp b/src/stdfblib/ita/ForteBootFileLoader.cpp
index 2466d23..13d1dc5 100644
--- a/src/stdfblib/ita/ForteBootFileLoader.cpp
+++ b/src/stdfblib/ita/ForteBootFileLoader.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -18,12 +19,10 @@
#include <mgmcmdstruct.h>
#include "../../core/device.h"
-ForteBootFileLoader::ForteBootFileLoader(IBootFileCallback &paCallback) : mBootfile(0), mCallback(paCallback){
- openBootFile(0);
-}
+char* gCommandLineBootFile = 0;
-ForteBootFileLoader::ForteBootFileLoader(IBootFileCallback &paCallback, CIEC_STRING &paBootFileName) : mBootfile(0), mCallback(paCallback){
- openBootFile(&paBootFileName);
+ForteBootFileLoader::ForteBootFileLoader(IBootFileCallback &paCallback) : mBootfile(0), mCallback(paCallback){
+ openBootFile();
}
ForteBootFileLoader::~ForteBootFileLoader() {
@@ -33,23 +32,23 @@
}
}
-bool ForteBootFileLoader::openBootFile(CIEC_STRING* paBootFileName){
+bool ForteBootFileLoader::openBootFile() {
bool retVal = false;
CIEC_STRING bootFileName;
- if(0 != paBootFileName){
- bootFileName = *paBootFileName;
- }else{
- // select provided or default boot file name
- char * envBootFileName = getenv("FORTE_BOOT_FILE");
- if(0 != envBootFileName){
- DEVLOG_INFO("Using provided bootfile location: %s\n", envBootFileName);
- bootFileName = envBootFileName;
- }
- else{
- DEVLOG_INFO("Using default bootfile location: %s\n", FORTE_BOOT_FILE_LOCATION);
- bootFileName = FORTE_BOOT_FILE_LOCATION;
- }
- }
+ if(gCommandLineBootFile) {
+ DEVLOG_INFO("Using provided bootfile location set in the command line: %s\n", gCommandLineBootFile);
+ bootFileName = gCommandLineBootFile;
+ } else {
+ // select provided or default boot file name
+ char * envBootFileName = getenv("FORTE_BOOT_FILE");
+ if(0 != envBootFileName) {
+ DEVLOG_INFO("Using provided bootfile location from environment variable: %s\n", envBootFileName);
+ bootFileName = envBootFileName;
+ } else {
+ DEVLOG_INFO("Using provided bootfile location set in CMake: %s\n", FORTE_BOOT_FILE_LOCATION);
+ bootFileName = FORTE_BOOT_FILE_LOCATION;
+ }
+ }
// check if we finally have a boot file name
if("" == bootFileName){
@@ -80,22 +79,22 @@
int nLineCount = 1;
eResp = LOAD_RESULT_OK;
CIEC_STRING line;
- while(readLine(line)){
+ while(readLine(line) && LOAD_RESULT_OK == eResp) {
char *cmdStart = strchr(line.getValue(), ';');
if(0 == cmdStart){
eResp = MISSING_COLON;
DEVLOG_ERROR("Boot file line does not contain separating ';'. Line: %d\n", nLineCount);
- break;
+ } else {
+ *cmdStart = '\0';
+ cmdStart++;
+ if(!mCallback.executeCommand(line.getValue(), cmdStart)) {
+ //command was not successful
+ DEVLOG_ERROR("Boot file command could not be executed. Line: %d: %s\n", nLineCount, cmdStart);
+ eResp = EXTERNAL_ERROR;
+ } else {
+ nLineCount++;
+ }
}
- *cmdStart = '\0';
- cmdStart++;
- if(!mCallback.executeCommand(line.getValue(), cmdStart)){
- //command was not successful
- DEVLOG_ERROR("Boot file command could not be executed. Line: %d: %s\n", nLineCount, cmdStart);
- eResp = EXTERNAL_ERROR;
- break;
- }
- nLineCount++;
}
}else{
DEVLOG_ERROR("Loading cannot proceed because the boot file is no opened\n");
@@ -118,6 +117,5 @@
}
bool ForteBootFileLoader::hasCommandEnded(const CIEC_STRING &line) const{
- return ((0 == strcmp(line.getValue() + line.length() - 11, "</Request>\n")
- || 0 == strcmp(line.getValue() + line.length() - 3, "/>\n")));
+ return (0 == strcmp(line.getValue() + line.length() - 11, "</Request>\n") || 0 == strcmp(line.getValue() + line.length() - 3, "/>\n"));
}
diff --git a/src/stdfblib/ita/ForteBootFileLoader.h b/src/stdfblib/ita/ForteBootFileLoader.h
index 6ef99e0..24d2d3c 100644
--- a/src/stdfblib/ita/ForteBootFileLoader.h
+++ b/src/stdfblib/ita/ForteBootFileLoader.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Monika Wenger
@@ -27,35 +28,29 @@
};
class ForteBootFileLoader {
-public:
+ public:
- /**
- * Constructor which uses the the default values for the boot file location
- * @param paCallback Object to be called for each command
- */
- explicit ForteBootFileLoader(IBootFileCallback &paCallback);
+ /**
+ * Constructor which uses the the default values for the boot file location
+ * @param paCallback Object to be called for each command
+ */
+ explicit ForteBootFileLoader(IBootFileCallback &paCallback);
- /**
- * Constructor which uses a specific bootfile name instead of the default one
- * @param paCallback Object to be called for each command
- * @param paBootFileName Specific boot file name to be opened
- */
- explicit ForteBootFileLoader(IBootFileCallback &paCallback, CIEC_STRING &paBootFileName);
- ~ForteBootFileLoader();
+ ~ForteBootFileLoader();
- LoadBootResult loadBootFile();
+ LoadBootResult loadBootFile();
- bool isOpen() const{
- return (0 != mBootfile);
- }
+ bool isOpen() const {
+ return (0 != mBootfile);
+ }
-private:
- FILE *mBootfile;
- IBootFileCallback &mCallback; //for now with one callback is enough for all cases
+ private:
+ FILE *mBootfile;
+ IBootFileCallback &mCallback; //for now with one callback is enough for all cases
- bool openBootFile(CIEC_STRING* paBootFileName);
- bool readLine(CIEC_STRING &line);
- bool hasCommandEnded(const CIEC_STRING &line) const;
+ bool openBootFile();
+ bool readLine(CIEC_STRING &line);
+ bool hasCommandEnded(const CIEC_STRING &line) const;
};
#endif /* SRC_STDFBLIB_ITA_FORTEBOOTFILELOADER_H_ */
diff --git a/src/stdfblib/ita/IBootFileCallback.h b/src/stdfblib/ita/IBootFileCallback.h
index 6354eee..44591b3 100644
--- a/src/stdfblib/ita/IBootFileCallback.h
+++ b/src/stdfblib/ita/IBootFileCallback.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2017 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral
diff --git a/src/stdfblib/ita/RMT_DEV.cpp b/src/stdfblib/ita/RMT_DEV.cpp
index 7b17126..6a2e8d2 100644
--- a/src/stdfblib/ita/RMT_DEV.cpp
+++ b/src/stdfblib/ita/RMT_DEV.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Rene Smodic, Ingo Hegny
diff --git a/src/stdfblib/ita/RMT_DEV.h b/src/stdfblib/ita/RMT_DEV.h
index e15e3e0..57a75d8 100644
--- a/src/stdfblib/ita/RMT_DEV.h
+++ b/src/stdfblib/ita/RMT_DEV.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Gerhard Ebenhofer, Rene Smodic, Ingo Hegny
diff --git a/src/stdfblib/ita/RMT_RES.cpp b/src/stdfblib/ita/RMT_RES.cpp
index a4eeace..a6e3ae3 100644
--- a/src/stdfblib/ita/RMT_RES.cpp
+++ b/src/stdfblib/ita/RMT_RES.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2015 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Rene Smodic, Thomas Strasser,
@@ -23,7 +24,7 @@
const CStringDictionary::TStringId RMT_RES::scm_aunDIDataTypeIds[] = {g_nStringIdWSTRING};
-const SFBInterfaceSpec RMT_RES::scm_stRESInterfaceSpec = {
+const SFBInterfaceSpec RMT_RES::scm_stFBInterfaceSpec = {
0,
0,
0,
@@ -44,7 +45,7 @@
RMT_RES::RMT_RES(CStringDictionary::TStringId pa_nInstanceNameId, CResource* pa_poDevice):
- CResource(pa_poDevice, &scm_stRESInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData){
+ CResource(pa_poDevice, &scm_stFBInterfaceSpec, pa_nInstanceNameId, m_anFBConnData, m_anFBVarsData){
addFB(CTypeLib::createFB(g_nStringIdSTART, g_nStringIdE_RESTART, this));
addFB(CTypeLib::createFB(g_nStringIdMGR_FF, g_nStringIdE_SR, this));
addFB(CTypeLib::createFB(g_nStringIdMGR, g_nStringIdDEV_MGR, this));
diff --git a/src/stdfblib/ita/RMT_RES.h b/src/stdfblib/ita/RMT_RES.h
index 243f63f..c489eb1 100644
--- a/src/stdfblib/ita/RMT_RES.h
+++ b/src/stdfblib/ita/RMT_RES.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gerhard Ebenhofer, Thomas Strasser,
@@ -24,7 +25,7 @@
void joinResourceThread();
private:
- static const SFBInterfaceSpec scm_stRESInterfaceSpec;
+ static const SFBInterfaceSpec scm_stFBInterfaceSpec;
FORTE_FB_DATA_ARRAY(0,1,0, 0);
diff --git a/src/stdfblib/net/CMakeLists.txt b/src/stdfblib/net/CMakeLists.txt
index 6b3be93..05e3c61 100644
--- a/src/stdfblib/net/CMakeLists.txt
+++ b/src/stdfblib/net/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2010 - 2012 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl
+# Copyright (c) 2010 - 2012 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl
# * - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
diff --git a/src/stdfblib/net/GEN_CLIENT.cpp b/src/stdfblib/net/GEN_CLIENT.cpp
index 7909b01..d78be4f 100644
--- a/src/stdfblib/net/GEN_CLIENT.cpp
+++ b/src/stdfblib/net/GEN_CLIENT.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/stdfblib/net/GEN_CLIENT.h b/src/stdfblib/net/GEN_CLIENT.h
index 181a4bc..f7b6c24 100644
--- a/src/stdfblib/net/GEN_CLIENT.h
+++ b/src/stdfblib/net/GEN_CLIENT.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Martin Melik Merkumians
diff --git a/src/stdfblib/net/GEN_PUBL.cpp b/src/stdfblib/net/GEN_PUBL.cpp
index b51afee..6421049 100644
--- a/src/stdfblib/net/GEN_PUBL.cpp
+++ b/src/stdfblib/net/GEN_PUBL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Rene Smodic, Ingo Hegny,
diff --git a/src/stdfblib/net/GEN_PUBL.h b/src/stdfblib/net/GEN_PUBL.h
index 5d74dd0..cdea18c 100644
--- a/src/stdfblib/net/GEN_PUBL.h
+++ b/src/stdfblib/net/GEN_PUBL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/stdfblib/net/GEN_PUBLISH.cpp b/src/stdfblib/net/GEN_PUBLISH.cpp
index 08bd52f..795f3e1 100644
--- a/src/stdfblib/net/GEN_PUBLISH.cpp
+++ b/src/stdfblib/net/GEN_PUBLISH.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, THomas Strasser, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/stdfblib/net/GEN_PUBLISH.h b/src/stdfblib/net/GEN_PUBLISH.h
index 169f07e..21cce50 100644
--- a/src/stdfblib/net/GEN_PUBLISH.h
+++ b/src/stdfblib/net/GEN_PUBLISH.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Martin Melik Merkumians
diff --git a/src/stdfblib/net/GEN_SERVER.cpp b/src/stdfblib/net/GEN_SERVER.cpp
index abc0d66..93f9fd8 100644
--- a/src/stdfblib/net/GEN_SERVER.cpp
+++ b/src/stdfblib/net/GEN_SERVER.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, THomas Strasser, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/stdfblib/net/GEN_SERVER.h b/src/stdfblib/net/GEN_SERVER.h
index 54eff4e..d45089a 100644
--- a/src/stdfblib/net/GEN_SERVER.h
+++ b/src/stdfblib/net/GEN_SERVER.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians
diff --git a/src/stdfblib/net/GEN_SUBL.cpp b/src/stdfblib/net/GEN_SUBL.cpp
index 4448d2e..5b74e64 100644
--- a/src/stdfblib/net/GEN_SUBL.cpp
+++ b/src/stdfblib/net/GEN_SUBL.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Thomas Strasser, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/stdfblib/net/GEN_SUBL.h b/src/stdfblib/net/GEN_SUBL.h
index 3530afb..bd0f639 100644
--- a/src/stdfblib/net/GEN_SUBL.h
+++ b/src/stdfblib/net/GEN_SUBL.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Gerhard Ebenhofer, Ingo Hegny,
diff --git a/src/stdfblib/net/GEN_SUBSCRIBE.cpp b/src/stdfblib/net/GEN_SUBSCRIBE.cpp
index 05ad48c..64e4928 100644
--- a/src/stdfblib/net/GEN_SUBSCRIBE.cpp
+++ b/src/stdfblib/net/GEN_SUBSCRIBE.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, THomas Strasser, Alois Zoitl, Gerhard Ebenhofer,
diff --git a/src/stdfblib/net/GEN_SUBSCRIBE.h b/src/stdfblib/net/GEN_SUBSCRIBE.h
index 11738bb..15647c4 100644
--- a/src/stdfblib/net/GEN_SUBSCRIBE.h
+++ b/src/stdfblib/net/GEN_SUBSCRIBE.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians
diff --git a/src/stdfblib/timedfb.cpp b/src/stdfblib/timedfb.cpp
index 9f2093c..7c230ad 100644
--- a/src/stdfblib/timedfb.cpp
+++ b/src/stdfblib/timedfb.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2013 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Gunnar Grabmair, Ingo Hegny, GErhard Ebenhofer
@@ -76,12 +77,9 @@
EMGMResponse CTimedFB::changeFBExecutionState(EMGMCommandType pa_unCommand){
EMGMResponse eRetVal = CFunctionBlock::changeFBExecutionState(pa_unCommand);
- if((e_RDY == eRetVal) &&
- ((cg_nMGM_CMD_Stop == pa_unCommand) || (cg_nMGM_CMD_Kill == pa_unCommand))){
- if(mActive){
- getTimer().unregisterTimedFB(this);
- mActive = false;
- }
+ if((e_RDY == eRetVal) && ((cg_nMGM_CMD_Stop == pa_unCommand) || (cg_nMGM_CMD_Kill == pa_unCommand)) && mActive) {
+ getTimer().unregisterTimedFB(this);
+ mActive = false;
}
return eRetVal;
}
diff --git a/src/stdfblib/timedfb.h b/src/stdfblib/timedfb.h
index a20e2af..d8541d7 100644
--- a/src/stdfblib/timedfb.h
+++ b/src/stdfblib/timedfb.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2005 - 2014 ACIN, Profactor GmbH, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Thomas Strasser, Gunnar Grabmair, Martin Melik Merkumians,
diff --git a/src/stringlist.cpp.in b/src/stringlist.cpp.in
index 9912a2f..6151ee3 100644
--- a/src/stringlist.cpp.in
+++ b/src/stringlist.cpp.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010 - 2012 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Michael Hofmann, Alois Zoitl, Ingo Hegny
diff --git a/src/stringlist.h.in b/src/stringlist.h.in
index c56ee23..989e0a3 100644
--- a/src/stringlist.h.in
+++ b/src/stringlist.h.in
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2010, 2012 ACIN, Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Michael Hofmann, Alois Zoitl
diff --git a/systemtests/CMakeLists.txt b/systemtests/CMakeLists.txt
index 699b394..3cb286c 100644
--- a/systemtests/CMakeLists.txt
+++ b/systemtests/CMakeLists.txt
@@ -1,12 +1,101 @@
-
SET(SOURCE_GROUP ${SOURCE_GROUP}\\systemtests)
if(FORTE_SYSTEM_TESTS)
-SET(CTEST_OUTPUT_ON_FAILURE TRUE)
+ add_subdirectory(src)
-forte_add_test(Test1 forte_test_1.fboot 5)
-set_tests_properties (Test1 PROPERTIES WILL_FAIL true)
-forte_add_test(Test2 forte_test_2.fboot 5)
+ #hard_pass_example.fboot doesn't produce any logging error and all TEST_CONDITION FBs pass
+ #soft_pass_example.fboot produces logging error but all TEST_CONDITION FBs pass
+ #fail_example.fboot has TEST_CONDITION FBs that fail, so it always fail, no matter hard or soft
+
+ forte_add_systemtest_hard(Test_Hard_Pass hard_pass_example.fboot 5)
+
+ forte_add_systemtest_soft(Test_Soft_Pass_Clean hard_pass_example.fboot 5)
+ forte_add_systemtest_soft(Test_Soft_Pass_Dirty soft_pass_example.fboot 5)
+ forte_add_systemtest_hard(Test_DeInitCommFB deInit_commFb.fboot 5) #check that the de-initialization of a CommFB produce an INITO
+
+ forte_add_systemtest_hard(Test_Soft_Example_As_Hard_Inverted soft_pass_example.fboot 5)
+ SET_TESTS_PROPERTIES(Test_Soft_Example_As_Hard_Inverted PROPERTIES WILL_FAIL TRUE)
+ forte_add_systemtest_hard(Test_Hard_Fail_Alaways_Inverted fail_example.fboot 5)
+ SET_TESTS_PROPERTIES(Test_Hard_Fail_Alaways_Inverted PROPERTIES WILL_FAIL TRUE)
+ forte_add_systemtest_soft(Test_Soft_Fail_Alaways_Inverted fail_example.fboot 5)
+ SET_TESTS_PROPERTIES(Test_Soft_Fail_Alaways_Inverted PROPERTIES WILL_FAIL TRUE)
+
+ #Test using environement variable as bootfile
+ ##############################################
+ ADD_TEST(NAME Test_Hard_Pass_ENV COMMAND $<TARGET_FILE:forte>)
+ set_tests_properties (Test_Hard_Pass_ENV PROPERTIES TIMEOUT 5)
+ forte_add_env_file(Test_Hard_Pass_ENV hard_pass_example.fboot)
+ SET_TESTS_PROPERTIES(Test_Hard_Pass_ENV PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T")
+ ##############################################
+
+ #Test using local bootfile
+ ##############################################
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/hard_pass_example.fboot" file_str)
+ STRING(REPLACE "\\" "\\\\" file_str ${file_str})
+ configure_file(${file_str} ${CMAKE_CURRENT_BINARY_DIR}/forte.fboot COPYONLY)
+ ADD_TEST(NAME Test_Hard_Pass_LOCAL COMMAND $<TARGET_FILE:forte>)
+ set_tests_properties (Test_Hard_Pass_LOCAL PROPERTIES TIMEOUT 5)
+ SET_TESTS_PROPERTIES(Test_Hard_Pass_LOCAL PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T")
+ ##############################################
+
+ #Test bootfile with a missing semicolon
+ ##############################################
+ ADD_TEST(NAME Test_missing_semicolon COMMAND $<TARGET_FILE:forte>)
+ set_tests_properties (Test_missing_semicolon PROPERTIES TIMEOUT 5)
+ forte_add_env_file(Test_missing_semicolon missing_semicolon.fboot)
+ SET_TESTS_PROPERTIES(Test_missing_semicolon PROPERTIES PASS_REGULAR_EXPRESSION "Boot file line does not contain separating ';'")
+ ##############################################
+
+ #Test unkonwn FB
+ ##############################################
+ ADD_TEST(NAME Test_missing_unknown_FB COMMAND $<TARGET_FILE:forte>)
+ set_tests_properties (Test_missing_unknown_FB PROPERTIES TIMEOUT 5)
+ forte_add_env_file(Test_missing_unknown_FB unknown_FB.fboot)
+ SET_TESTS_PROPERTIES(Test_missing_unknown_FB PROPERTIES PASS_REGULAR_EXPRESSION "Boot file command could not be executed")
+ ##############################################
+
+ #Test wrong boot-file with FORTE_BOOT_FILE_FAIL_MISSING set
+ ##############################################
+ ADD_TEST(NAME Test_wrong_bootfile_w_FAIL COMMAND $<TARGET_FILE:forte>)
+ set_tests_properties (Test_wrong_bootfile_w_FAIL PROPERTIES TIMEOUT 5)
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/non_existing.fboot" file_str)
+ STRING(REPLACE "\\" "\\\\" file_str ${file_str})
+ set_tests_properties(Test_wrong_bootfile_w_FAIL PROPERTIES ENVIRONMENT "FORTE_BOOT_FILE=${file_str};FORTE_BOOT_FILE_FAIL_MISSING=1")
+ SET_TESTS_PROPERTIES(Test_wrong_bootfile_w_FAIL PROPERTIES PASS_REGULAR_EXPRESSION "Boot file ${file_str} could not be opened and FORTE_BOOT_FILE_FAIL_MISSING is set")
+ ##############################################
+
+ #Test help parameter (-h)
+ ##############################################
+ ADD_TEST(NAME Test_help_parameter COMMAND $<TARGET_FILE:forte> -h)
+ set_tests_properties (Test_help_parameter PROPERTIES TIMEOUT 5)
+ SET_TESTS_PROPERTIES(Test_help_parameter PROPERTIES PASS_REGULAR_EXPRESSION "Usage: forte \\[options\\]")
+ ##############################################
+
+ #Test wrong parameter (missing -)
+ ##############################################
+ ADD_TEST(NAME Test_wrong_parameter COMMAND $<TARGET_FILE:forte> f file1)
+ set_tests_properties (Test_wrong_parameter PROPERTIES TIMEOUT 5)
+ SET_TESTS_PROPERTIES(Test_wrong_parameter PROPERTIES PASS_REGULAR_EXPRESSION "Usage: forte \\[options\\]")
+ ##############################################
+
+ #Test invalid parameter (-z)
+ ##############################################
+ ADD_TEST(NAME Test_invalid_parameter COMMAND $<TARGET_FILE:forte> -z)
+ set_tests_properties (Test_invalid_parameter PROPERTIES TIMEOUT 5)
+ SET_TESTS_PROPERTIES(Test_invalid_parameter PROPERTIES PASS_REGULAR_EXPRESSION "Usage: forte \\[options\\]")
+ ##############################################
+
+ #Test valid and invalid parameter (-c localhost:61499 -z)
+ ##############################################
+ ADD_TEST(NAME Test_valid_invalid_parameter COMMAND $<TARGET_FILE:forte> -c localhost:61499 -z)
+ set_tests_properties (Test_valid_invalid_parameter PROPERTIES TIMEOUT 5)
+ SET_TESTS_PROPERTIES(Test_valid_invalid_parameter PROPERTIES PASS_REGULAR_EXPRESSION "Usage: forte \\[options\\]")
+ ##############################################
+
+ # Simple test with 2 devices
+ forte_add_2dev_systemtests(SimpleMultiTest simple_server.fboot simple_client.fboot "" "" 5 1)
+
+ #after compilation, run "make CTEST_OUTPUT_ON_FAILURE=1 test" on the binary folder
endif(FORTE_SYSTEM_TESTS)
\ No newline at end of file
diff --git a/systemtests/deInit_commFb.fboot b/systemtests/deInit_commFb.fboot
new file mode 100644
index 0000000..b1bf4e0
--- /dev/null
+++ b/systemtests/deInit_commFb.fboot
@@ -0,0 +1,41 @@
+;<Request ID="1" Action="CREATE"><FB Name="DeInitCommFB" Type="EMB_RES" /></Request>
+DeInitCommFB;<Request ID="2" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+DeInitCommFB;<Request ID="3" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+DeInitCommFB;<Request ID="4" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+DeInitCommFB;<Request ID="5" Action="CREATE"><FB Name="PUBLISH_0" Type="SERVER_0" /></Request>
+DeInitCommFB;<Request ID="6" Action="CREATE"><FB Name="E_SWITCH_1" Type="E_SWITCH" /></Request>
+DeInitCommFB;<Request ID="7" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+DeInitCommFB;<Request ID="8" Action="CREATE"><FB Name="E_SWITCH_2" Type="E_SWITCH" /></Request>
+DeInitCommFB;<Request ID="9" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+DeInitCommFB;<Request ID="10" Action="CREATE"><FB Name="E_SR_3" Type="E_SR" /></Request>
+DeInitCommFB;<Request ID="11" Action="CREATE"><FB Name="E_SWITCH_3" Type="E_SWITCH" /></Request>
+DeInitCommFB;<Request ID="12" Action="CREATE"><FB Name="PUBLISH_0_3" Type="PUBLISH_0" /></Request>
+DeInitCommFB;<Request ID="13" Action="CREATE"><FB Name="PUBLISH_0_2" Type="SUBSCRIBE_0" /></Request>
+DeInitCommFB;<Request ID="14" Action="CREATE"><FB Name="PUBLISH_0_1" Type="CLIENT_0" /></Request>
+DeInitCommFB;<Request ID="15" Action="CREATE"><Connection Source="PUBLISH_0.INITO" Destination="E_SWITCH.EI" /></Request>
+DeInitCommFB;<Request ID="16" Action="CREATE"><Connection Source="E_SR_3.EO" Destination="PUBLISH_0_3.INIT" /></Request>
+DeInitCommFB;<Request ID="17" Action="CREATE"><Connection Source="PUBLISH_0_3.INITO" Destination="E_SWITCH_3.EI" /></Request>
+DeInitCommFB;<Request ID="18" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="PUBLISH_0_2.INIT" /></Request>
+DeInitCommFB;<Request ID="19" Action="CREATE"><Connection Source="PUBLISH_0_2.INITO" Destination="E_SWITCH_2.EI" /></Request>
+DeInitCommFB;<Request ID="20" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="PUBLISH_0_1.INIT" /></Request>
+DeInitCommFB;<Request ID="21" Action="CREATE"><Connection Source="PUBLISH_0_1.INITO" Destination="E_SWITCH_1.EI" /></Request>
+DeInitCommFB;<Request ID="22" Action="CREATE"><Connection Source="START.COLD" Destination="E_SR_3.S" /></Request>
+DeInitCommFB;<Request ID="23" Action="CREATE"><Connection Source="START.WARM" Destination="E_SR_3.S" /></Request>
+DeInitCommFB;<Request ID="24" Action="CREATE"><Connection Source="E_SWITCH_3.EO1" Destination="E_SR_3.R" /></Request>
+DeInitCommFB;<Request ID="25" Action="CREATE"><Connection Source="E_SWITCH_3.EO0" Destination="E_SR_2.S" /></Request>
+DeInitCommFB;<Request ID="26" Action="CREATE"><Connection Source="E_SWITCH_2.EO1" Destination="E_SR_2.R" /></Request>
+DeInitCommFB;<Request ID="27" Action="CREATE"><Connection Source="E_SWITCH_2.EO0" Destination="E_SR_1.S" /></Request>
+DeInitCommFB;<Request ID="28" Action="CREATE"><Connection Source="E_SWITCH_1.EO1" Destination="E_SR_1.R" /></Request>
+DeInitCommFB;<Request ID="29" Action="CREATE"><Connection Source="E_SWITCH_1.EO0" Destination="E_SR.S" /></Request>
+DeInitCommFB;<Request ID="30" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="E_SR.R" /></Request>
+DeInitCommFB;<Request ID="31" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="STEST_END.REQ" /></Request>
+DeInitCommFB;<Request ID="32" Action="CREATE"><Connection Source="E_SR.EO" Destination="PUBLISH_0.INIT" /></Request>
+DeInitCommFB;<Request ID="33" Action="CREATE"><Connection Source="E_SR.Q" Destination="E_SWITCH.G" /></Request>
+DeInitCommFB;<Request ID="34" Action="CREATE"><Connection Source="E_SR.Q" Destination="PUBLISH_0.QI" /></Request>
+DeInitCommFB;<Request ID="35" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="E_SWITCH_1.G" /></Request>
+DeInitCommFB;<Request ID="36" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="E_SWITCH_2.G" /></Request>
+DeInitCommFB;<Request ID="37" Action="CREATE"><Connection Source="E_SR_3.Q" Destination="E_SWITCH_3.G" /></Request>
+DeInitCommFB;<Request ID="38" Action="CREATE"><Connection Source="E_SR_3.Q" Destination="PUBLISH_0_3.QI" /></Request>
+DeInitCommFB;<Request ID="39" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="PUBLISH_0_2.QI" /></Request>
+DeInitCommFB;<Request ID="40" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="PUBLISH_0_1.QI" /></Request>
+DeInitCommFB;<Request ID="41" Action="START"/>
diff --git a/systemtests/fail_example.fboot b/systemtests/fail_example.fboot
new file mode 100644
index 0000000..f439e36
--- /dev/null
+++ b/systemtests/fail_example.fboot
@@ -0,0 +1,23 @@
+;<Request ID="1" Action="CREATE"><FB Name="Fail_Example" Type="EMB_RES" /></Request>
+Fail_Example;<Request ID="2" Action="CREATE"><FB Name="BOOL2BOOL_1_1_1" Type="BOOL2BOOL" /></Request>
+Fail_Example;<Request ID="3" Action="WRITE"><Connection Source="false" Destination="BOOL2BOOL_1_1_1.IN" /></Request>
+Fail_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+Fail_Example;<Request ID="5" Action="WRITE"><Connection Source="false" Destination="BOOL2BOOL_1.IN" /></Request>
+Fail_Example;<Request ID="6" Action="CREATE"><FB Name="BOOL2BOOL_1_1" Type="BOOL2BOOL" /></Request>
+Fail_Example;<Request ID="7" Action="WRITE"><Connection Source="true" Destination="BOOL2BOOL_1_1.IN" /></Request>
+Fail_Example;<Request ID="8" Action="CREATE"><FB Name="STEST_END_0" Type="STEST_END" /></Request>
+Fail_Example;<Request ID="9" Action="CREATE"><FB Name="SHOULD_FAIL_1" Type="TEST_CONDITION" /></Request>
+Fail_Example;<Request ID="10" Action="CREATE"><FB Name="SHOULD_FAIL_2" Type="TEST_CONDITION" /></Request>
+Fail_Example;<Request ID="11" Action="CREATE"><FB Name="SHOULD_NOT_FAIL" Type="TEST_CONDITION" /></Request>
+Fail_Example;<Request ID="12" Action="CREATE"><Connection Source="BOOL2BOOL_1.CNF" Destination="SHOULD_FAIL_1.REQ" /></Request>
+Fail_Example;<Request ID="13" Action="CREATE"><Connection Source="SHOULD_FAIL_1.CNF" Destination="BOOL2BOOL_1_1.REQ" /></Request>
+Fail_Example;<Request ID="14" Action="CREATE"><Connection Source="BOOL2BOOL_1_1_1.CNF" Destination="SHOULD_FAIL_2.REQ" /></Request>
+Fail_Example;<Request ID="15" Action="CREATE"><Connection Source="SHOULD_FAIL_2.CNF" Destination="STEST_END_0.REQ" /></Request>
+Fail_Example;<Request ID="16" Action="CREATE"><Connection Source="BOOL2BOOL_1_1.CNF" Destination="SHOULD_NOT_FAIL.REQ" /></Request>
+Fail_Example;<Request ID="17" Action="CREATE"><Connection Source="SHOULD_NOT_FAIL.CNF" Destination="BOOL2BOOL_1_1_1.REQ" /></Request>
+Fail_Example;<Request ID="18" Action="CREATE"><Connection Source="START.COLD" Destination="BOOL2BOOL_1.REQ" /></Request>
+Fail_Example;<Request ID="19" Action="CREATE"><Connection Source="START.WARM" Destination="BOOL2BOOL_1.REQ" /></Request>
+Fail_Example;<Request ID="20" Action="CREATE"><Connection Source="BOOL2BOOL_1.OUT" Destination="SHOULD_FAIL_1.check" /></Request>
+Fail_Example;<Request ID="21" Action="CREATE"><Connection Source="BOOL2BOOL_1_1_1.OUT" Destination="SHOULD_FAIL_2.check" /></Request>
+Fail_Example;<Request ID="22" Action="CREATE"><Connection Source="BOOL2BOOL_1_1.OUT" Destination="SHOULD_NOT_FAIL.check" /></Request>
+Fail_Example;<Request ID="23" Action="START"/>
diff --git a/systemtests/forte_test_1.fboot b/systemtests/forte_test_1.fboot
deleted file mode 100644
index 63a021a..0000000
--- a/systemtests/forte_test_1.fboot
+++ /dev/null
@@ -1,22 +0,0 @@
-;<Request ID="0" Action="CREATE"><FB Name="EMB_RES" Type="EMB_RES" /></Request>
-EMB_RES;<Request ID="1" Action="CREATE"><FB Name="E_RESTART_1" Type="E_RESTART" /></Request>
-EMB_RES;<Request ID="2" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
-EMB_RES;<Request ID="3" Action="WRITE"><Connection Source="false" Destination="BOOL2BOOL.IN" /></Request>
-EMB_RES;<Request ID="4" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
-EMB_RES;<Request ID="5" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_1" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_1.QI" /></Request>
-EMB_RES;<Request ID="7" Action="WRITE"><Connection Source="ERROR: T" Destination="OUT_ANY_CONSOLE_1.LABEL" /></Request>
-EMB_RES;<Request ID="8" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_0" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="9" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_0.QI" /></Request>
-EMB_RES;<Request ID="10" Action="WRITE"><Connection Source="Done" Destination="OUT_ANY_CONSOLE_0.LABEL" /></Request>
-EMB_RES;<Request ID="11" Action="CREATE"><FB Name="STEST_END_0" Type="STEST_END" /></Request>
-EMB_RES;<Request ID="12" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="E_SWITCH.EI" /></Request>
-EMB_RES;<Request ID="13" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="OUT_ANY_CONSOLE_0.REQ" /></Request>
-EMB_RES;<Request ID="14" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_0.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="15" Action="CREATE"><Connection Source="E_RESTART_1.COLD" Destination="BOOL2BOOL.REQ" /></Request>
-EMB_RES;<Request ID="16" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="OUT_ANY_CONSOLE_1.REQ" /></Request>
-EMB_RES;<Request ID="17" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_1.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="18" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="E_SWITCH.G" /></Request>
-EMB_RES;<Request ID="19" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_1.IN" /></Request>
-EMB_RES;<Request ID="20" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_0.IN" /></Request>
-EMB_RES;<Request ID="21" Action="START"/>
diff --git a/systemtests/forte_test_2.fboot b/systemtests/forte_test_2.fboot
deleted file mode 100644
index 238e20d..0000000
--- a/systemtests/forte_test_2.fboot
+++ /dev/null
@@ -1,22 +0,0 @@
-;<Request ID="0" Action="CREATE"><FB Name="EMB_RES" Type="EMB_RES" /></Request>
-EMB_RES;<Request ID="1" Action="CREATE"><FB Name="E_RESTART_1" Type="E_RESTART" /></Request>
-EMB_RES;<Request ID="2" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
-EMB_RES;<Request ID="3" Action="WRITE"><Connection Source="true" Destination="BOOL2BOOL.IN" /></Request>
-EMB_RES;<Request ID="4" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
-EMB_RES;<Request ID="5" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_1" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_1.QI" /></Request>
-EMB_RES;<Request ID="7" Action="WRITE"><Connection Source="ERROR: T" Destination="OUT_ANY_CONSOLE_1.LABEL" /></Request>
-EMB_RES;<Request ID="8" Action="CREATE"><FB Name="OUT_ANY_CONSOLE_0" Type="OUT_ANY_CONSOLE" /></Request>
-EMB_RES;<Request ID="9" Action="WRITE"><Connection Source="1" Destination="OUT_ANY_CONSOLE_0.QI" /></Request>
-EMB_RES;<Request ID="10" Action="WRITE"><Connection Source="Done" Destination="OUT_ANY_CONSOLE_0.LABEL" /></Request>
-EMB_RES;<Request ID="11" Action="CREATE"><FB Name="STEST_END_0" Type="STEST_END" /></Request>
-EMB_RES;<Request ID="12" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="E_SWITCH.EI" /></Request>
-EMB_RES;<Request ID="13" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="OUT_ANY_CONSOLE_0.REQ" /></Request>
-EMB_RES;<Request ID="14" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_0.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="15" Action="CREATE"><Connection Source="E_RESTART_1.COLD" Destination="BOOL2BOOL.REQ" /></Request>
-EMB_RES;<Request ID="16" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="OUT_ANY_CONSOLE_1.REQ" /></Request>
-EMB_RES;<Request ID="17" Action="CREATE"><Connection Source="OUT_ANY_CONSOLE_1.CNF" Destination="STEST_END_0.REQ" /></Request>
-EMB_RES;<Request ID="18" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="E_SWITCH.G" /></Request>
-EMB_RES;<Request ID="19" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_1.IN" /></Request>
-EMB_RES;<Request ID="20" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="OUT_ANY_CONSOLE_0.IN" /></Request>
-EMB_RES;<Request ID="21" Action="START"/>
diff --git a/systemtests/hard_pass_example.fboot b/systemtests/hard_pass_example.fboot
new file mode 100644
index 0000000..ab811de
--- /dev/null
+++ b/systemtests/hard_pass_example.fboot
@@ -0,0 +1,11 @@
+;<Request ID="1" Action="CREATE"><FB Name="Hard_Pass_Example" Type="EMB_RES" /></Request>
+Hard_Pass_Example;<Request ID="2" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+Hard_Pass_Example;<Request ID="3" Action="CREATE"><FB Name="SHOULD_NOT_FAIL" Type="TEST_CONDITION" /></Request>
+Hard_Pass_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+Hard_Pass_Example;<Request ID="5" Action="WRITE"><Connection Source="true" Destination="BOOL2BOOL.IN" /></Request>
+Hard_Pass_Example;<Request ID="6" Action="CREATE"><Connection Source="SHOULD_NOT_FAIL.CNF" Destination="STEST_END.REQ" /></Request>
+Hard_Pass_Example;<Request ID="7" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="SHOULD_NOT_FAIL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="8" Action="CREATE"><Connection Source="START.COLD" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="9" Action="CREATE"><Connection Source="START.WARM" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="10" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="SHOULD_NOT_FAIL.check" /></Request>
+Hard_Pass_Example;<Request ID="11" Action="START"/>
diff --git a/systemtests/missing_semicolon.fboot b/systemtests/missing_semicolon.fboot
new file mode 100644
index 0000000..ff9c3b1
--- /dev/null
+++ b/systemtests/missing_semicolon.fboot
@@ -0,0 +1,12 @@
+;<Request ID="1" Action="CREATE"><FB Name="Hard_Pass_Example" Type="EMB_RES" /></Request>
+Hard_Pass_Example;<Request ID="2" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+Hard_Pass_Example;<Request ID="3" Action="CREATE"><FB Name="SHOULD_NOT_FAIL" Type="TEST_CONDITION" /></Request>
+Hard_Pass_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+Hard_Pass_Example;<Request ID="5" Action="WRITE"><Connection Source="true" Destination="BOOL2BOOL.IN" /></Request>
+Hard_Pass_Example;<Request ID="6" Action="CREATE"><Connection Source="SHOULD_NOT_FAIL.CNF" Destination="STEST_END.REQ" /></Request>
+Hard_Pass_Example;<Request ID="7" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="SHOULD_NOT_FAIL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="8" Action="CREATE"><Connection Source="START.COLD" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="9" Action="CREATE"><Connection Source="START.WARM" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="10" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="SHOULD_NOT_FAIL.check" /></Request>
+Hard_Pass_Example;<Request ID="11" Action="START"/>
+Hard_Pass_Example<Request ID="10" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="SHOULD_NOT_FAIL.check" /></Request>
diff --git a/systemtests/simple_client.fboot b/systemtests/simple_client.fboot
new file mode 100644
index 0000000..24783c8
--- /dev/null
+++ b/systemtests/simple_client.fboot
@@ -0,0 +1,31 @@
+;<Request ID="1" Action="CREATE"><FB Name="simpleClientTest" Type="EMB_RES" /></Request>
+simpleClientTest;<Request ID="2" Action="CREATE"><FB Name="PUBLISH_1" Type="PUBLISH_1" /></Request>
+simpleClientTest;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1.QI" /></Request>
+simpleClientTest;<Request ID="4" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="PUBLISH_1.ID" /></Request>
+simpleClientTest;<Request ID="5" Action="CREATE"><FB Name="SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+simpleClientTest;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1.QI" /></Request>
+simpleClientTest;<Request ID="7" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="SUBSCRIBE_1.ID" /></Request>
+simpleClientTest;<Request ID="8" Action="CREATE"><FB Name="WaitServer" Type="E_DELAY" /></Request>
+simpleClientTest;<Request ID="9" Action="WRITE"><Connection Source="T#2s" Destination="WaitServer.DT" /></Request>
+simpleClientTest;<Request ID="10" Action="CREATE"><FB Name="ReturnetValueOK" Type="TEST_CONDITION" /></Request>
+simpleClientTest;<Request ID="11" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+simpleClientTest;<Request ID="12" Action="WRITE"><Connection Source="DINT#26" Destination="F_EQ.IN2" /></Request>
+simpleClientTest;<Request ID="13" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+simpleClientTest;<Request ID="14" Action="CREATE"><FB Name="DINT2DINT" Type="DINT2DINT" /></Request>
+simpleClientTest;<Request ID="15" Action="WRITE"><Connection Source="DINT#26" Destination="DINT2DINT.IN" /></Request>
+simpleClientTest;<Request ID="16" Action="CREATE"><FB Name="DINT2DINT_2" Type="DINT2DINT" /></Request>
+simpleClientTest;<Request ID="17" Action="CREATE"><Connection Source="START.COLD" Destination="PUBLISH_1.INIT" /></Request>
+simpleClientTest;<Request ID="18" Action="CREATE"><Connection Source="START.WARM" Destination="PUBLISH_1.INIT" /></Request>
+simpleClientTest;<Request ID="19" Action="CREATE"><Connection Source="PUBLISH_1.INITO" Destination="SUBSCRIBE_1.INIT" /></Request>
+simpleClientTest;<Request ID="20" Action="CREATE"><Connection Source="SUBSCRIBE_1.INITO" Destination="WaitServer.START" /></Request>
+simpleClientTest;<Request ID="21" Action="CREATE"><Connection Source="DINT2DINT.CNF" Destination="PUBLISH_1.REQ" /></Request>
+simpleClientTest;<Request ID="22" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="ReturnetValueOK.REQ" /></Request>
+simpleClientTest;<Request ID="23" Action="CREATE"><Connection Source="ReturnetValueOK.CNF" Destination="STEST_END.REQ" /></Request>
+simpleClientTest;<Request ID="24" Action="CREATE"><Connection Source="WaitServer.EO" Destination="DINT2DINT.REQ" /></Request>
+simpleClientTest;<Request ID="25" Action="CREATE"><Connection Source="DINT2DINT_2.CNF" Destination="F_EQ.REQ" /></Request>
+simpleClientTest;<Request ID="26" Action="CREATE"><Connection Source="SUBSCRIBE_1.IND" Destination="DINT2DINT_2.REQ" /></Request>
+simpleClientTest;<Request ID="27" Action="CREATE"><Connection Source="DINT2DINT.OUT" Destination="PUBLISH_1.SD_1" /></Request>
+simpleClientTest;<Request ID="28" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="ReturnetValueOK.check" /></Request>
+simpleClientTest;<Request ID="29" Action="CREATE"><Connection Source="DINT2DINT_2.OUT" Destination="F_EQ.IN1" /></Request>
+simpleClientTest;<Request ID="30" Action="CREATE"><Connection Source="SUBSCRIBE_1.RD_1" Destination="DINT2DINT_2.IN" /></Request>
+simpleClientTest;<Request ID="31" Action="START"/>
diff --git a/systemtests/simple_server.fboot b/systemtests/simple_server.fboot
new file mode 100644
index 0000000..c4da6f3
--- /dev/null
+++ b/systemtests/simple_server.fboot
@@ -0,0 +1,25 @@
+;<Request ID="1" Action="CREATE"><FB Name="simpleServerTest" Type="EMB_RES" /></Request>
+simpleServerTest;<Request ID="2" Action="CREATE"><FB Name="PUBLISH_1" Type="PUBLISH_1" /></Request>
+simpleServerTest;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1.QI" /></Request>
+simpleServerTest;<Request ID="4" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="PUBLISH_1.ID" /></Request>
+simpleServerTest;<Request ID="5" Action="CREATE"><FB Name="SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+simpleServerTest;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1.QI" /></Request>
+simpleServerTest;<Request ID="7" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="SUBSCRIBE_1.ID" /></Request>
+simpleServerTest;<Request ID="8" Action="CREATE"><FB Name="F_EQ_1" Type="F_EQ" /></Request>
+simpleServerTest;<Request ID="9" Action="WRITE"><Connection Source="DINT#26" Destination="F_EQ_1.IN2" /></Request>
+simpleServerTest;<Request ID="10" Action="CREATE"><FB Name="ReceivedDINTOK" Type="TEST_CONDITION" /></Request>
+simpleServerTest;<Request ID="11" Action="CREATE"><FB Name="DINT2DINT_1" Type="DINT2DINT" /></Request>
+simpleServerTest;<Request ID="12" Action="CREATE"><FB Name="STEST_END_1" Type="STEST_END" /></Request>
+simpleServerTest;<Request ID="13" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_1.INIT" /></Request>
+simpleServerTest;<Request ID="14" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_1.INIT" /></Request>
+simpleServerTest;<Request ID="15" Action="CREATE"><Connection Source="SUBSCRIBE_1.INITO" Destination="PUBLISH_1.INIT" /></Request>
+simpleServerTest;<Request ID="16" Action="CREATE"><Connection Source="F_EQ_1.CNF" Destination="ReceivedDINTOK.REQ" /></Request>
+simpleServerTest;<Request ID="17" Action="CREATE"><Connection Source="DINT2DINT_1.CNF" Destination="F_EQ_1.REQ" /></Request>
+simpleServerTest;<Request ID="18" Action="CREATE"><Connection Source="SUBSCRIBE_1.IND" Destination="DINT2DINT_1.REQ" /></Request>
+simpleServerTest;<Request ID="19" Action="CREATE"><Connection Source="ReceivedDINTOK.CNF" Destination="PUBLISH_1.REQ" /></Request>
+simpleServerTest;<Request ID="20" Action="CREATE"><Connection Source="PUBLISH_1.CNF" Destination="STEST_END_1.REQ" /></Request>
+simpleServerTest;<Request ID="21" Action="CREATE"><Connection Source="F_EQ_1.OUT" Destination="ReceivedDINTOK.check" /></Request>
+simpleServerTest;<Request ID="22" Action="CREATE"><Connection Source="DINT2DINT_1.OUT" Destination="F_EQ_1.IN1" /></Request>
+simpleServerTest;<Request ID="23" Action="CREATE"><Connection Source="SUBSCRIBE_1.RD_1" Destination="DINT2DINT_1.IN" /></Request>
+simpleServerTest;<Request ID="24" Action="CREATE"><Connection Source="DINT2DINT_1.OUT" Destination="PUBLISH_1.SD_1" /></Request>
+simpleServerTest;<Request ID="25" Action="START"/>
diff --git a/systemtests/soft_pass_example.fboot b/systemtests/soft_pass_example.fboot
new file mode 100644
index 0000000..a4a1605
--- /dev/null
+++ b/systemtests/soft_pass_example.fboot
@@ -0,0 +1,18 @@
+;<Request ID="1" Action="CREATE"><FB Name="Soft_Pass_Example" Type="EMB_RES" /></Request>
+Soft_Pass_Example;<Request ID="2" Action="CREATE"><FB Name="NOT_ZERO" Type="TEST_CONDITION" /></Request>
+Soft_Pass_Example;<Request ID="3" Action="CREATE"><FB Name="F_NOT" Type="F_NOT" /></Request>
+Soft_Pass_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+Soft_Pass_Example;<Request ID="5" Action="CREATE"><FB Name="STEST_END_0_1" Type="STEST_END" /></Request>
+Soft_Pass_Example;<Request ID="6" Action="CREATE"><FB Name="F_MUX_2" Type="F_MUX_2" /></Request>
+Soft_Pass_Example;<Request ID="7" Action="WRITE"><Connection Source="UINT#2" Destination="F_MUX_2.K" /></Request>
+Soft_Pass_Example;<Request ID="8" Action="CREATE"><Connection Source="F_NOT.CNF" Destination="NOT_ZERO.REQ" /></Request>
+Soft_Pass_Example;<Request ID="9" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="F_NOT.REQ" /></Request>
+Soft_Pass_Example;<Request ID="10" Action="CREATE"><Connection Source="NOT_ZERO.CNF" Destination="STEST_END_0_1.REQ" /></Request>
+Soft_Pass_Example;<Request ID="11" Action="CREATE"><Connection Source="START.COLD" Destination="F_MUX_2.REQ" /></Request>
+Soft_Pass_Example;<Request ID="12" Action="CREATE"><Connection Source="START.WARM" Destination="F_MUX_2.REQ" /></Request>
+Soft_Pass_Example;<Request ID="13" Action="CREATE"><Connection Source="START.COLD" Destination="BOOL2BOOL.REQ" /></Request>
+Soft_Pass_Example;<Request ID="14" Action="CREATE"><Connection Source="START.WARM" Destination="BOOL2BOOL.REQ" /></Request>
+Soft_Pass_Example;<Request ID="15" Action="CREATE"><Connection Source="F_NOT.OUT" Destination="NOT_ZERO.check" /></Request>
+Soft_Pass_Example;<Request ID="16" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="F_NOT.IN" /></Request>
+Soft_Pass_Example;<Request ID="17" Action="CREATE"><Connection Source="F_MUX_2.OUT" Destination="BOOL2BOOL.IN" /></Request>
+Soft_Pass_Example;<Request ID="18" Action="START"/>
diff --git a/systemtests/src/CMakeLists.txt b/systemtests/src/CMakeLists.txt
new file mode 100644
index 0000000..f8dfb33
--- /dev/null
+++ b/systemtests/src/CMakeLists.txt
@@ -0,0 +1,13 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+add_subdirectory(modules)
diff --git a/systemtests/src/modules/CMakeLists.txt b/systemtests/src/modules/CMakeLists.txt
new file mode 100644
index 0000000..1794988
--- /dev/null
+++ b/systemtests/src/modules/CMakeLists.txt
@@ -0,0 +1,19 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+if(FORTE_MODULE_UTILS)
+ add_subdirectory(utils)
+endif(FORTE_MODULE_UTILS)
+
+if(FORTE_COM_OPC_UA)
+ add_subdirectory(opc_ua)
+endif(FORTE_COM_OPC_UA)
diff --git a/systemtests/src/modules/opc_ua/CMakeLists.txt b/systemtests/src/modules/opc_ua/CMakeLists.txt
new file mode 100644
index 0000000..cb59499
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/CMakeLists.txt
@@ -0,0 +1,41 @@
+#*******************************************************************************
+# * Copyright (c) 2019 fortiss GmbH
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+# * Contributors:
+# * Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+forte_add_systemtest_soft(OPCUA_WrongParams wrongParameters.fboot 5)
+
+SET_TESTS_PROPERTIES(OPCUA_WrongParams PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_CONDITION_FAILED|==ERROR|OPC UA LOCAL") #Local server shouldn't start
+
+forte_add_systemtest_hard(OPCUA_LocalFirstRead localFirstRead.fboot 5)
+
+SET_TESTS_PROPERTIES(OPCUA_LocalFirstRead PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T|==ERROR|OPC UA REMOTE") #remote handler shouldn't start
+
+forte_add_systemtest_hard(OPCUA_LocalFirstWrite localFirstWrite.fboot 5)
+
+SET_TESTS_PROPERTIES(OPCUA_LocalFirstRead PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T|==ERROR|OPC UA REMOTE") #remote handler shouldn't start
+
+forte_add_systemtest_hard(OPCUA_LocalMethdodsCreate localMethodsCreate.fboot 5)
+
+SET_TESTS_PROPERTIES(OPCUA_LocalFirstRead PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T|==ERROR|OPC UA REMOTE") #remote handler shouldn't start
+
+forte_add_2dev_systemtests(WorkingClientServer clientWorking.fboot serverWorking.fboot "" "" 30 1)
+
+forte_add_2dev_systemtests(WorkingClientNoSubsServer clientWorkingNoSubs.fboot serverWorking.fboot "" "" 30 1)
+
+forte_add_2dev_systemtests(FailingClientServer failingClient.fboot failingServer.fboot "" "" 35 0)
+
+forte_add_2dev_systemtests(DelayedWorking delayedClient.fboot delayedServer.fboot "" "" 85 0)
+
+forte_add_2dev_systemtests(TypesWorking typesClient.fboot typesServer.fboot "" "" 10 1)
+
+forte_add_2dev_systemtests(FailActions clientFailAction.fboot localFailAction.fboot "" "" 40 0)
+
+forte_opcua_add_nodeset_without_generated(fordiacNamespace ${CMAKE_CURRENT_SOURCE_DIR}/nodespaceTest)
+
diff --git a/systemtests/src/modules/opc_ua/clientFailAction.fboot b/systemtests/src/modules/opc_ua/clientFailAction.fboot
new file mode 100644
index 0000000..970c0ad
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/clientFailAction.fboot
@@ -0,0 +1,71 @@
+;<Request ID="1" Action="CREATE"><FB Name="FailAction" Type="EMB_RES" /></Request>
+FailAction;<Request ID="2" Action="CREATE"><FB Name="ClientWrite" Type="CLIENT_1_0" /></Request>
+FailAction;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="ClientWrite.QI" /></Request>
+FailAction;<Request ID="4" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="ClientWrite.ID" /></Request>
+FailAction;<Request ID="5" Action="CREATE"><FB Name="BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+FailAction;<Request ID="6" Action="CREATE"><FB Name="ClientMethod" Type="CLIENT_0" /></Request>
+FailAction;<Request ID="7" Action="WRITE"><Connection Source="1" Destination="ClientMethod.QI" /></Request>
+FailAction;<Request ID="8" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="ClientMethod.ID" /></Request>
+FailAction;<Request ID="9" Action="CREATE"><FB Name="ReadUninit" Type="TEST_CONDITION" /></Request>
+FailAction;<Request ID="10" Action="CREATE"><FB Name="F_NOT_1_1" Type="F_NOT" /></Request>
+FailAction;<Request ID="11" Action="CREATE"><FB Name="WriteUninit" Type="TEST_CONDITION" /></Request>
+FailAction;<Request ID="12" Action="CREATE"><FB Name="CallUninit" Type="TEST_CONDITION" /></Request>
+FailAction;<Request ID="13" Action="CREATE"><FB Name="F_NOT_1" Type="F_NOT" /></Request>
+FailAction;<Request ID="14" Action="CREATE"><FB Name="F_NOT" Type="F_NOT" /></Request>
+FailAction;<Request ID="15" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+FailAction;<Request ID="16" Action="CREATE"><FB Name="E_SWITCH_1" Type="E_SWITCH" /></Request>
+FailAction;<Request ID="17" Action="CREATE"><FB Name="STEST_END_1" Type="STEST_END" /></Request>
+FailAction;<Request ID="18" Action="CREATE"><FB Name="serverInit" Type="SERVER_0" /></Request>
+FailAction;<Request ID="19" Action="WRITE"><Connection Source="1" Destination="serverInit.QI" /></Request>
+FailAction;<Request ID="20" Action="WRITE"><Connection Source="127.0.0.1:60100" Destination="serverInit.ID" /></Request>
+FailAction;<Request ID="21" Action="CREATE"><FB Name="serverDeinit" Type="SERVER_0" /></Request>
+FailAction;<Request ID="22" Action="WRITE"><Connection Source="1" Destination="serverDeinit.QI" /></Request>
+FailAction;<Request ID="23" Action="WRITE"><Connection Source="127.0.0.1:60101" Destination="serverDeinit.ID" /></Request>
+FailAction;<Request ID="24" Action="CREATE"><FB Name="CLIENT_0" Type="CLIENT_0" /></Request>
+FailAction;<Request ID="25" Action="WRITE"><Connection Source="1" Destination="CLIENT_0.QI" /></Request>
+FailAction;<Request ID="26" Action="WRITE"><Connection Source="127.0.0.1:60102" Destination="CLIENT_0.ID" /></Request>
+FailAction;<Request ID="27" Action="CREATE"><FB Name="ClientRead" Type="CLIENT_0_1" /></Request>
+FailAction;<Request ID="28" Action="WRITE"><Connection Source="1" Destination="ClientRead.QI" /></Request>
+FailAction;<Request ID="29" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="ClientRead.ID" /></Request>
+FailAction;<Request ID="30" Action="CREATE"><FB Name="BOOL2BOOL_1_1" Type="BOOL2BOOL" /></Request>
+FailAction;<Request ID="31" Action="CREATE"><FB Name="E_DELAY_1" Type="E_DELAY" /></Request>
+FailAction;<Request ID="32" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY_1.DT" /></Request>
+FailAction;<Request ID="33" Action="CREATE"><FB Name="E_DELAY_2" Type="E_DELAY" /></Request>
+FailAction;<Request ID="34" Action="WRITE"><Connection Source="T#4s" Destination="E_DELAY_2.DT" /></Request>
+FailAction;<Request ID="35" Action="CREATE"><FB Name="E_DELAY_2_2_1" Type="E_DELAY" /></Request>
+FailAction;<Request ID="36" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY_2_2_1.DT" /></Request>
+FailAction;<Request ID="37" Action="CREATE"><Connection Source="ReadUninit.CNF" Destination="ClientMethod.REQ" /></Request>
+FailAction;<Request ID="38" Action="CREATE"><Connection Source="ClientMethod.CNF" Destination="F_NOT_1_1.REQ" /></Request>
+FailAction;<Request ID="39" Action="CREATE"><Connection Source="F_NOT_1_1.CNF" Destination="CallUninit.REQ" /></Request>
+FailAction;<Request ID="40" Action="CREATE"><Connection Source="F_NOT_1.CNF" Destination="ReadUninit.REQ" /></Request>
+FailAction;<Request ID="41" Action="CREATE"><Connection Source="ClientWrite.CNF" Destination="F_NOT.REQ" /></Request>
+FailAction;<Request ID="42" Action="CREATE"><Connection Source="F_NOT.CNF" Destination="WriteUninit.REQ" /></Request>
+FailAction;<Request ID="43" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="ClientWrite.REQ" /></Request>
+FailAction;<Request ID="44" Action="CREATE"><Connection Source="CallUninit.CNF" Destination="E_SWITCH_1.EI" /></Request>
+FailAction;<Request ID="45" Action="CREATE"><Connection Source="serverInit.INITO" Destination="serverDeinit.INIT" /></Request>
+FailAction;<Request ID="46" Action="CREATE"><Connection Source="START.COLD" Destination="serverInit.INIT" /></Request>
+FailAction;<Request ID="47" Action="CREATE"><Connection Source="serverInit.IND" Destination="serverInit.RSP" /></Request>
+FailAction;<Request ID="48" Action="CREATE"><Connection Source="serverDeinit.IND" Destination="E_SR_1.S" /></Request>
+FailAction;<Request ID="49" Action="CREATE"><Connection Source="serverDeinit.IND" Destination="serverDeinit.RSP" /></Request>
+FailAction;<Request ID="50" Action="CREATE"><Connection Source="ClientWrite.INITO" Destination="ClientRead.INIT" /></Request>
+FailAction;<Request ID="51" Action="CREATE"><Connection Source="WriteUninit.CNF" Destination="ClientRead.REQ" /></Request>
+FailAction;<Request ID="52" Action="CREATE"><Connection Source="ClientRead.INITO" Destination="ClientMethod.INIT" /></Request>
+FailAction;<Request ID="53" Action="CREATE"><Connection Source="ClientRead.CNF" Destination="F_NOT_1.REQ" /></Request>
+FailAction;<Request ID="54" Action="CREATE"><Connection Source="serverInit.IND" Destination="ClientWrite.INIT" /></Request>
+FailAction;<Request ID="55" Action="CREATE"><Connection Source="ClientMethod.INITO" Destination="E_DELAY_1.START" /></Request>
+FailAction;<Request ID="56" Action="CREATE"><Connection Source="E_SWITCH_1.EO1" Destination="E_DELAY_2.START" /></Request>
+FailAction;<Request ID="57" Action="CREATE"><Connection Source="E_DELAY_2.EO" Destination="E_SR_1.R" /></Request>
+FailAction;<Request ID="58" Action="CREATE"><Connection Source="E_SWITCH_1.EO0" Destination="E_DELAY_2_2_1.START" /></Request>
+FailAction;<Request ID="59" Action="CREATE"><Connection Source="E_DELAY_2_2_1.EO" Destination="STEST_END_1.REQ" /></Request>
+FailAction;<Request ID="60" Action="CREATE"><Connection Source="E_DELAY_1.EO" Destination="CLIENT_0.INIT" /></Request>
+FailAction;<Request ID="61" Action="CREATE"><Connection Source="CLIENT_0.INITO" Destination="CLIENT_0.REQ" /></Request>
+FailAction;<Request ID="62" Action="CREATE"><Connection Source="BOOL2BOOL_1.OUT" Destination="ClientWrite.SD_1" /></Request>
+FailAction;<Request ID="63" Action="CREATE"><Connection Source="ClientMethod.QO" Destination="F_NOT_1_1.IN" /></Request>
+FailAction;<Request ID="64" Action="CREATE"><Connection Source="F_NOT_1_1.OUT" Destination="CallUninit.check" /></Request>
+FailAction;<Request ID="65" Action="CREATE"><Connection Source="F_NOT_1.OUT" Destination="ReadUninit.check" /></Request>
+FailAction;<Request ID="66" Action="CREATE"><Connection Source="ClientWrite.QO" Destination="F_NOT.IN" /></Request>
+FailAction;<Request ID="67" Action="CREATE"><Connection Source="F_NOT.OUT" Destination="WriteUninit.check" /></Request>
+FailAction;<Request ID="68" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="E_SWITCH_1.G" /></Request>
+FailAction;<Request ID="69" Action="CREATE"><Connection Source="ClientRead.QO" Destination="F_NOT_1.IN" /></Request>
+FailAction;<Request ID="70" Action="CREATE"><Connection Source="ClientRead.RD_1" Destination="BOOL2BOOL_1_1.IN" /></Request>
+FailAction;<Request ID="71" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/clientWorking.fboot b/systemtests/src/modules/opc_ua/clientWorking.fboot
new file mode 100644
index 0000000..cd8916a
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/clientWorking.fboot
@@ -0,0 +1,1896 @@
+;<Request ID="1" Action="CREATE"><FB Name="WorkingClient" Type="EMB_RES" /></Request>
+WorkingClient;<Request ID="2" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+WorkingClient;<Request ID="3" Action="CREATE"><FB Name="InitFinishedSignal" Type="SUBSCRIBE_0" /></Request>
+WorkingClient;<Request ID="4" Action="WRITE"><Connection Source="1" Destination="InitFinishedSignal.QI" /></Request>
+WorkingClient;<Request ID="5" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="InitFinishedSignal.ID" /></Request>
+WorkingClient;<Request ID="6" Action="CREATE"><FB Name="PUBLISH_0" Type="PUBLISH_0" /></Request>
+WorkingClient;<Request ID="7" Action="WRITE"><Connection Source="1" Destination="PUBLISH_0.QI" /></Request>
+WorkingClient;<Request ID="8" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="PUBLISH_0.ID" /></Request>
+WorkingClient;<Request ID="9" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="10" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.IN2" /></Request>
+WorkingClient;<Request ID="11" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="12" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="13" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.SubscribeToVars.Subscribe3.ID" /></Request>
+WorkingClient;<Request ID="14" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="15" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="16" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="17" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="18" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="19" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="20" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="21" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="22" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="23" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+WorkingClient;<Request ID="24" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.SubscribeToVars.Subscribe1.ID" /></Request>
+WorkingClient;<Request ID="25" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="26" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.SubscribeToVars.Subscribe2.ID" /></Request>
+WorkingClient;<Request ID="27" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="28" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="29" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="30" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="31" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="32" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="33" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="34" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="35" Action="WRITE"><Connection Source="3" Destination="folderTestRemote.SubscribeToVars.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="36" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="37" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="38" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.SubscribeToVars.F_EQ_.IN2" /></Request>
+WorkingClient;<Request ID="39" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="40" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_5" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="41" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.IN2" /></Request>
+WorkingClient;<Request ID="42" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="43" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.IN2" /></Request>
+WorkingClient;<Request ID="44" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ__1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="45" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.IN2" /></Request>
+WorkingClient;<Request ID="46" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="47" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.IN2" /></Request>
+WorkingClient;<Request ID="48" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR" Type="F_OR" /></Request>
+WorkingClient;<Request ID="49" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="50" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="51" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="52" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="53" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="54" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="55" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="56" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="57" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="58" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="59" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="60" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WorkingClient;<Request ID="61" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="62" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WorkingClient;<Request ID="63" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="64" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.WriteToVars.Write1.ID" /></Request>
+WorkingClient;<Request ID="65" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="66" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.WriteToVars.Write3.ID" /></Request>
+WorkingClient;<Request ID="67" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="68" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.WriteToVars.Write2.ID" /></Request>
+WorkingClient;<Request ID="69" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.writeBrowse1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="70" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.writeBrowse2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="71" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.writeBrowse3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="72" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="73" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.ReadVars.Read1.ID" /></Request>
+WorkingClient;<Request ID="74" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="75" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.ReadVars.Read2.ID" /></Request>
+WorkingClient;<Request ID="76" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="77" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="78" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="79" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="80" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="81" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="82" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="83" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="84" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="85" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="86" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="87" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="88" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="89" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="90" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="91" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="92" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+WorkingClient;<Request ID="93" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="94" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.ReadVars.Read3.ID" /></Request>
+WorkingClient;<Request ID="95" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="96" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="97" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="98" Action="CREATE"><FB Name="HandleInit.STEST_END_1" Type="STEST_END" /></Request>
+WorkingClient;<Request ID="99" Action="CREATE"><FB Name="HandleInit.E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+WorkingClient;<Request ID="100" Action="CREATE"><FB Name="HandleInit.F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+WorkingClient;<Request ID="101" Action="CREATE"><FB Name="HandleInit.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+WorkingClient;<Request ID="102" Action="WRITE"><Connection Source="1" Destination="HandleInit.PUBLISH_0_1.QI" /></Request>
+WorkingClient;<Request ID="103" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="HandleInit.PUBLISH_0_1.ID" /></Request>
+WorkingClient;<Request ID="104" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="105" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="106" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="107" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="108" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="109" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="110" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="111" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WorkingClient;<Request ID="112" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="113" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WorkingClient;<Request ID="114" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="115" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="116" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="117" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="118" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="119" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+WorkingClient;<Request ID="120" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="121" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.WriteToVars.Write3.ID" /></Request>
+WorkingClient;<Request ID="122" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="123" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+WorkingClient;<Request ID="124" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.numericWrite1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="125" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.numericWrite1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="126" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="127" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="128" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="129" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+WorkingClient;<Request ID="130" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="131" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+WorkingClient;<Request ID="132" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="133" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+WorkingClient;<Request ID="134" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="135" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="136" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="137" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="138" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="139" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="140" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="141" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="142" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="143" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="144" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="145" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="146" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="147" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="148" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="149" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="150" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+WorkingClient;<Request ID="151" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="152" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+WorkingClient;<Request ID="153" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="154" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="155" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="156" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="157" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="158" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="159" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+WorkingClient;<Request ID="160" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="161" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="162" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="163" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="164" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="165" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="166" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="167" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN2" /></Request>
+WorkingClient;<Request ID="168" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="169" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="170" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.ID" /></Request>
+WorkingClient;<Request ID="171" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="172" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="173" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="174" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="175" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="176" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="177" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="178" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="179" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="180" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+WorkingClient;<Request ID="181" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.ID" /></Request>
+WorkingClient;<Request ID="182" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="183" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.ID" /></Request>
+WorkingClient;<Request ID="184" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="185" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="186" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="187" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="188" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="189" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="190" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="191" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="192" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN2" /></Request>
+WorkingClient;<Request ID="193" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="194" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="195" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN2" /></Request>
+WorkingClient;<Request ID="196" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="197" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN2" /></Request>
+WorkingClient;<Request ID="198" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="199" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN2" /></Request>
+WorkingClient;<Request ID="200" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="201" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN2" /></Request>
+WorkingClient;<Request ID="202" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR" Type="F_OR" /></Request>
+WorkingClient;<Request ID="203" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="204" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="205" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="206" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="207" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="208" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN2" /></Request>
+WorkingClient;<Request ID="209" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="210" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="211" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.ID" /></Request>
+WorkingClient;<Request ID="212" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="213" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="214" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="215" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="216" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="217" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="218" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="219" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="220" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN2" /></Request>
+WorkingClient;<Request ID="221" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="222" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+WorkingClient;<Request ID="223" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="224" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="225" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="226" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="227" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="228" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="229" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="230" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WorkingClient;<Request ID="231" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="232" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WorkingClient;<Request ID="233" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="234" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="235" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="236" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="237" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.stringWrite1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="238" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.stringWrite1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="239" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="240" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="241" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="242" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+WorkingClient;<Request ID="243" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="244" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+WorkingClient;<Request ID="245" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="246" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+WorkingClient;<Request ID="247" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="248" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.WriteToVars.Write3.ID" /></Request>
+WorkingClient;<Request ID="249" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="250" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+WorkingClient;<Request ID="251" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="252" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+WorkingClient;<Request ID="253" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="254" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="255" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="256" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="257" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="258" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="259" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="260" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="261" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="262" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="263" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="264" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="265" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="266" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="267" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="268" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="269" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+WorkingClient;<Request ID="270" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="271" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+WorkingClient;<Request ID="272" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="273" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="274" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="275" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="276" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="277" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="278" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="279" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+WorkingClient;<Request ID="280" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="281" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="282" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="283" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="284" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="285" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="286" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN2" /></Request>
+WorkingClient;<Request ID="287" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="288" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="289" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.ID" /></Request>
+WorkingClient;<Request ID="290" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="291" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="292" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="293" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="294" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="295" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="296" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="297" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="298" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="299" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+WorkingClient;<Request ID="300" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.ID" /></Request>
+WorkingClient;<Request ID="301" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="302" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.ID" /></Request>
+WorkingClient;<Request ID="303" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="304" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="305" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="306" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="307" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="308" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="309" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="310" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="311" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN2" /></Request>
+WorkingClient;<Request ID="312" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="313" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="314" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN2" /></Request>
+WorkingClient;<Request ID="315" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="316" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN2" /></Request>
+WorkingClient;<Request ID="317" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="318" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN2" /></Request>
+WorkingClient;<Request ID="319" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="320" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN2" /></Request>
+WorkingClient;<Request ID="321" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR" Type="F_OR" /></Request>
+WorkingClient;<Request ID="322" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="323" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="324" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="325" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="326" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="327" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="328" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="329" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="330" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN2" /></Request>
+WorkingClient;<Request ID="331" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="332" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="333" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="334" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="335" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.ID" /></Request>
+WorkingClient;<Request ID="336" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="337" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="338" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="339" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN2" /></Request>
+WorkingClient;<Request ID="340" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="341" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+WorkingClient;<Request ID="342" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="343" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="344" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="345" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="346" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="347" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="348" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="349" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WorkingClient;<Request ID="350" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="351" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WorkingClient;<Request ID="352" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="353" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="354" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="355" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="356" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="357" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="358" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="359" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="360" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="361" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+WorkingClient;<Request ID="362" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="363" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+WorkingClient;<Request ID="364" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="365" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+WorkingClient;<Request ID="366" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WorkingClient;<Request ID="367" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.ID" /></Request>
+WorkingClient;<Request ID="368" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="369" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+WorkingClient;<Request ID="370" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="371" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+WorkingClient;<Request ID="372" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="373" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="374" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="375" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="376" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="377" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="378" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="379" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="380" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="381" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="382" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="383" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="384" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="385" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="386" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="387" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="388" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+WorkingClient;<Request ID="389" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="390" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+WorkingClient;<Request ID="391" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="392" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="393" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="394" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="395" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WorkingClient;<Request ID="396" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+WorkingClient;<Request ID="397" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="398" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="399" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="400" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="401" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="402" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="403" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="404" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="405" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.IN2" /></Request>
+WorkingClient;<Request ID="406" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="407" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="408" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.ID" /></Request>
+WorkingClient;<Request ID="409" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="410" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="411" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="412" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="413" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="414" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="415" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="416" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="417" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="418" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+WorkingClient;<Request ID="419" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.ID" /></Request>
+WorkingClient;<Request ID="420" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="421" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.ID" /></Request>
+WorkingClient;<Request ID="422" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="423" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="424" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.IN2" /></Request>
+WorkingClient;<Request ID="425" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="426" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="427" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="428" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="429" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="430" Action="WRITE"><Connection Source="3" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="431" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="432" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="433" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.IN2" /></Request>
+WorkingClient;<Request ID="434" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="435" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="436" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.IN2" /></Request>
+WorkingClient;<Request ID="437" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="438" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.IN2" /></Request>
+WorkingClient;<Request ID="439" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="440" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.IN2" /></Request>
+WorkingClient;<Request ID="441" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="442" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.IN2" /></Request>
+WorkingClient;<Request ID="443" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR" Type="F_OR" /></Request>
+WorkingClient;<Request ID="444" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="445" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="446" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="447" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="448" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="449" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.IN2" /></Request>
+WorkingClient;<Request ID="450" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="451" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="452" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+WorkingClient;<Request ID="453" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.ID" /></Request>
+WorkingClient;<Request ID="454" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1" Type="F_OR" /></Request>
+WorkingClient;<Request ID="455" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2" Type="F_OR" /></Request>
+WorkingClient;<Request ID="456" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="457" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="458" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.IN2" /></Request>
+WorkingClient;<Request ID="459" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="460" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="461" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="462" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="463" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+WorkingClient;<Request ID="464" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+WorkingClient;<Request ID="465" Action="CREATE"><FB Name="E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="466" Action="CREATE"><FB Name="E_DELAY" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="467" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY.DT" /></Request>
+WorkingClient;<Request ID="468" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="469" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_4.IN" /></Request>
+WorkingClient;<Request ID="470" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="471" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.ID" /></Request>
+WorkingClient;<Request ID="472" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="473" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_2.IN" /></Request>
+WorkingClient;<Request ID="474" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="475" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.ID" /></Request>
+WorkingClient;<Request ID="476" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="477" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="478" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="479" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WorkingClient;<Request ID="480" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.ID" /></Request>
+WorkingClient;<Request ID="481" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WorkingClient;<Request ID="482" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.ID" /></Request>
+WorkingClient;<Request ID="483" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="484" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_3.IN" /></Request>
+WorkingClient;<Request ID="485" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="486" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_5.IN" /></Request>
+WorkingClient;<Request ID="487" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="488" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_6.IN" /></Request>
+WorkingClient;<Request ID="489" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="490" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="491" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="492" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="493" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="494" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="495" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="496" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="497" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="498" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="499" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="500" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="501" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="502" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="503" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="504" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="505" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="506" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="507" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteBrowseName.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="508" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="509" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU_1" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="510" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteBrowseName.E_CTU_1.PV" /></Request>
+WorkingClient;<Request ID="511" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="512" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="513" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents.check" /></Request>
+WorkingClient;<Request ID="514" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="515" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="516" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU_2" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="517" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteBrowseName.E_CTU_2.PV" /></Request>
+WorkingClient;<Request ID="518" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SR" Type="E_SR" /></Request>
+WorkingClient;<Request ID="519" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="520" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.IN" /></Request>
+WorkingClient;<Request ID="521" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="522" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.ID" /></Request>
+WorkingClient;<Request ID="523" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="524" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.IN" /></Request>
+WorkingClient;<Request ID="525" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="526" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.ID" /></Request>
+WorkingClient;<Request ID="527" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="528" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="529" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="530" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WorkingClient;<Request ID="531" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.ID" /></Request>
+WorkingClient;<Request ID="532" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WorkingClient;<Request ID="533" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.ID" /></Request>
+WorkingClient;<Request ID="534" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="535" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.IN" /></Request>
+WorkingClient;<Request ID="536" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="537" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.IN" /></Request>
+WorkingClient;<Request ID="538" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="539" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.IN" /></Request>
+WorkingClient;<Request ID="540" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="541" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="542" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="543" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="544" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="545" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="546" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="547" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="548" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="549" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="550" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="551" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="552" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="553" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="554" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="555" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="556" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="557" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="558" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="559" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="560" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU_1" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="561" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_1.PV" /></Request>
+WorkingClient;<Request ID="562" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="563" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="564" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents.check" /></Request>
+WorkingClient;<Request ID="565" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="566" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="567" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU_2" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="568" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_2.PV" /></Request>
+WorkingClient;<Request ID="569" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SR" Type="E_SR" /></Request>
+WorkingClient;<Request ID="570" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="571" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_4.IN" /></Request>
+WorkingClient;<Request ID="572" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="573" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=methodHello]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.ID" /></Request>
+WorkingClient;<Request ID="574" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="575" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_2.IN" /></Request>
+WorkingClient;<Request ID="576" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="577" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=methodHello1]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.ID" /></Request>
+WorkingClient;<Request ID="578" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="579" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="580" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="581" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WorkingClient;<Request ID="582" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=methodHello2]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.ID" /></Request>
+WorkingClient;<Request ID="583" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WorkingClient;<Request ID="584" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=methodHello3]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.ID" /></Request>
+WorkingClient;<Request ID="585" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="586" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_3.IN" /></Request>
+WorkingClient;<Request ID="587" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="588" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_5.IN" /></Request>
+WorkingClient;<Request ID="589" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="590" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_6.IN" /></Request>
+WorkingClient;<Request ID="591" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="592" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="593" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="594" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="595" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="596" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="597" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="598" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="599" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="600" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="601" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="602" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="603" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="604" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="605" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="606" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="607" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="608" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="609" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteStringMethod.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="610" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="611" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="612" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteStringMethod.E_CTU_1.PV" /></Request>
+WorkingClient;<Request ID="613" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="614" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="615" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents.check" /></Request>
+WorkingClient;<Request ID="616" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="617" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="618" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="619" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteStringMethod.E_CTU_2.PV" /></Request>
+WorkingClient;<Request ID="620" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SR" Type="E_SR" /></Request>
+WorkingClient;<Request ID="621" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="622" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.IN" /></Request>
+WorkingClient;<Request ID="623" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="624" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=methodByteStringNodeId1]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.ID" /></Request>
+WorkingClient;<Request ID="625" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="626" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.IN" /></Request>
+WorkingClient;<Request ID="627" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="628" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=methodByteStringNodeId2]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.ID" /></Request>
+WorkingClient;<Request ID="629" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="630" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="631" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="632" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WorkingClient;<Request ID="633" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=methodByteStringNodeId3]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.ID" /></Request>
+WorkingClient;<Request ID="634" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WorkingClient;<Request ID="635" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=methodByteStringNodeId4]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.ID" /></Request>
+WorkingClient;<Request ID="636" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="637" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.IN" /></Request>
+WorkingClient;<Request ID="638" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="639" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.IN" /></Request>
+WorkingClient;<Request ID="640" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="641" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.IN" /></Request>
+WorkingClient;<Request ID="642" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="643" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="644" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="645" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="646" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="647" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="648" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="649" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="650" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="651" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="652" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="653" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="654" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="655" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="656" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="657" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="658" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="659" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="660" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.PV" /></Request>
+WorkingClient;<Request ID="661" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="662" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="663" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_1.PV" /></Request>
+WorkingClient;<Request ID="664" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="665" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="666" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents.check" /></Request>
+WorkingClient;<Request ID="667" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WorkingClient;<Request ID="668" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WorkingClient;<Request ID="669" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+WorkingClient;<Request ID="670" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_2.PV" /></Request>
+WorkingClient;<Request ID="671" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SR" Type="E_SR" /></Request>
+WorkingClient;<Request ID="672" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="673" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteIsolatedCases.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="674" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="675" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteIsolatedCases.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="676" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="677" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="RemoteIsolatedCases.CLIENT_0_1.ID" /></Request>
+WorkingClient;<Request ID="678" Action="CREATE"><FB Name="RemoteIsolatedCases.WRITE_Only_read" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="679" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="680" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteIsolatedCases.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="681" Action="CREATE"><FB Name="RemoteIsolatedCases.READ_Only_read" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="682" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="683" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="684" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="685" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="RemoteIsolatedCases.CLIENT_0_1_1.ID" /></Request>
+WorkingClient;<Request ID="686" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1_1_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="687" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/noNewFolder]" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.ID" /></Request>
+WorkingClient;<Request ID="688" Action="CREATE"><FB Name="RemoteIsolatedCases.readNoNewFoler" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="689" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="690" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="691" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteIsolatedCases.F_EQ_1_1.IN2" /></Request>
+WorkingClient;<Request ID="692" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="693" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/noNewFolderMethod]" Destination="RemoteIsolatedCases.CLIENT_0.ID" /></Request>
+WorkingClient;<Request ID="694" Action="CREATE"><FB Name="RemoteIsolatedCases.methodNoNewFolder" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="695" Action="CREATE"><FB Name="RemoteIsolatedCases.PUBLISH_1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="696" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="RemoteIsolatedCases.PUBLISH_1.ID" /></Request>
+WorkingClient;<Request ID="697" Action="CREATE"><FB Name="RemoteIsolatedCases.writeOnlyWrittableVar" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="698" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="699" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="700" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRootRemote.BOOL2BOOL_2_1_1.IN" /></Request>
+WorkingClient;<Request ID="701" Action="CREATE"><FB Name="DirectRootRemote.directRootRead" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="702" Action="CREATE"><FB Name="DirectRootRemote.directRootWrite" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="703" Action="CREATE"><FB Name="DirectRootRemote.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="704" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRootRemote.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="705" Action="CREATE"><FB Name="DirectRootRemote.directRootMethod" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="706" Action="CREATE"><FB Name="DirectRootRemote.directRootRead2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="707" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="708" Action="CREATE"><FB Name="DirectRootRemote.directRootWrite_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="709" Action="CREATE"><FB Name="DirectRootRemote.directRootMethod_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="710" Action="CREATE"><FB Name="DirectRootRemote.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="711" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRootRemote.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="712" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="713" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRootRemote.BOOL2BOOL_2_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="714" Action="CREATE"><FB Name="DirectRootRemote.rootRead" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="715" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:writeVar]" Destination="DirectRootRemote.rootRead.ID" /></Request>
+WorkingClient;<Request ID="716" Action="CREATE"><FB Name="DirectRootRemote.rootRead_2" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="717" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:folder2/writeVar]" Destination="DirectRootRemote.rootRead_2.ID" /></Request>
+WorkingClient;<Request ID="718" Action="CREATE"><FB Name="DirectRootRemote.rootRead_1_1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="719" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:folder2/readVar]" Destination="DirectRootRemote.rootRead_1_1.ID" /></Request>
+WorkingClient;<Request ID="720" Action="CREATE"><FB Name="DirectRootRemote.rootRead_1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="721" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:readVar/]" Destination="DirectRootRemote.rootRead_1.ID" /></Request>
+WorkingClient;<Request ID="722" Action="CREATE"><FB Name="DirectRootRemote.SERVER_0" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="723" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:method]" Destination="DirectRootRemote.SERVER_0.ID" /></Request>
+WorkingClient;<Request ID="724" Action="CREATE"><FB Name="DirectRootRemote.SERVER_0_1" Type="CLIENT_0" /></Request>
+WorkingClient;<Request ID="725" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:folder2/method]" Destination="DirectRootRemote.SERVER_0_1.ID" /></Request>
+WorkingClient;<Request ID="726" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1" Type="CLIENT_1" /></Request>
+WorkingClient;<Request ID="727" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject1/2:TestMethod]" Destination="CreatedObjects.CLIENT_1.ID" /></Request>
+WorkingClient;<Request ID="728" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="729" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="730" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="731" Action="CREATE"><FB Name="CreatedObjects.F_EQ" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="732" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.F_EQ.IN2" /></Request>
+WorkingClient;<Request ID="733" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="734" Action="CREATE"><FB Name="CreatedObjects.remoteVar1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="735" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="736" Action="CREATE"><FB Name="CreatedObjects.F_EQ_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="737" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_1.IN2" /></Request>
+WorkingClient;<Request ID="738" Action="CREATE"><FB Name="CreatedObjects.remoteVar2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="739" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="740" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="741" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="742" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/testObject1/2:Variable1]" Destination="CreatedObjects.CLIENT_1_1.ID" /></Request>
+WorkingClient;<Request ID="743" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="744" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/testObject1/2:Variable2]" Destination="CreatedObjects.CLIENT_1_1_1.ID" /></Request>
+WorkingClient;<Request ID="745" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="746" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_1_1" Type="CLIENT_1_0" /></Request>
+WorkingClient;<Request ID="747" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/testObject2/2:Variable2]" Destination="CreatedObjects.CLIENT_1_1_1_1.ID" /></Request>
+WorkingClient;<Request ID="748" Action="CREATE"><FB Name="CreatedObjects.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="749" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_1_1.IN2" /></Request>
+WorkingClient;<Request ID="750" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_2" Type="CLIENT_0_1" /></Request>
+WorkingClient;<Request ID="751" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/testObject2/2:Variable1]" Destination="CreatedObjects.CLIENT_1_1_2.ID" /></Request>
+WorkingClient;<Request ID="752" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="753" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_1_1_1_1.IN" /></Request>
+WorkingClient;<Request ID="754" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="755" Action="CREATE"><FB Name="CreatedObjects.F_EQ_2" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="756" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.F_EQ_2.IN2" /></Request>
+WorkingClient;<Request ID="757" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="758" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="759" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.DINT2DINT_2.IN" /></Request>
+WorkingClient;<Request ID="760" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_2" Type="CLIENT_1" /></Request>
+WorkingClient;<Request ID="761" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject2/2:TestMethod]" Destination="CreatedObjects.CLIENT_1_2.ID" /></Request>
+WorkingClient;<Request ID="762" Action="CREATE"><FB Name="CreatedObjects.remoteVar1_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="763" Action="CREATE"><FB Name="CreatedObjects.remoteVar2_2" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="764" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="765" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_2_1.IN" /></Request>
+WorkingClient;<Request ID="766" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_2_1" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="767" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod2_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="768" Action="CREATE"><FB Name="CreatedObjects.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="769" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_2_1.IN2" /></Request>
+WorkingClient;<Request ID="770" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_2_1" Type="CLIENT_1" /></Request>
+WorkingClient;<Request ID="771" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject2/2:TestMethod2]" Destination="CreatedObjects.CLIENT_1_2_1.ID" /></Request>
+WorkingClient;<Request ID="772" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod1_1" Type="TEST_CONDITION" /></Request>
+WorkingClient;<Request ID="773" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="774" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_3.IN" /></Request>
+WorkingClient;<Request ID="775" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingClient;<Request ID="776" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_3" Type="CLIENT_1" /></Request>
+WorkingClient;<Request ID="777" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject1/2:TestMethod2]" Destination="CreatedObjects.CLIENT_1_3.ID" /></Request>
+WorkingClient;<Request ID="778" Action="CREATE"><FB Name="CreatedObjects.F_EQ_3" Type="F_EQ" /></Request>
+WorkingClient;<Request ID="779" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_3.IN2" /></Request>
+WorkingClient;<Request ID="780" Action="CREATE"><FB Name="E_DELAY_1" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="781" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1.DT" /></Request>
+WorkingClient;<Request ID="782" Action="CREATE"><FB Name="E_DELAY_1_1" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="783" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1_1.DT" /></Request>
+WorkingClient;<Request ID="784" Action="CREATE"><FB Name="E_DELAY_1_1_1" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="785" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1_1_1.DT" /></Request>
+WorkingClient;<Request ID="786" Action="CREATE"><FB Name="E_DELAY_1_1_2" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="787" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1_1_2.DT" /></Request>
+WorkingClient;<Request ID="788" Action="CREATE"><FB Name="E_DELAY_1_1_1_1" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="789" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1_1_1_1.DT" /></Request>
+WorkingClient;<Request ID="790" Action="CREATE"><FB Name="E_DELAY_1_2" Type="E_DELAY" /></Request>
+WorkingClient;<Request ID="791" Action="WRITE"><Connection Source="T#1000ms" Destination="E_DELAY_1_2.DT" /></Request>
+WorkingClient;<Request ID="792" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="793" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.REQ" /></Request>
+WorkingClient;<Request ID="794" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="795" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="796" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="797" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.INITO" Destination="E_DELAY_1_2.START" /></Request>
+WorkingClient;<Request ID="798" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.E_CTU.CUO" Destination="folderTestRemote.SubscribeToVars.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="799" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR.REQ" /></Request>
+WorkingClient;<Request ID="800" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.REQ" /></Request>
+WorkingClient;<Request ID="801" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.REQ" /></Request>
+WorkingClient;<Request ID="802" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe1.REQ" /></Request>
+WorkingClient;<Request ID="803" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_2.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe3.REQ" /></Request>
+WorkingClient;<Request ID="804" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe2.REQ" /></Request>
+WorkingClient;<Request ID="805" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1.REQ" /></Request>
+WorkingClient;<Request ID="806" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.REQ" /></Request>
+WorkingClient;<Request ID="807" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="808" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="809" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.REQ" /></Request>
+WorkingClient;<Request ID="810" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_2.REQ" /></Request>
+WorkingClient;<Request ID="811" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe4.REQ" /></Request>
+WorkingClient;<Request ID="812" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.REQ" /></Request>
+WorkingClient;<Request ID="813" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="814" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="815" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe5.REQ" /></Request>
+WorkingClient;<Request ID="816" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_.REQ" /></Request>
+WorkingClient;<Request ID="817" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.REQ" /></Request>
+WorkingClient;<Request ID="818" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="819" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe2.INIT" /></Request>
+WorkingClient;<Request ID="820" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe3.INIT" /></Request>
+WorkingClient;<Request ID="821" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.IN1" /></Request>
+WorkingClient;<Request ID="822" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="823" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.RD_2" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="824" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="825" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.IN" /></Request>
+WorkingClient;<Request ID="826" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="827" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.RD_2" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="828" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="829" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.E_CTU.Q" Destination="folderTestRemote.SubscribeToVars.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="830" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.IN1" /></Request>
+WorkingClient;<Request ID="831" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.IN1" /></Request>
+WorkingClient;<Request ID="832" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.IN1" /></Request>
+WorkingClient;<Request ID="833" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.IN1" /></Request>
+WorkingClient;<Request ID="834" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="835" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR.IN2" /></Request>
+WorkingClient;<Request ID="836" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR.IN1" /></Request>
+WorkingClient;<Request ID="837" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe1.check" /></Request>
+WorkingClient;<Request ID="838" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_2.IN2" /></Request>
+WorkingClient;<Request ID="839" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1.IN2" /></Request>
+WorkingClient;<Request ID="840" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1.IN1" /></Request>
+WorkingClient;<Request ID="841" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe2.check" /></Request>
+WorkingClient;<Request ID="842" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_2.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe3.check" /></Request>
+WorkingClient;<Request ID="843" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe4.check" /></Request>
+WorkingClient;<Request ID="844" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.IN2" /></Request>
+WorkingClient;<Request ID="845" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.IN1" /></Request>
+WorkingClient;<Request ID="846" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe5.check" /></Request>
+WorkingClient;<Request ID="847" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="848" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="849" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_.IN1" /></Request>
+WorkingClient;<Request ID="850" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_2.IN1" /></Request>
+WorkingClient;<Request ID="851" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="852" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="853" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="854" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="855" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WorkingClient;<Request ID="856" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.INITO" Destination="folderTestRemote.ReadVars.Read1.INIT" /></Request>
+WorkingClient;<Request ID="857" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="folderTestRemote.WriteToVars.Write3.REQ" /></Request>
+WorkingClient;<Request ID="858" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.INITO" Destination="folderTestRemote.WriteToVars.Write2.INIT" /></Request>
+WorkingClient;<Request ID="859" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.INITO" Destination="folderTestRemote.WriteToVars.Write1.INIT" /></Request>
+WorkingClient;<Request ID="860" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.writeBrowse3.CNF" Destination="folderTestRemote.WriteToVars.Write2.REQ" /></Request>
+WorkingClient;<Request ID="861" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.CNF" Destination="folderTestRemote.WriteToVars.writeBrowse3.REQ" /></Request>
+WorkingClient;<Request ID="862" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.writeBrowse2.CNF" Destination="folderTestRemote.WriteToVars.Write1.REQ" /></Request>
+WorkingClient;<Request ID="863" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.CNF" Destination="folderTestRemote.WriteToVars.writeBrowse2.REQ" /></Request>
+WorkingClient;<Request ID="864" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.writeBrowse1.CNF" Destination="folderTestRemote.ReadVars.Read1.REQ" /></Request>
+WorkingClient;<Request ID="865" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.CNF" Destination="folderTestRemote.WriteToVars.writeBrowse1.REQ" /></Request>
+WorkingClient;<Request ID="866" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="folderTestRemote.WriteToVars.Write1.SD_1" /></Request>
+WorkingClient;<Request ID="867" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write3.SD_1" /></Request>
+WorkingClient;<Request ID="868" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="folderTestRemote.WriteToVars.Write3.SD_2" /></Request>
+WorkingClient;<Request ID="869" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write2.SD_1" /></Request>
+WorkingClient;<Request ID="870" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write2.SD_2" /></Request>
+WorkingClient;<Request ID="871" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.QO" Destination="folderTestRemote.WriteToVars.writeBrowse1.check" /></Request>
+WorkingClient;<Request ID="872" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.QO" Destination="folderTestRemote.WriteToVars.writeBrowse2.check" /></Request>
+WorkingClient;<Request ID="873" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.QO" Destination="folderTestRemote.WriteToVars.writeBrowse3.check" /></Request>
+WorkingClient;<Request ID="874" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.INITO" Destination="folderTestRemote.ReadVars.Read2.INIT" /></Request>
+WorkingClient;<Request ID="875" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WorkingClient;<Request ID="876" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote1.CNF" Destination="folderTestRemote.ReadVars.Read2.REQ" /></Request>
+WorkingClient;<Request ID="877" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.INITO" Destination="folderTestRemote.ReadVars.Read3.INIT" /></Request>
+WorkingClient;<Request ID="878" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WorkingClient;<Request ID="879" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="880" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote4.REQ" /></Request>
+WorkingClient;<Request ID="881" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote4.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="882" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="883" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote5.REQ" /></Request>
+WorkingClient;<Request ID="884" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote3.REQ" /></Request>
+WorkingClient;<Request ID="885" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote3.CNF" Destination="folderTestRemote.ReadVars.Read3.REQ" /></Request>
+WorkingClient;<Request ID="886" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+WorkingClient;<Request ID="887" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="888" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="889" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote2.REQ" /></Request>
+WorkingClient;<Request ID="890" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote2.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="891" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="folderTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="892" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote1.REQ" /></Request>
+WorkingClient;<Request ID="893" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe1.INIT" /></Request>
+WorkingClient;<Request ID="894" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote5.CNF" Destination="E_DELAY_1.START" /></Request>
+WorkingClient;<Request ID="895" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WorkingClient;<Request ID="896" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WorkingClient;<Request ID="897" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.RD_2" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="898" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="899" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote4.check" /></Request>
+WorkingClient;<Request ID="900" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+WorkingClient;<Request ID="901" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="902" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote5.check" /></Request>
+WorkingClient;<Request ID="903" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote3.check" /></Request>
+WorkingClient;<Request ID="904" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="905" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.RD_2" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="906" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="907" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote2.check" /></Request>
+WorkingClient;<Request ID="908" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="909" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote1.check" /></Request>
+WorkingClient;<Request ID="910" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.CNF" Destination="HandleInit.E_DEMUX_2_1.EI" /></Request>
+WorkingClient;<Request ID="911" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO1" Destination="HandleInit.PUBLISH_0_1.INIT" /></Request>
+WorkingClient;<Request ID="912" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.INITO" Destination="HandleInit.PUBLISH_0_1.REQ" /></Request>
+WorkingClient;<Request ID="913" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO2" Destination="E_DELAY.START" /></Request>
+WorkingClient;<Request ID="914" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.CNF" Destination="HandleInit.STEST_END_1.REQ" /></Request>
+WorkingClient;<Request ID="915" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.OUT" Destination="HandleInit.E_DEMUX_2_1.K" /></Request>
+WorkingClient;<Request ID="916" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="917" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="918" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="919" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WorkingClient;<Request ID="920" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="921" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="922" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+WorkingClient;<Request ID="923" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+WorkingClient;<Request ID="924" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+WorkingClient;<Request ID="925" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.numericWrite1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+WorkingClient;<Request ID="926" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.numericWrite1.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+WorkingClient;<Request ID="927" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1.REQ" /></Request>
+WorkingClient;<Request ID="928" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+WorkingClient;<Request ID="929" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3.CNF" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="930" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write3.REQ" /></Request>
+WorkingClient;<Request ID="931" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+WorkingClient;<Request ID="932" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write3.INIT" /></Request>
+WorkingClient;<Request ID="933" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="934" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1.REQ" /></Request>
+WorkingClient;<Request ID="935" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+WorkingClient;<Request ID="936" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3.SD_1" /></Request>
+WorkingClient;<Request ID="937" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3.SD_2" /></Request>
+WorkingClient;<Request ID="938" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+WorkingClient;<Request ID="939" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+WorkingClient;<Request ID="940" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3.QO" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1.check" /></Request>
+WorkingClient;<Request ID="941" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.QO" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1.check" /></Request>
+WorkingClient;<Request ID="942" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.QO" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1.check" /></Request>
+WorkingClient;<Request ID="943" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+WorkingClient;<Request ID="944" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+WorkingClient;<Request ID="945" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="numericNodeIdTestRemote.WriteToVars.numericWrite1_1_1_1.check" /></Request>
+WorkingClient;<Request ID="946" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+WorkingClient;<Request ID="947" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+WorkingClient;<Request ID="948" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+WorkingClient;<Request ID="949" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WorkingClient;<Request ID="950" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="951" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.REQ" /></Request>
+WorkingClient;<Request ID="952" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="953" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="954" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.REQ" /></Request>
+WorkingClient;<Request ID="955" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.REQ" /></Request>
+WorkingClient;<Request ID="956" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+WorkingClient;<Request ID="957" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+WorkingClient;<Request ID="958" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="959" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="960" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.REQ" /></Request>
+WorkingClient;<Request ID="961" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WorkingClient;<Request ID="962" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="963" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.REQ" /></Request>
+WorkingClient;<Request ID="964" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="965" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INIT" /></Request>
+WorkingClient;<Request ID="966" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+WorkingClient;<Request ID="967" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="968" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="969" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="970" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.REQ" /></Request>
+WorkingClient;<Request ID="971" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.REQ" /></Request>
+WorkingClient;<Request ID="972" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="973" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.CNF" Destination="E_DELAY_1_1.START" /></Request>
+WorkingClient;<Request ID="974" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+WorkingClient;<Request ID="975" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WorkingClient;<Request ID="976" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WorkingClient;<Request ID="977" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="978" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="979" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.check" /></Request>
+WorkingClient;<Request ID="980" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+WorkingClient;<Request ID="981" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="982" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.check" /></Request>
+WorkingClient;<Request ID="983" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.check" /></Request>
+WorkingClient;<Request ID="984" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="985" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="986" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="987" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.check" /></Request>
+WorkingClient;<Request ID="988" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="989" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.check" /></Request>
+WorkingClient;<Request ID="990" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="991" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="992" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="993" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="994" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.check" /></Request>
+WorkingClient;<Request ID="995" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.check" /></Request>
+WorkingClient;<Request ID="996" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INIT" /></Request>
+WorkingClient;<Request ID="997" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="998" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INIT" /></Request>
+WorkingClient;<Request ID="999" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,000" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,001" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,002" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,003" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.REQ" /></Request>
+WorkingClient;<Request ID="1,004" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,005" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,006" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1.REQ" /></Request>
+WorkingClient;<Request ID="1,007" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3.REQ" /></Request>
+WorkingClient;<Request ID="1,008" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2.REQ" /></Request>
+WorkingClient;<Request ID="1,009" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.REQ" /></Request>
+WorkingClient;<Request ID="1,010" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.REQ" /></Request>
+WorkingClient;<Request ID="1,011" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,012" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,013" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,014" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.REQ" /></Request>
+WorkingClient;<Request ID="1,015" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4.REQ" /></Request>
+WorkingClient;<Request ID="1,016" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,017" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,018" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,019" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5.REQ" /></Request>
+WorkingClient;<Request ID="1,020" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.REQ" /></Request>
+WorkingClient;<Request ID="1,021" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.REQ" /></Request>
+WorkingClient;<Request ID="1,022" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,023" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,024" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,025" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,026" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1.REQ" /></Request>
+WorkingClient;<Request ID="1,027" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,028" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.REQ" /></Request>
+WorkingClient;<Request ID="1,029" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,030" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.REQ" /></Request>
+WorkingClient;<Request ID="1,031" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,032" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,033" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INITO" Destination="E_DELAY_1_1_2.START" /></Request>
+WorkingClient;<Request ID="1,034" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,035" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,036" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,037" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,038" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,039" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,040" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,041" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,042" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,043" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN1" /></Request>
+WorkingClient;<Request ID="1,044" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN1" /></Request>
+WorkingClient;<Request ID="1,045" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN1" /></Request>
+WorkingClient;<Request ID="1,046" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,047" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,048" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.IN2" /></Request>
+WorkingClient;<Request ID="1,049" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.IN1" /></Request>
+WorkingClient;<Request ID="1,050" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1.check" /></Request>
+WorkingClient;<Request ID="1,051" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN2" /></Request>
+WorkingClient;<Request ID="1,052" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN2" /></Request>
+WorkingClient;<Request ID="1,053" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN1" /></Request>
+WorkingClient;<Request ID="1,054" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2.check" /></Request>
+WorkingClient;<Request ID="1,055" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3.check" /></Request>
+WorkingClient;<Request ID="1,056" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4.check" /></Request>
+WorkingClient;<Request ID="1,057" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,058" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,059" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5.check" /></Request>
+WorkingClient;<Request ID="1,060" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,061" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,062" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN1" /></Request>
+WorkingClient;<Request ID="1,063" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN1" /></Request>
+WorkingClient;<Request ID="1,064" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,065" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,066" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="1,067" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN1" /></Request>
+WorkingClient;<Request ID="1,068" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,069" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,070" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,071" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN1" /></Request>
+WorkingClient;<Request ID="1,072" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,073" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1.check" /></Request>
+WorkingClient;<Request ID="1,074" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,075" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,076" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1.check" /></Request>
+WorkingClient;<Request ID="1,077" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,078" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,079" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,080" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,081" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,082" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,083" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.stringWrite1.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+WorkingClient;<Request ID="1,084" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.stringWrite1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+WorkingClient;<Request ID="1,085" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+WorkingClient;<Request ID="1,086" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1.REQ" /></Request>
+WorkingClient;<Request ID="1,087" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+WorkingClient;<Request ID="1,088" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+WorkingClient;<Request ID="1,089" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,090" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,091" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,092" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write3.INIT" /></Request>
+WorkingClient;<Request ID="1,093" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write3.REQ" /></Request>
+WorkingClient;<Request ID="1,094" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+WorkingClient;<Request ID="1,095" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.CNF" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,096" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+WorkingClient;<Request ID="1,097" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.QO" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1.check" /></Request>
+WorkingClient;<Request ID="1,098" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+WorkingClient;<Request ID="1,099" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+WorkingClient;<Request ID="1,100" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.QO" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1.check" /></Request>
+WorkingClient;<Request ID="1,101" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,102" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+WorkingClient;<Request ID="1,103" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1_1.check" /></Request>
+WorkingClient;<Request ID="1,104" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3.SD_1" /></Request>
+WorkingClient;<Request ID="1,105" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3.SD_2" /></Request>
+WorkingClient;<Request ID="1,106" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.QO" Destination="stringNodeIdTestRemote.WriteToVars.stringWrite1_1_1.check" /></Request>
+WorkingClient;<Request ID="1,107" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+WorkingClient;<Request ID="1,108" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WorkingClient;<Request ID="1,109" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+WorkingClient;<Request ID="1,110" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+WorkingClient;<Request ID="1,111" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,112" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,113" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.REQ" /></Request>
+WorkingClient;<Request ID="1,114" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,115" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,116" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.REQ" /></Request>
+WorkingClient;<Request ID="1,117" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.REQ" /></Request>
+WorkingClient;<Request ID="1,118" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+WorkingClient;<Request ID="1,119" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,120" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,121" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,122" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.REQ" /></Request>
+WorkingClient;<Request ID="1,123" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,124" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,125" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.REQ" /></Request>
+WorkingClient;<Request ID="1,126" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,127" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,128" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.REQ" /></Request>
+WorkingClient;<Request ID="1,129" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,130" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,131" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,132" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INIT" /></Request>
+WorkingClient;<Request ID="1,133" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,134" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.CNF" Destination="E_DELAY_1_1_1.START" /></Request>
+WorkingClient;<Request ID="1,135" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,136" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WorkingClient;<Request ID="1,137" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,138" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,139" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,140" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.check" /></Request>
+WorkingClient;<Request ID="1,141" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,142" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,143" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.check" /></Request>
+WorkingClient;<Request ID="1,144" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.check" /></Request>
+WorkingClient;<Request ID="1,145" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,146" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,147" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,148" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.check" /></Request>
+WorkingClient;<Request ID="1,149" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,150" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.check" /></Request>
+WorkingClient;<Request ID="1,151" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,152" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,153" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.check" /></Request>
+WorkingClient;<Request ID="1,154" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.check" /></Request>
+WorkingClient;<Request ID="1,155" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,156" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,157" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INIT" /></Request>
+WorkingClient;<Request ID="1,158" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,159" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INIT" /></Request>
+WorkingClient;<Request ID="1,160" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,161" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,162" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,163" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,164" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.REQ" /></Request>
+WorkingClient;<Request ID="1,165" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,166" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,167" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1.REQ" /></Request>
+WorkingClient;<Request ID="1,168" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3.REQ" /></Request>
+WorkingClient;<Request ID="1,169" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2.REQ" /></Request>
+WorkingClient;<Request ID="1,170" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.REQ" /></Request>
+WorkingClient;<Request ID="1,171" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.REQ" /></Request>
+WorkingClient;<Request ID="1,172" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,173" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,174" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,175" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.REQ" /></Request>
+WorkingClient;<Request ID="1,176" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4.REQ" /></Request>
+WorkingClient;<Request ID="1,177" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,178" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,179" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,180" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5.REQ" /></Request>
+WorkingClient;<Request ID="1,181" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.REQ" /></Request>
+WorkingClient;<Request ID="1,182" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.REQ" /></Request>
+WorkingClient;<Request ID="1,183" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,184" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,185" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,186" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.REQ" /></Request>
+WorkingClient;<Request ID="1,187" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,188" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,189" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,190" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,191" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.REQ" /></Request>
+WorkingClient;<Request ID="1,192" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1.REQ" /></Request>
+WorkingClient;<Request ID="1,193" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,194" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INITO" Destination="E_DELAY_1_1_1_1.START" /></Request>
+WorkingClient;<Request ID="1,195" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,196" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,197" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,198" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,199" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,200" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,201" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,202" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,203" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,204" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN1" /></Request>
+WorkingClient;<Request ID="1,205" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN1" /></Request>
+WorkingClient;<Request ID="1,206" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN1" /></Request>
+WorkingClient;<Request ID="1,207" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,208" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,209" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.IN2" /></Request>
+WorkingClient;<Request ID="1,210" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.IN1" /></Request>
+WorkingClient;<Request ID="1,211" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1.check" /></Request>
+WorkingClient;<Request ID="1,212" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN2" /></Request>
+WorkingClient;<Request ID="1,213" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN2" /></Request>
+WorkingClient;<Request ID="1,214" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN1" /></Request>
+WorkingClient;<Request ID="1,215" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2.check" /></Request>
+WorkingClient;<Request ID="1,216" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3.check" /></Request>
+WorkingClient;<Request ID="1,217" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4.check" /></Request>
+WorkingClient;<Request ID="1,218" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,219" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,220" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5.check" /></Request>
+WorkingClient;<Request ID="1,221" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,222" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,223" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN1" /></Request>
+WorkingClient;<Request ID="1,224" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN1" /></Request>
+WorkingClient;<Request ID="1,225" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,226" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,227" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,228" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,229" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,230" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1.check" /></Request>
+WorkingClient;<Request ID="1,231" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,232" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN1" /></Request>
+WorkingClient;<Request ID="1,233" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,234" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,235" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1.check" /></Request>
+WorkingClient;<Request ID="1,236" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="1,237" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN1" /></Request>
+WorkingClient;<Request ID="1,238" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,239" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,240" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,241" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,242" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,243" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,244" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+WorkingClient;<Request ID="1,245" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+WorkingClient;<Request ID="1,246" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+WorkingClient;<Request ID="1,247" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1.REQ" /></Request>
+WorkingClient;<Request ID="1,248" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+WorkingClient;<Request ID="1,249" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+WorkingClient;<Request ID="1,250" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,251" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,252" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,253" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.INIT" /></Request>
+WorkingClient;<Request ID="1,254" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.REQ" /></Request>
+WorkingClient;<Request ID="1,255" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+WorkingClient;<Request ID="1,256" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,257" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+WorkingClient;<Request ID="1,258" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1.check" /></Request>
+WorkingClient;<Request ID="1,259" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+WorkingClient;<Request ID="1,260" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+WorkingClient;<Request ID="1,261" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1.check" /></Request>
+WorkingClient;<Request ID="1,262" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,263" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+WorkingClient;<Request ID="1,264" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1_1.check" /></Request>
+WorkingClient;<Request ID="1,265" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.SD_1" /></Request>
+WorkingClient;<Request ID="1,266" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.SD_2" /></Request>
+WorkingClient;<Request ID="1,267" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.byteStringWrite1_1_1.check" /></Request>
+WorkingClient;<Request ID="1,268" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+WorkingClient;<Request ID="1,269" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WorkingClient;<Request ID="1,270" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+WorkingClient;<Request ID="1,271" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+WorkingClient;<Request ID="1,272" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,273" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,274" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.REQ" /></Request>
+WorkingClient;<Request ID="1,275" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,276" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,277" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.REQ" /></Request>
+WorkingClient;<Request ID="1,278" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.REQ" /></Request>
+WorkingClient;<Request ID="1,279" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+WorkingClient;<Request ID="1,280" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,281" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,282" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,283" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.REQ" /></Request>
+WorkingClient;<Request ID="1,284" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,285" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,286" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.REQ" /></Request>
+WorkingClient;<Request ID="1,287" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,288" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,289" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,290" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.REQ" /></Request>
+WorkingClient;<Request ID="1,291" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,292" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,293" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.INIT" /></Request>
+WorkingClient;<Request ID="1,294" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,295" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.CNF" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,296" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,297" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WorkingClient;<Request ID="1,298" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,299" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,300" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,301" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.check" /></Request>
+WorkingClient;<Request ID="1,302" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,303" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,304" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.check" /></Request>
+WorkingClient;<Request ID="1,305" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.check" /></Request>
+WorkingClient;<Request ID="1,306" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,307" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,308" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,309" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.check" /></Request>
+WorkingClient;<Request ID="1,310" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,311" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.check" /></Request>
+WorkingClient;<Request ID="1,312" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,313" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,314" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.check" /></Request>
+WorkingClient;<Request ID="1,315" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,316" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.check" /></Request>
+WorkingClient;<Request ID="1,317" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,318" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.INIT" /></Request>
+WorkingClient;<Request ID="1,319" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,320" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.INIT" /></Request>
+WorkingClient;<Request ID="1,321" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,322" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,323" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+WorkingClient;<Request ID="1,324" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,325" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.CUO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,326" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.REQ" /></Request>
+WorkingClient;<Request ID="1,327" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,328" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,329" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1.REQ" /></Request>
+WorkingClient;<Request ID="1,330" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3.REQ" /></Request>
+WorkingClient;<Request ID="1,331" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2.REQ" /></Request>
+WorkingClient;<Request ID="1,332" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.REQ" /></Request>
+WorkingClient;<Request ID="1,333" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.REQ" /></Request>
+WorkingClient;<Request ID="1,334" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,335" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,336" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,337" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.REQ" /></Request>
+WorkingClient;<Request ID="1,338" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4.REQ" /></Request>
+WorkingClient;<Request ID="1,339" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,340" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,341" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,342" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5.REQ" /></Request>
+WorkingClient;<Request ID="1,343" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.REQ" /></Request>
+WorkingClient;<Request ID="1,344" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.REQ" /></Request>
+WorkingClient;<Request ID="1,345" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,346" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,347" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,348" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,349" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.REQ" /></Request>
+WorkingClient;<Request ID="1,350" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,351" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1.REQ" /></Request>
+WorkingClient;<Request ID="1,352" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,353" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.REQ" /></Request>
+WorkingClient;<Request ID="1,354" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,355" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1.REQ" /></Request>
+WorkingClient;<Request ID="1,356" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.INIT" /></Request>
+WorkingClient;<Request ID="1,357" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,358" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,359" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,360" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,361" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,362" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,363" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,364" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.IN" /></Request>
+WorkingClient;<Request ID="1,365" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,366" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,367" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.IN1" /></Request>
+WorkingClient;<Request ID="1,368" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.IN1" /></Request>
+WorkingClient;<Request ID="1,369" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.IN1" /></Request>
+WorkingClient;<Request ID="1,370" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,371" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,372" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.IN2" /></Request>
+WorkingClient;<Request ID="1,373" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.IN1" /></Request>
+WorkingClient;<Request ID="1,374" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1.check" /></Request>
+WorkingClient;<Request ID="1,375" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.IN2" /></Request>
+WorkingClient;<Request ID="1,376" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.IN2" /></Request>
+WorkingClient;<Request ID="1,377" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.IN1" /></Request>
+WorkingClient;<Request ID="1,378" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2.check" /></Request>
+WorkingClient;<Request ID="1,379" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3.check" /></Request>
+WorkingClient;<Request ID="1,380" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4.check" /></Request>
+WorkingClient;<Request ID="1,381" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,382" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,383" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5.check" /></Request>
+WorkingClient;<Request ID="1,384" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,385" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,386" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.IN1" /></Request>
+WorkingClient;<Request ID="1,387" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.IN1" /></Request>
+WorkingClient;<Request ID="1,388" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,389" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,390" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.IN1" /></Request>
+WorkingClient;<Request ID="1,391" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.IN1" /></Request>
+WorkingClient;<Request ID="1,392" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,393" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1.check" /></Request>
+WorkingClient;<Request ID="1,394" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.IN2" /></Request>
+WorkingClient;<Request ID="1,395" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,396" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.IN2" /></Request>
+WorkingClient;<Request ID="1,397" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,398" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.IN1" /></Request>
+WorkingClient;<Request ID="1,399" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1.check" /></Request>
+WorkingClient;<Request ID="1,400" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,401" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_2.REQ" /></Request>
+WorkingClient;<Request ID="1,402" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_3.REQ" /></Request>
+WorkingClient;<Request ID="1,403" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.INIT" /></Request>
+WorkingClient;<Request ID="1,404" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,405" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.INIT" /></Request>
+WorkingClient;<Request ID="1,406" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.INIT" /></Request>
+WorkingClient;<Request ID="1,407" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.REQ" /></Request>
+WorkingClient;<Request ID="1,408" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,409" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.REQ" /></Request>
+WorkingClient;<Request ID="1,410" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,411" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,412" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_7.REQ" /></Request>
+WorkingClient;<Request ID="1,413" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_1.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,414" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_8.REQ" /></Request>
+WorkingClient;<Request ID="1,415" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_2.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.REQ" /></Request>
+WorkingClient;<Request ID="1,416" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.REQ" /></Request>
+WorkingClient;<Request ID="1,417" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_5.REQ" /></Request>
+WorkingClient;<Request ID="1,418" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_6.REQ" /></Request>
+WorkingClient;<Request ID="1,419" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.REQ" /></Request>
+WorkingClient;<Request ID="1,420" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.REQ" /></Request>
+WorkingClient;<Request ID="1,421" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,422" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,423" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.REQ" /></Request>
+WorkingClient;<Request ID="1,424" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT.EO1" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.REQ" /></Request>
+WorkingClient;<Request ID="1,425" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,426" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.CUO" Destination="RemoteMethods.RemoteBrowseName.E_CTU_1.CU" /></Request>
+WorkingClient;<Request ID="1,427" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,428" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_1.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,429" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents.REQ" /></Request>
+WorkingClient;<Request ID="1,430" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,431" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT.EO2" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,432" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,433" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,434" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,435" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_4.REQ" /></Request>
+WorkingClient;<Request ID="1,436" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT.EI" /></Request>
+WorkingClient;<Request ID="1,437" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,438" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT.EO" Destination="RemoteMethods.RemoteBrowseName.E_CTU_2.CU" /></Request>
+WorkingClient;<Request ID="1,439" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_2.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,440" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,441" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT.EO" Destination="RemoteMethods.RemoteBrowseName.E_SR.S" /></Request>
+WorkingClient;<Request ID="1,442" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SR.EO" Destination="RemoteMethods.RemoteBrowseName.E_CTU.R" /></Request>
+WorkingClient;<Request ID="1,443" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SR.EO" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,444" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_2" /></Request>
+WorkingClient;<Request ID="1,445" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="1,446" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_1" /></Request>
+WorkingClient;<Request ID="1,447" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_3" /></Request>
+WorkingClient;<Request ID="1,448" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_1" /></Request>
+WorkingClient;<Request ID="1,449" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_2" /></Request>
+WorkingClient;<Request ID="1,450" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_7.IN" /></Request>
+WorkingClient;<Request ID="1,451" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_8.IN" /></Request>
+WorkingClient;<Request ID="1,452" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_3" /></Request>
+WorkingClient;<Request ID="1,453" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.check" /></Request>
+WorkingClient;<Request ID="1,454" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.check" /></Request>
+WorkingClient;<Request ID="1,455" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.check" /></Request>
+WorkingClient;<Request ID="1,456" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,457" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.check" /></Request>
+WorkingClient;<Request ID="1,458" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,459" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,460" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_1.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.check" /></Request>
+WorkingClient;<Request ID="1,461" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_2.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.check" /></Request>
+WorkingClient;<Request ID="1,462" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.check" /></Request>
+WorkingClient;<Request ID="1,463" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,464" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_1.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_1.PERMIT" /></Request>
+WorkingClient;<Request ID="1,465" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_2.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_2.PERMIT" /></Request>
+WorkingClient;<Request ID="1,466" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.REQ" /></Request>
+WorkingClient;<Request ID="1,467" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.REQ" /></Request>
+WorkingClient;<Request ID="1,468" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.INIT" /></Request>
+WorkingClient;<Request ID="1,469" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,470" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.INIT" /></Request>
+WorkingClient;<Request ID="1,471" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.INIT" /></Request>
+WorkingClient;<Request ID="1,472" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.REQ" /></Request>
+WorkingClient;<Request ID="1,473" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,474" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.REQ" /></Request>
+WorkingClient;<Request ID="1,475" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,476" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,477" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.REQ" /></Request>
+WorkingClient;<Request ID="1,478" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,479" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.REQ" /></Request>
+WorkingClient;<Request ID="1,480" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.REQ" /></Request>
+WorkingClient;<Request ID="1,481" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.REQ" /></Request>
+WorkingClient;<Request ID="1,482" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.REQ" /></Request>
+WorkingClient;<Request ID="1,483" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.REQ" /></Request>
+WorkingClient;<Request ID="1,484" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.REQ" /></Request>
+WorkingClient;<Request ID="1,485" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.REQ" /></Request>
+WorkingClient;<Request ID="1,486" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,487" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,488" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.REQ" /></Request>
+WorkingClient;<Request ID="1,489" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.REQ" /></Request>
+WorkingClient;<Request ID="1,490" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,491" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_1.CU" /></Request>
+WorkingClient;<Request ID="1,492" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,493" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,494" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents.REQ" /></Request>
+WorkingClient;<Request ID="1,495" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,496" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,497" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,498" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,499" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,500" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.REQ" /></Request>
+WorkingClient;<Request ID="1,501" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT.EI" /></Request>
+WorkingClient;<Request ID="1,502" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,503" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_2.CU" /></Request>
+WorkingClient;<Request ID="1,504" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,505" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,506" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SR.S" /></Request>
+WorkingClient;<Request ID="1,507" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SR.EO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.R" /></Request>
+WorkingClient;<Request ID="1,508" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SR.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,509" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_2" /></Request>
+WorkingClient;<Request ID="1,510" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="1,511" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_1" /></Request>
+WorkingClient;<Request ID="1,512" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_3" /></Request>
+WorkingClient;<Request ID="1,513" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_1" /></Request>
+WorkingClient;<Request ID="1,514" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_2" /></Request>
+WorkingClient;<Request ID="1,515" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.IN" /></Request>
+WorkingClient;<Request ID="1,516" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.IN" /></Request>
+WorkingClient;<Request ID="1,517" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_3" /></Request>
+WorkingClient;<Request ID="1,518" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.check" /></Request>
+WorkingClient;<Request ID="1,519" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.check" /></Request>
+WorkingClient;<Request ID="1,520" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.check" /></Request>
+WorkingClient;<Request ID="1,521" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,522" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.check" /></Request>
+WorkingClient;<Request ID="1,523" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,524" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,525" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.check" /></Request>
+WorkingClient;<Request ID="1,526" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.check" /></Request>
+WorkingClient;<Request ID="1,527" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.check" /></Request>
+WorkingClient;<Request ID="1,528" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,529" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.PERMIT" /></Request>
+WorkingClient;<Request ID="1,530" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.PERMIT" /></Request>
+WorkingClient;<Request ID="1,531" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_2.REQ" /></Request>
+WorkingClient;<Request ID="1,532" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_3.REQ" /></Request>
+WorkingClient;<Request ID="1,533" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.INIT" /></Request>
+WorkingClient;<Request ID="1,534" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,535" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.INIT" /></Request>
+WorkingClient;<Request ID="1,536" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.INIT" /></Request>
+WorkingClient;<Request ID="1,537" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0.REQ" /></Request>
+WorkingClient;<Request ID="1,538" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,539" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.REQ" /></Request>
+WorkingClient;<Request ID="1,540" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,541" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,542" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_7.REQ" /></Request>
+WorkingClient;<Request ID="1,543" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,544" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_8.REQ" /></Request>
+WorkingClient;<Request ID="1,545" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.REQ" /></Request>
+WorkingClient;<Request ID="1,546" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.REQ" /></Request>
+WorkingClient;<Request ID="1,547" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_5.REQ" /></Request>
+WorkingClient;<Request ID="1,548" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_6.REQ" /></Request>
+WorkingClient;<Request ID="1,549" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.REQ" /></Request>
+WorkingClient;<Request ID="1,550" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.REQ" /></Request>
+WorkingClient;<Request ID="1,551" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,552" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,553" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.REQ" /></Request>
+WorkingClient;<Request ID="1,554" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.REQ" /></Request>
+WorkingClient;<Request ID="1,555" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,556" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteStringMethod.E_CTU_1.CU" /></Request>
+WorkingClient;<Request ID="1,557" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,558" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,559" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents.REQ" /></Request>
+WorkingClient;<Request ID="1,560" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,561" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,562" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,563" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,564" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,565" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_4.REQ" /></Request>
+WorkingClient;<Request ID="1,566" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT.EI" /></Request>
+WorkingClient;<Request ID="1,567" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,568" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteStringMethod.E_CTU_2.CU" /></Request>
+WorkingClient;<Request ID="1,569" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,570" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,571" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteStringMethod.E_SR.S" /></Request>
+WorkingClient;<Request ID="1,572" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteStringMethod.E_CTU.R" /></Request>
+WorkingClient;<Request ID="1,573" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,574" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_2" /></Request>
+WorkingClient;<Request ID="1,575" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="1,576" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_1" /></Request>
+WorkingClient;<Request ID="1,577" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_3" /></Request>
+WorkingClient;<Request ID="1,578" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_1" /></Request>
+WorkingClient;<Request ID="1,579" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_2" /></Request>
+WorkingClient;<Request ID="1,580" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_7.IN" /></Request>
+WorkingClient;<Request ID="1,581" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_8.IN" /></Request>
+WorkingClient;<Request ID="1,582" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_3" /></Request>
+WorkingClient;<Request ID="1,583" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0.check" /></Request>
+WorkingClient;<Request ID="1,584" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.check" /></Request>
+WorkingClient;<Request ID="1,585" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.check" /></Request>
+WorkingClient;<Request ID="1,586" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,587" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.check" /></Request>
+WorkingClient;<Request ID="1,588" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,589" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,590" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.check" /></Request>
+WorkingClient;<Request ID="1,591" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.check" /></Request>
+WorkingClient;<Request ID="1,592" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.check" /></Request>
+WorkingClient;<Request ID="1,593" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,594" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+WorkingClient;<Request ID="1,595" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+WorkingClient;<Request ID="1,596" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.REQ" /></Request>
+WorkingClient;<Request ID="1,597" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.REQ" /></Request>
+WorkingClient;<Request ID="1,598" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.INIT" /></Request>
+WorkingClient;<Request ID="1,599" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,600" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.INIT" /></Request>
+WorkingClient;<Request ID="1,601" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.INITO" Destination="RemoteIsolatedCases.PUBLISH_1.INIT" /></Request>
+WorkingClient;<Request ID="1,602" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.REQ" /></Request>
+WorkingClient;<Request ID="1,603" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,604" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.REQ" /></Request>
+WorkingClient;<Request ID="1,605" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,606" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,607" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.REQ" /></Request>
+WorkingClient;<Request ID="1,608" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,609" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.REQ" /></Request>
+WorkingClient;<Request ID="1,610" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.REQ" /></Request>
+WorkingClient;<Request ID="1,611" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.REQ" /></Request>
+WorkingClient;<Request ID="1,612" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.REQ" /></Request>
+WorkingClient;<Request ID="1,613" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.REQ" /></Request>
+WorkingClient;<Request ID="1,614" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.REQ" /></Request>
+WorkingClient;<Request ID="1,615" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.REQ" /></Request>
+WorkingClient;<Request ID="1,616" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,617" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,618" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.REQ" /></Request>
+WorkingClient;<Request ID="1,619" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.REQ" /></Request>
+WorkingClient;<Request ID="1,620" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,621" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_1.CU" /></Request>
+WorkingClient;<Request ID="1,622" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,623" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,624" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents.REQ" /></Request>
+WorkingClient;<Request ID="1,625" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,626" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,627" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,628" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,629" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WorkingClient;<Request ID="1,630" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.REQ" /></Request>
+WorkingClient;<Request ID="1,631" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EI" /></Request>
+WorkingClient;<Request ID="1,632" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EI" /></Request>
+WorkingClient;<Request ID="1,633" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_2.CU" /></Request>
+WorkingClient;<Request ID="1,634" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,635" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.EO" Destination="RemoteIsolatedCases.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,636" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SR.S" /></Request>
+WorkingClient;<Request ID="1,637" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.R" /></Request>
+WorkingClient;<Request ID="1,638" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+WorkingClient;<Request ID="1,639" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_2" /></Request>
+WorkingClient;<Request ID="1,640" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT.IN" /></Request>
+WorkingClient;<Request ID="1,641" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_1" /></Request>
+WorkingClient;<Request ID="1,642" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_3" /></Request>
+WorkingClient;<Request ID="1,643" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_1" /></Request>
+WorkingClient;<Request ID="1,644" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_2" /></Request>
+WorkingClient;<Request ID="1,645" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.IN" /></Request>
+WorkingClient;<Request ID="1,646" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.IN" /></Request>
+WorkingClient;<Request ID="1,647" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_3" /></Request>
+WorkingClient;<Request ID="1,648" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.check" /></Request>
+WorkingClient;<Request ID="1,649" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.check" /></Request>
+WorkingClient;<Request ID="1,650" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.check" /></Request>
+WorkingClient;<Request ID="1,651" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,652" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.check" /></Request>
+WorkingClient;<Request ID="1,653" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,654" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,655" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.check" /></Request>
+WorkingClient;<Request ID="1,656" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.check" /></Request>
+WorkingClient;<Request ID="1,657" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.check" /></Request>
+WorkingClient;<Request ID="1,658" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,659" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+WorkingClient;<Request ID="1,660" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+WorkingClient;<Request ID="1,661" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,662" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,663" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_1.CNF" Destination="RemoteIsolatedCases.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,664" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ.CNF" Destination="RemoteIsolatedCases.WRITE_Only_read.REQ" /></Request>
+WorkingClient;<Request ID="1,665" Action="CREATE"><Connection Source="RemoteIsolatedCases.WRITE_Only_read.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,666" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,667" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1.CNF" Destination="RemoteIsolatedCases.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,668" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1.CNF" Destination="RemoteIsolatedCases.READ_Only_read.REQ" /></Request>
+WorkingClient;<Request ID="1,669" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1_1.CNF" Destination="RemoteIsolatedCases.readNoNewFoler.REQ" /></Request>
+WorkingClient;<Request ID="1,670" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_2.CNF" Destination="RemoteIsolatedCases.F_EQ_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,671" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,672" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,673" Action="CREATE"><Connection Source="RemoteIsolatedCases.READ_Only_read.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,674" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.INITO" Destination="DirectRootRemote.rootRead.INIT" /></Request>
+WorkingClient;<Request ID="1,675" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0.INIT" /></Request>
+WorkingClient;<Request ID="1,676" Action="CREATE"><Connection Source="RemoteIsolatedCases.readNoNewFoler.CNF" Destination="RemoteIsolatedCases.CLIENT_0.REQ" /></Request>
+WorkingClient;<Request ID="1,677" Action="CREATE"><Connection Source="RemoteIsolatedCases.methodNoNewFolder.CNF" Destination="DirectRootRemote.rootRead.REQ" /></Request>
+WorkingClient;<Request ID="1,678" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.CNF" Destination="RemoteIsolatedCases.methodNoNewFolder.REQ" /></Request>
+WorkingClient;<Request ID="1,679" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT.CNF" Destination="RemoteIsolatedCases.PUBLISH_1.REQ" /></Request>
+WorkingClient;<Request ID="1,680" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,681" Action="CREATE"><Connection Source="RemoteIsolatedCases.writeOnlyWrittableVar.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,682" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.CNF" Destination="RemoteIsolatedCases.writeOnlyWrittableVar.REQ" /></Request>
+WorkingClient;<Request ID="1,683" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,684" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="1,685" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1.OUT" Destination="RemoteIsolatedCases.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,686" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1.OUT" Destination="RemoteIsolatedCases.READ_Only_read.check" /></Request>
+WorkingClient;<Request ID="1,687" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_1.OUT" Destination="RemoteIsolatedCases.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,688" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ.OUT" Destination="RemoteIsolatedCases.WRITE_Only_read.check" /></Request>
+WorkingClient;<Request ID="1,689" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1_1.OUT" Destination="RemoteIsolatedCases.readNoNewFoler.check" /></Request>
+WorkingClient;<Request ID="1,690" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,691" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_2.OUT" Destination="RemoteIsolatedCases.F_EQ_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,692" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.QO" Destination="RemoteIsolatedCases.methodNoNewFolder.check" /></Request>
+WorkingClient;<Request ID="1,693" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT.OUT" Destination="RemoteIsolatedCases.PUBLISH_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,694" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.QO" Destination="RemoteIsolatedCases.writeOnlyWrittableVar.check" /></Request>
+WorkingClient;<Request ID="1,695" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1.CNF" Destination="DirectRootRemote.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,696" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ.CNF" Destination="DirectRootRemote.directRootRead.REQ" /></Request>
+WorkingClient;<Request ID="1,697" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_2.CNF" Destination="DirectRootRemote.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,698" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ_1.CNF" Destination="DirectRootRemote.directRootRead2.REQ" /></Request>
+WorkingClient;<Request ID="1,699" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.INITO" Destination="DirectRootRemote.rootRead_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,700" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1_1.CNF" Destination="DirectRootRemote.rootRead_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,701" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.CNF" Destination="DirectRootRemote.directRootWrite_1.REQ" /></Request>
+WorkingClient;<Request ID="1,702" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.INITO" Destination="DirectRootRemote.rootRead_1.INIT" /></Request>
+WorkingClient;<Request ID="1,703" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1.CNF" Destination="DirectRootRemote.rootRead_1.REQ" /></Request>
+WorkingClient;<Request ID="1,704" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.CNF" Destination="DirectRootRemote.directRootWrite.REQ" /></Request>
+WorkingClient;<Request ID="1,705" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.INITO" Destination="DirectRootRemote.rootRead_2.INIT" /></Request>
+WorkingClient;<Request ID="1,706" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,707" Action="CREATE"><Connection Source="DirectRootRemote.directRootWrite.CNF" Destination="DirectRootRemote.SERVER_0.REQ" /></Request>
+WorkingClient;<Request ID="1,708" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.INITO" Destination="DirectRootRemote.SERVER_0.INIT" /></Request>
+WorkingClient;<Request ID="1,709" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.CNF" Destination="DirectRootRemote.directRootMethod.REQ" /></Request>
+WorkingClient;<Request ID="1,710" Action="CREATE"><Connection Source="DirectRootRemote.directRootMethod.CNF" Destination="DirectRootRemote.rootRead_2.REQ" /></Request>
+WorkingClient;<Request ID="1,711" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,712" Action="CREATE"><Connection Source="DirectRootRemote.directRootRead.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,713" Action="CREATE"><Connection Source="DirectRootRemote.directRootWrite_1.CNF" Destination="DirectRootRemote.SERVER_0_1.REQ" /></Request>
+WorkingClient;<Request ID="1,714" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.INITO" Destination="DirectRootRemote.SERVER_0_1.INIT" /></Request>
+WorkingClient;<Request ID="1,715" Action="CREATE"><Connection Source="DirectRootRemote.directRootRead2.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,716" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.CNF" Destination="DirectRootRemote.directRootMethod_1.REQ" /></Request>
+WorkingClient;<Request ID="1,717" Action="CREATE"><Connection Source="DirectRootRemote.directRootMethod_1.CNF" Destination="CreatedObjects.DINT2DINT.REQ" /></Request>
+WorkingClient;<Request ID="1,718" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.INITO" Destination="CreatedObjects.CLIENT_1.INIT" /></Request>
+WorkingClient;<Request ID="1,719" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1.OUT" Destination="DirectRootRemote.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,720" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ.OUT" Destination="DirectRootRemote.directRootRead.check" /></Request>
+WorkingClient;<Request ID="1,721" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ_1.OUT" Destination="DirectRootRemote.directRootRead2.check" /></Request>
+WorkingClient;<Request ID="1,722" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_2.OUT" Destination="DirectRootRemote.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,723" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.RD_1" Destination="DirectRootRemote.BOOL2BOOL_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,724" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.RD_1" Destination="DirectRootRemote.BOOL2BOOL_2_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,725" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1_1.OUT" Destination="DirectRootRemote.rootRead_1_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,726" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.QO" Destination="DirectRootRemote.directRootWrite_1.check" /></Request>
+WorkingClient;<Request ID="1,727" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1.OUT" Destination="DirectRootRemote.rootRead_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,728" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.QO" Destination="DirectRootRemote.directRootWrite.check" /></Request>
+WorkingClient;<Request ID="1,729" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.QO" Destination="DirectRootRemote.directRootMethod.check" /></Request>
+WorkingClient;<Request ID="1,730" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.QO" Destination="DirectRootRemote.directRootMethod_1.check" /></Request>
+WorkingClient;<Request ID="1,731" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.CNF" Destination="CreatedObjects.DINT2DINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,732" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT.CNF" Destination="CreatedObjects.CLIENT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,733" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1.CNF" Destination="CreatedObjects.F_EQ.REQ" /></Request>
+WorkingClient;<Request ID="1,734" Action="CREATE"><Connection Source="CreatedObjects.F_EQ.CNF" Destination="CreatedObjects.remoteObjectMethod1.REQ" /></Request>
+WorkingClient;<Request ID="1,735" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1.CNF" Destination="CreatedObjects.F_EQ_1.REQ" /></Request>
+WorkingClient;<Request ID="1,736" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1.CNF" Destination="CreatedObjects.remoteVar1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,737" Action="CREATE"><Connection Source="CreatedObjects.remoteVar1_1.CNF" Destination="CreatedObjects.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,738" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.CNF" Destination="CreatedObjects.DINT2DINT_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,739" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.INITO" Destination="CreatedObjects.CLIENT_1_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,740" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1.CNF" Destination="CreatedObjects.CLIENT_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,741" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.CNF" Destination="CreatedObjects.remoteVar2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,742" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.INITO" Destination="CreatedObjects.CLIENT_1_1_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,743" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1_1.CNF" Destination="CreatedObjects.remoteVar1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,744" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,745" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2.CNF" Destination="CreatedObjects.remoteObjectMethod2.REQ" /></Request>
+WorkingClient;<Request ID="1,746" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1_1.CNF" Destination="CreatedObjects.CLIENT_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,747" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,748" Action="CREATE"><Connection Source="CreatedObjects.remoteVar1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_1_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,749" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2.CNF" Destination="CreatedObjects.F_EQ_2.REQ" /></Request>
+WorkingClient;<Request ID="1,750" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_2.CNF" Destination="CreatedObjects.F_EQ_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,751" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2.CNF" Destination="CreatedObjects.CLIENT_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,752" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.CNF" Destination="CreatedObjects.remoteVar2_2.REQ" /></Request>
+WorkingClient;<Request ID="1,753" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.INITO" Destination="CreatedObjects.CLIENT_1_2.INIT" /></Request>
+WorkingClient;<Request ID="1,754" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.INITO" Destination="HandleInit.F_BOOL_TO_UINT_1.REQ" /></Request>
+WorkingClient;<Request ID="1,755" Action="CREATE"><Connection Source="CreatedObjects.remoteVar2_2.CNF" Destination="E_SR_1.R" /></Request>
+WorkingClient;<Request ID="1,756" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.CNF" Destination="CreatedObjects.DINT2DINT_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,757" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2_1.CNF" Destination="CreatedObjects.CLIENT_1_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,758" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2_1.CNF" Destination="CreatedObjects.F_EQ_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,759" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2_1.CNF" Destination="CreatedObjects.remoteObjectMethod2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,760" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.INITO" Destination="CreatedObjects.CLIENT_1_2_1.INIT" /></Request>
+WorkingClient;<Request ID="1,761" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.INITO" Destination="CreatedObjects.CLIENT_1_1_2.INIT" /></Request>
+WorkingClient;<Request ID="1,762" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod2.CNF" Destination="CreatedObjects.DINT2DINT_2_1.REQ" /></Request>
+WorkingClient;<Request ID="1,763" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.CNF" Destination="CreatedObjects.DINT2DINT_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,764" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_3.CNF" Destination="CreatedObjects.F_EQ_3.REQ" /></Request>
+WorkingClient;<Request ID="1,765" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_3.CNF" Destination="CreatedObjects.remoteObjectMethod1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,766" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_3.CNF" Destination="CreatedObjects.CLIENT_1_3.REQ" /></Request>
+WorkingClient;<Request ID="1,767" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod1.CNF" Destination="CreatedObjects.DINT2DINT_3.REQ" /></Request>
+WorkingClient;<Request ID="1,768" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod1_1.CNF" Destination="CreatedObjects.CLIENT_1_1.REQ" /></Request>
+WorkingClient;<Request ID="1,769" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.INITO" Destination="CreatedObjects.CLIENT_1_3.INIT" /></Request>
+WorkingClient;<Request ID="1,770" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.INITO" Destination="CreatedObjects.CLIENT_1_1.INIT" /></Request>
+WorkingClient;<Request ID="1,771" Action="CREATE"><Connection Source="CreatedObjects.remoteVar2_1.CNF" Destination="CreatedObjects.DINT2DINT_2.REQ" /></Request>
+WorkingClient;<Request ID="1,772" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod2_1.CNF" Destination="CreatedObjects.CLIENT_1_1_2.REQ" /></Request>
+WorkingClient;<Request ID="1,773" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.RD_1" Destination="CreatedObjects.DINT2DINT_1.IN" /></Request>
+WorkingClient;<Request ID="1,774" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT.OUT" Destination="CreatedObjects.CLIENT_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,775" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1.OUT" Destination="CreatedObjects.F_EQ.IN1" /></Request>
+WorkingClient;<Request ID="1,776" Action="CREATE"><Connection Source="CreatedObjects.F_EQ.OUT" Destination="CreatedObjects.remoteObjectMethod1.check" /></Request>
+WorkingClient;<Request ID="1,777" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1.OUT" Destination="CreatedObjects.remoteVar1_1.check" /></Request>
+WorkingClient;<Request ID="1,778" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1.OUT" Destination="CreatedObjects.F_EQ_1.IN1" /></Request>
+WorkingClient;<Request ID="1,779" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.RD_1" Destination="CreatedObjects.DINT2DINT_1_1.IN" /></Request>
+WorkingClient;<Request ID="1,780" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1.OUT" Destination="CreatedObjects.CLIENT_1_1_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,781" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.QO" Destination="CreatedObjects.remoteVar2_1.check" /></Request>
+WorkingClient;<Request ID="1,782" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.RD_1" Destination="CreatedObjects.DINT2DINT_1_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,783" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1_1.OUT" Destination="CreatedObjects.remoteVar1_2.check" /></Request>
+WorkingClient;<Request ID="1,784" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2.OUT" Destination="CreatedObjects.remoteObjectMethod2.check" /></Request>
+WorkingClient;<Request ID="1,785" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1_1.OUT" Destination="CreatedObjects.CLIENT_1_1_1_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,786" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2.OUT" Destination="CreatedObjects.F_EQ_2.IN1" /></Request>
+WorkingClient;<Request ID="1,787" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.RD_1" Destination="CreatedObjects.DINT2DINT_1_2.IN" /></Request>
+WorkingClient;<Request ID="1,788" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.QO" Destination="CreatedObjects.remoteVar2_2.check" /></Request>
+WorkingClient;<Request ID="1,789" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2.OUT" Destination="CreatedObjects.CLIENT_1_2.SD_1" /></Request>
+WorkingClient;<Request ID="1,790" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_2.OUT" Destination="CreatedObjects.F_EQ_1_1.IN1" /></Request>
+WorkingClient;<Request ID="1,791" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2_1.OUT" Destination="CreatedObjects.remoteObjectMethod2_1.check" /></Request>
+WorkingClient;<Request ID="1,792" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.RD_1" Destination="CreatedObjects.DINT2DINT_1_2_1.IN" /></Request>
+WorkingClient;<Request ID="1,793" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2_1.OUT" Destination="CreatedObjects.F_EQ_2_1.IN1" /></Request>
+WorkingClient;<Request ID="1,794" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2_1.OUT" Destination="CreatedObjects.CLIENT_1_2_1.SD_1" /></Request>
+WorkingClient;<Request ID="1,795" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_3.OUT" Destination="CreatedObjects.remoteObjectMethod1_1.check" /></Request>
+WorkingClient;<Request ID="1,796" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_3.OUT" Destination="CreatedObjects.F_EQ_3.IN1" /></Request>
+WorkingClient;<Request ID="1,797" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_3.OUT" Destination="CreatedObjects.CLIENT_1_3.SD_1" /></Request>
+WorkingClient;<Request ID="1,798" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.RD_1" Destination="CreatedObjects.DINT2DINT_1_3.IN" /></Request>
+WorkingClient;<Request ID="1,799" Action="CREATE"><Connection Source="START.COLD" Destination="InitFinishedSignal.INIT" /></Request>
+WorkingClient;<Request ID="1,800" Action="CREATE"><Connection Source="START.WARM" Destination="InitFinishedSignal.INIT" /></Request>
+WorkingClient;<Request ID="1,801" Action="CREATE"><Connection Source="InitFinishedSignal.INITO" Destination="PUBLISH_0.INIT" /></Request>
+WorkingClient;<Request ID="1,802" Action="CREATE"><Connection Source="InitFinishedSignal.IND" Destination="PUBLISH_0.REQ" /></Request>
+WorkingClient;<Request ID="1,803" Action="CREATE"><Connection Source="PUBLISH_0.CNF" Destination="E_SR_2.S" /></Request>
+WorkingClient;<Request ID="1,804" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="E_PERMIT.EI" /></Request>
+WorkingClient;<Request ID="1,805" Action="CREATE"><Connection Source="E_PERMIT.EO" Destination="E_SR_1.S" /></Request>
+WorkingClient;<Request ID="1,806" Action="CREATE"><Connection Source="E_DELAY.EO" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WorkingClient;<Request ID="1,807" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="folderTestRemote.WriteToVars.Write3.INIT" /></Request>
+WorkingClient;<Request ID="1,808" Action="CREATE"><Connection Source="E_DELAY_1.EO" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WorkingClient;<Request ID="1,809" Action="CREATE"><Connection Source="E_DELAY_1_1.EO" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WorkingClient;<Request ID="1,810" Action="CREATE"><Connection Source="E_DELAY_1_1_1.EO" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WorkingClient;<Request ID="1,811" Action="CREATE"><Connection Source="E_DELAY_1_1_2.EO" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,812" Action="CREATE"><Connection Source="E_DELAY_1_1_1_1.EO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,813" Action="CREATE"><Connection Source="E_DELAY_1_2.EO" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+WorkingClient;<Request ID="1,814" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe3.QI" /></Request>
+WorkingClient;<Request ID="1,815" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe1.QI" /></Request>
+WorkingClient;<Request ID="1,816" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe2.QI" /></Request>
+WorkingClient;<Request ID="1,817" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read1.QI" /></Request>
+WorkingClient;<Request ID="1,818" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read2.QI" /></Request>
+WorkingClient;<Request ID="1,819" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read3.QI" /></Request>
+WorkingClient;<Request ID="1,820" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write1.QI" /></Request>
+WorkingClient;<Request ID="1,821" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write3.QI" /></Request>
+WorkingClient;<Request ID="1,822" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write2.QI" /></Request>
+WorkingClient;<Request ID="1,823" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="HandleInit.F_BOOL_TO_UINT_1.IN" /></Request>
+WorkingClient;<Request ID="1,824" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+WorkingClient;<Request ID="1,825" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+WorkingClient;<Request ID="1,826" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+WorkingClient;<Request ID="1,827" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+WorkingClient;<Request ID="1,828" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+WorkingClient;<Request ID="1,829" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write3.QI" /></Request>
+WorkingClient;<Request ID="1,830" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+WorkingClient;<Request ID="1,831" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+WorkingClient;<Request ID="1,832" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.QI" /></Request>
+WorkingClient;<Request ID="1,833" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.QI" /></Request>
+WorkingClient;<Request ID="1,834" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.QI" /></Request>
+WorkingClient;<Request ID="1,835" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.QI" /></Request>
+WorkingClient;<Request ID="1,836" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+WorkingClient;<Request ID="1,837" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+WorkingClient;<Request ID="1,838" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+WorkingClient;<Request ID="1,839" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+WorkingClient;<Request ID="1,840" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+WorkingClient;<Request ID="1,841" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+WorkingClient;<Request ID="1,842" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+WorkingClient;<Request ID="1,843" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write3.QI" /></Request>
+WorkingClient;<Request ID="1,844" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.QI" /></Request>
+WorkingClient;<Request ID="1,845" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.QI" /></Request>
+WorkingClient;<Request ID="1,846" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.QI" /></Request>
+WorkingClient;<Request ID="1,847" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.QI" /></Request>
+WorkingClient;<Request ID="1,848" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+WorkingClient;<Request ID="1,849" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+WorkingClient;<Request ID="1,850" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+WorkingClient;<Request ID="1,851" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+WorkingClient;<Request ID="1,852" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+WorkingClient;<Request ID="1,853" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+WorkingClient;<Request ID="1,854" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+WorkingClient;<Request ID="1,855" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.QI" /></Request>
+WorkingClient;<Request ID="1,856" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.QI" /></Request>
+WorkingClient;<Request ID="1,857" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.QI" /></Request>
+WorkingClient;<Request ID="1,858" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.QI" /></Request>
+WorkingClient;<Request ID="1,859" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.QI" /></Request>
+WorkingClient;<Request ID="1,860" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="E_PERMIT.PERMIT" /></Request>
+WorkingClient;<Request ID="1,861" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,862" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.QI" /></Request>
+WorkingClient;<Request ID="1,863" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.QI" /></Request>
+WorkingClient;<Request ID="1,864" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.QI" /></Request>
+WorkingClient;<Request ID="1,865" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,866" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.QI" /></Request>
+WorkingClient;<Request ID="1,867" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.QI" /></Request>
+WorkingClient;<Request ID="1,868" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.QI" /></Request>
+WorkingClient;<Request ID="1,869" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,870" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.QI" /></Request>
+WorkingClient;<Request ID="1,871" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.QI" /></Request>
+WorkingClient;<Request ID="1,872" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.QI" /></Request>
+WorkingClient;<Request ID="1,873" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,874" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.QI" /></Request>
+WorkingClient;<Request ID="1,875" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.QI" /></Request>
+WorkingClient;<Request ID="1,876" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.QI" /></Request>
+WorkingClient;<Request ID="1,877" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,878" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,879" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,880" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0.QI" /></Request>
+WorkingClient;<Request ID="1,881" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.PUBLISH_1.QI" /></Request>
+WorkingClient;<Request ID="1,882" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead.QI" /></Request>
+WorkingClient;<Request ID="1,883" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_2.QI" /></Request>
+WorkingClient;<Request ID="1,884" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,885" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_1.QI" /></Request>
+WorkingClient;<Request ID="1,886" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.SERVER_0.QI" /></Request>
+WorkingClient;<Request ID="1,887" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.SERVER_0_1.QI" /></Request>
+WorkingClient;<Request ID="1,888" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1.QI" /></Request>
+WorkingClient;<Request ID="1,889" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,890" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,891" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_2.QI" /></Request>
+WorkingClient;<Request ID="1,892" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_2.QI" /></Request>
+WorkingClient;<Request ID="1,893" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_1_1.QI" /></Request>
+WorkingClient;<Request ID="1,894" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_2_1.QI" /></Request>
+WorkingClient;<Request ID="1,895" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_3.QI" /></Request>
+WorkingClient;<Request ID="1,896" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/clientWorkingNoSubs.fboot b/systemtests/src/modules/opc_ua/clientWorkingNoSubs.fboot
new file mode 100644
index 0000000..063609f
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/clientWorkingNoSubs.fboot
@@ -0,0 +1,1210 @@
+;<Request ID="1" Action="CREATE"><FB Name="WokingClientWithoutSubs" Type="EMB_RES" /></Request>
+WokingClientWithoutSubs;<Request ID="2" Action="CREATE"><FB Name="WorkingWithoutSubscription.InitFinishedSignal_1" Type="SUBSCRIBE_0" /></Request>
+WokingClientWithoutSubs;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="WorkingWithoutSubscription.InitFinishedSignal_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="4" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="WorkingWithoutSubscription.InitFinishedSignal_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="5" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="6" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="7" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="8" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="9" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="10" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="11" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.WRITE_Only_read" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="12" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="13" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="14" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.READ_Only_read" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="15" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="16" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="17" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="18" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="19" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="20" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/noNewFolder]" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="21" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.readNoNewFoler" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="22" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="23" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="24" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="25" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="26" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/noNewFolderMethod]" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="27" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.methodNoNewFolder" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="28" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="29" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="30" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteIsolatedCases_1.writeOnlyWrittableVar" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="31" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="32" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="33" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="34" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="35" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="36" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="37" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="38" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="39" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="40" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="41" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="42" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="43" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="44" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="45" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="46" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="47" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="48" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="49" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="50" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="51" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="52" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="53" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="54" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="55" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="56" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="57" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="58" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="59" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="60" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="61" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="62" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="63" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="64" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="65" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="66" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="67" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="68" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="69" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="70" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="71" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="72" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="73" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="74" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="75" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="76" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="77" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="78" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="79" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="80" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="81" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="82" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="83" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="84" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="85" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="86" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="87" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="88" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="89" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="90" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="91" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4_NBN" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="92" Action="CREATE"><FB Name="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5_NBN" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="93" Action="CREATE"><FB Name="WorkingWithoutSubscription.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="94" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="95" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="96" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="97" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="98" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="99" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="100" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="101" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="102" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="103" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="104" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="105" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="106" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="107" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="108" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="109" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="110" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="111" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="112" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse3" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="113" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="114" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="115" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="116" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="117" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="118" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="119" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="120" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="121" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="122" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="123" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="124" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="125" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="126" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="127" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="128" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="129" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="130" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="131" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="132" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="133" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="134" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="135" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="136" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="137" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="138" Action="CREATE"><FB Name="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="139" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="140" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="141" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="142" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="143" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="144" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="145" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="146" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="147" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="148" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="149" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="150" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="151" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="152" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="153" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="154" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="155" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="156" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="157" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="158" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="159" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="160" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="161" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="162" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="163" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="164" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="165" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="166" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="167" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="168" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="169" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="170" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="171" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="172" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="173" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="174" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="175" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="176" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="177" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="178" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="179" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="180" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="181" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="182" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="183" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="184" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="185" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="186" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="187" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="188" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="189" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="190" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="191" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="192" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="193" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="194" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="195" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="196" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="197" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="198" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="199" Action="CREATE"><FB Name="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="200" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="201" Action="CREATE"><FB Name="WorkingWithoutSubscription.E_DELAY_1" Type="E_DELAY" /></Request>
+WokingClientWithoutSubs;<Request ID="202" Action="WRITE"><Connection Source="T#2s" Destination="WorkingWithoutSubscription.E_DELAY_1.DT" /></Request>
+WokingClientWithoutSubs;<Request ID="203" Action="CREATE"><FB Name="WorkingWithoutSubscription.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+WokingClientWithoutSubs;<Request ID="204" Action="WRITE"><Connection Source="1" Destination="WorkingWithoutSubscription.PUBLISH_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="205" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="WorkingWithoutSubscription.PUBLISH_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="206" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="207" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_4.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="208" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="209" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="210" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="211" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="212" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="213" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="214" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="215" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="216" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="217" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WokingClientWithoutSubs;<Request ID="218" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="219" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WokingClientWithoutSubs;<Request ID="220" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="221" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="222" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="223" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="224" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_5.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="225" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="226" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_6.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="227" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="228" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="229" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="230" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="231" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="232" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="233" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="234" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="235" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_0_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="236" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="237" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="238" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="239" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="240" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="241" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="242" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="243" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="244" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="245" Action="WRITE"><Connection Source="UINT#4" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="246" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="247" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_1" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="248" Action="WRITE"><Connection Source="UINT#9" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_1.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="249" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="250" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteBrowseManyEvents" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="251" Action="WRITE"><Connection Source="0" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteBrowseManyEvents.check" /></Request>
+WokingClientWithoutSubs;<Request ID="252" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="253" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="254" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_2" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="255" Action="WRITE"><Connection Source="UINT#2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_2.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="256" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SR" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="257" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="258" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_4.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="259" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="260" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="261" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="262" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="263" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="264" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="265" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="266" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="267" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="268" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WokingClientWithoutSubs;<Request ID="269" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="270" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WokingClientWithoutSubs;<Request ID="271" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="272" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="273" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="274" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="275" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_5.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="276" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="277" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_6.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="278" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="279" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="280" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="281" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="282" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="283" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="284" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="285" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="286" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_0_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="287" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="288" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="289" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="290" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="291" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="292" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="293" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="294" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="295" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="296" Action="WRITE"><Connection Source="UINT#4" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="297" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="298" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_1" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="299" Action="WRITE"><Connection Source="UINT#9" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_1.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="300" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="301" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumericManyEvents" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="302" Action="WRITE"><Connection Source="0" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumericManyEvents.check" /></Request>
+WokingClientWithoutSubs;<Request ID="303" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="304" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="305" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_2" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="306" Action="WRITE"><Connection Source="UINT#2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_2.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="307" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SR" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="308" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="309" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_4.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="310" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="311" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=methodHello]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="312" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="313" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="314" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="315" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=methodHello1]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="316" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="317" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="318" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="319" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WokingClientWithoutSubs;<Request ID="320" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=methodHello2]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="321" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WokingClientWithoutSubs;<Request ID="322" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=methodHello3]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="323" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="324" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="325" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="326" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_5.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="327" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="328" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_6.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="329" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="330" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="331" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="332" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="333" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="334" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="335" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="336" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="337" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_0_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="338" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="339" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="340" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="341" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="342" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="343" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="344" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="345" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="346" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="347" Action="WRITE"><Connection Source="UINT#4" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="348" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="349" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="350" Action="WRITE"><Connection Source="UINT#9" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_1.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="351" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="352" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteStringManyEvents" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="353" Action="WRITE"><Connection Source="0" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteStringManyEvents.check" /></Request>
+WokingClientWithoutSubs;<Request ID="354" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="355" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="356" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="357" Action="WRITE"><Connection Source="UINT#2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_2.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="358" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SR" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="359" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="360" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_4.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="361" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="362" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=methodByteStringNodeId1]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="363" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="364" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="365" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="366" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=methodByteStringNodeId2]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="367" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="368" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="369" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="370" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+WokingClientWithoutSubs;<Request ID="371" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=methodByteStringNodeId3]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="372" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+WokingClientWithoutSubs;<Request ID="373" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=methodByteStringNodeId4]" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="374" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="375" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="376" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="377" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_5.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="378" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="379" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_6.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="380" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="381" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="382" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="383" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="384" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="385" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="386" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="387" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStrin_3_2_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="388" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_0_0" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="389" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="390" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="391" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="392" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="393" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="394" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="395" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="396" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="397" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="398" Action="WRITE"><Connection Source="UINT#4" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="399" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="400" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="401" Action="WRITE"><Connection Source="UINT#9" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_1.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="402" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="403" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStringManyEvents" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="404" Action="WRITE"><Connection Source="0" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStringManyEvents.check" /></Request>
+WokingClientWithoutSubs;<Request ID="405" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+WokingClientWithoutSubs;<Request ID="406" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="407" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+WokingClientWithoutSubs;<Request ID="408" Action="WRITE"><Connection Source="UINT#2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_2.PV" /></Request>
+WokingClientWithoutSubs;<Request ID="409" Action="CREATE"><FB Name="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SR" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="410" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="411" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="412" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="413" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="414" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="415" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="416" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="417" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="418" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="419" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="420" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="421" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="422" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="423" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="424" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="425" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="426" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="427" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="428" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="429" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="430" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="431" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="432" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="433" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="434" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+WokingClientWithoutSubs;<Request ID="435" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="436" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="437" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="438" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="439" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="440" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="441" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="442" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="443" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="444" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="445" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="446" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="447" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="448" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="449" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="450" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="451" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="452" Action="WRITE"><Connection Source="DINT#789" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="453" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="454" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="455" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="456" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="457" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="458" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="459" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="460" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="461" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="462" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="463" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="464" Action="WRITE"><Connection Source="DINT#123456" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="465" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+WokingClientWithoutSubs;<Request ID="466" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="467" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="468" Action="WRITE"><Connection Source="DINT#654321" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="469" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="470" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="471" Action="CREATE"><FB Name="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="472" Action="CREATE"><FB Name="WorkingWithoutSubscription.E_SR_2_1" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="473" Action="CREATE"><FB Name="WorkingWithoutSubscription.E_SR_1_1" Type="E_SR" /></Request>
+WokingClientWithoutSubs;<Request ID="474" Action="CREATE"><FB Name="WorkingWithoutSubscription.HandleInit_1.STEST_END_1" Type="STEST_END" /></Request>
+WokingClientWithoutSubs;<Request ID="475" Action="CREATE"><FB Name="WorkingWithoutSubscription.HandleInit_1.E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+WokingClientWithoutSubs;<Request ID="476" Action="CREATE"><FB Name="WorkingWithoutSubscription.HandleInit_1.F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+WokingClientWithoutSubs;<Request ID="477" Action="CREATE"><FB Name="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+WokingClientWithoutSubs;<Request ID="478" Action="WRITE"><Connection Source="1" Destination="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="479" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="480" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="481" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="482" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="483" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootRead" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="484" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootWrite" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="485" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.F_EQ" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="486" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="487" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootMethod" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="488" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootRead2" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="489" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_2" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="490" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootWrite_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="491" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.directRootMethod_1" Type="TEST_CONDITION" /></Request>
+WokingClientWithoutSubs;<Request ID="492" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1" Type="F_EQ" /></Request>
+WokingClientWithoutSubs;<Request ID="493" Action="WRITE"><Connection Source="DINT#456" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1.IN2" /></Request>
+WokingClientWithoutSubs;<Request ID="494" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+WokingClientWithoutSubs;<Request ID="495" Action="WRITE"><Connection Source="DINT#123" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="496" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.rootRead" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="497" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:writeVar]" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="498" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.rootRead_2" Type="CLIENT_0_1" /></Request>
+WokingClientWithoutSubs;<Request ID="499" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:folder2/writeVar]" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="500" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="501" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:folder2/readVar]" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="502" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.rootRead_1" Type="CLIENT_1_0" /></Request>
+WokingClientWithoutSubs;<Request ID="503" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:readVar/]" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="504" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.SERVER_0" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="505" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:method]" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="506" Action="CREATE"><FB Name="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1" Type="CLIENT_0" /></Request>
+WokingClientWithoutSubs;<Request ID="507" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:folder2/method]" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.ID" /></Request>
+WokingClientWithoutSubs;<Request ID="508" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.INITO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="509" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="510" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="511" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.WRITE_Only_read.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="512" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.WRITE_Only_read.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="513" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="514" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="515" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.READ_Only_read.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="516" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.readNoNewFoler.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="517" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_2.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="518" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="519" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.INITO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="520" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.READ_Only_read.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="521" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="522" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.INITO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="523" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.readNoNewFoler.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="524" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.methodNoNewFolder.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="525" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.methodNoNewFolder.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="526" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="527" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.INITO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="528" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.writeOnlyWrittableVar.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="529" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.CNF" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.writeOnlyWrittableVar.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="530" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.RD_1" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="531" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.RD_1" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="532" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="533" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.READ_Only_read.check" /></Request>
+WokingClientWithoutSubs;<Request ID="534" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_1.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="535" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.WRITE_Only_read.check" /></Request>
+WokingClientWithoutSubs;<Request ID="536" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.readNoNewFoler.check" /></Request>
+WokingClientWithoutSubs;<Request ID="537" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.RD_1" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="538" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT_1_2.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.F_EQ_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="539" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.QO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.methodNoNewFolder.check" /></Request>
+WokingClientWithoutSubs;<Request ID="540" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT.OUT" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="541" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.QO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.writeOnlyWrittableVar.check" /></Request>
+WokingClientWithoutSubs;<Request ID="542" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="543" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="544" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="545" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="546" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="547" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="548" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="549" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="550" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="551" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="552" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="553" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="554" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="555" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="556" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="557" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="558" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="559" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="560" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="561" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="562" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="563" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="564" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="565" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="566" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.QO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="567" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.QO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="568" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.QO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="569" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="570" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="571" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.QO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.numericWrite1_1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="572" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="573" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="574" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="575" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="576" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="577" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="578" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="579" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="580" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="581" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="582" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="583" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="584" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="585" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="586" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="587" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="588" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="589" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="590" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote2.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="591" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="592" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="593" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="594" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="595" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="596" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4_NBN.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="597" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5_NBN.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="598" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4_NBN.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="599" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5_NBN.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="600" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="601" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.RD_1" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="602" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.RD_1" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="603" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.RD_2" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="604" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="605" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4.check" /></Request>
+WokingClientWithoutSubs;<Request ID="606" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="607" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="608" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5.check" /></Request>
+WokingClientWithoutSubs;<Request ID="609" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote3.check" /></Request>
+WokingClientWithoutSubs;<Request ID="610" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="611" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.RD_2" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="612" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.RD_1" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="613" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="614" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="615" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="616" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.RD_1" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="617" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.RD_2" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="618" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="619" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="620" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote4_NBN.check" /></Request>
+WokingClientWithoutSubs;<Request ID="621" Action="CREATE"><Connection Source="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.numericTestReadRemote5_NBN.check" /></Request>
+WokingClientWithoutSubs;<Request ID="622" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="623" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="624" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="625" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="626" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.INITO" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="627" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="628" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.INITO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="629" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.INITO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="630" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="631" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="632" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="633" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="634" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="635" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="636" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="637" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="638" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="639" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="640" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="641" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.QO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="642" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.QO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="643" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.QO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.writeBrowse3.check" /></Request>
+WokingClientWithoutSubs;<Request ID="644" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.INITO" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="645" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="646" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="647" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.INITO" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="648" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="649" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="650" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="651" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote4.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="652" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="653" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="654" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="655" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="656" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="657" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="658" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="659" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="660" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="661" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_3.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="662" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="663" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.INITO" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="664" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote5.CNF" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="665" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.RD_1" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="666" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.RD_1" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="667" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.RD_2" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="668" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="669" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote4.check" /></Request>
+WokingClientWithoutSubs;<Request ID="670" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_3.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="671" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="672" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote5.check" /></Request>
+WokingClientWithoutSubs;<Request ID="673" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote3.check" /></Request>
+WokingClientWithoutSubs;<Request ID="674" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="675" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.RD_2" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="676" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.RD_1" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="677" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_1_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="678" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.BOOL2BOOL_3.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="679" Action="CREATE"><Connection Source="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.folderTestReadRemote1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="680" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="681" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="682" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="683" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="684" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="685" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="686" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="687" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="688" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="689" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="690" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="691" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="692" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="693" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="694" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="695" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="696" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="697" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="698" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="699" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="700" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.QO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="701" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="702" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="703" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.QO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="704" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="705" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="706" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.QO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="707" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="708" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="709" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.QO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.byteStringWrite1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="710" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="711" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="712" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="713" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="714" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="715" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="716" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="717" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="718" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="719" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="720" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="721" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="722" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="723" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="724" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="725" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="726" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="727" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="728" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="729" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="730" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="731" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="732" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="733" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="734" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="735" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="736" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="737" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="738" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="739" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.RD_1" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="740" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.RD_1" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="741" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.RD_2" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="742" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="743" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4.check" /></Request>
+WokingClientWithoutSubs;<Request ID="744" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="745" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="746" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5.check" /></Request>
+WokingClientWithoutSubs;<Request ID="747" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote3.check" /></Request>
+WokingClientWithoutSubs;<Request ID="748" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="749" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.RD_2" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="750" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.RD_1" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="751" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="752" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="753" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="754" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="755" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="756" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote4_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="757" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.RD_1" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="758" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.bytestringTestReadRemote5_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="759" Action="CREATE"><Connection Source="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.RD_2" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="760" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="761" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="762" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="763" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="764" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="765" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="766" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="767" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="768" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_0_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="769" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_8.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="770" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_7.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="771" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_7.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="772" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="773" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_8.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="774" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="775" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="776" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_4.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="777" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_5.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_6.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="778" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_6.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="779" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="780" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="781" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="782" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_3.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="783" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="784" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="785" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_1.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="786" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="787" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_1.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="788" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_1.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteBrowseManyEvents.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="789" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="790" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="791" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="792" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_1.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="793" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_0_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="794" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_1.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="795" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_2.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="796" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_2.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="797" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_2.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="798" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_2.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="799" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_2.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="800" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SR.S" /></Request>
+WokingClientWithoutSubs;<Request ID="801" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.R" /></Request>
+WokingClientWithoutSubs;<Request ID="802" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="803" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="804" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="805" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="806" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_3.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="807" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_4.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="808" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_5.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="809" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_7.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="810" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.RD_2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_8.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="811" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_6.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="812" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="813" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="814" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_0_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="815" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="816" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_0_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="817" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_7.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="818" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.DINT2DINT_8.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="819" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="820" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="821" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.RemoteMethodBrowse_3_2_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="822" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="823" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_1.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="824" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_CTU_2.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.E_PERMIT_2.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="825" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="826" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="827" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="828" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="829" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="830" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="831" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="832" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="833" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_0_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="834" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_8.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="835" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_7.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="836" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_7.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="837" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="838" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_8.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="839" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="840" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="841" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_4.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="842" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_5.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_6.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="843" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_6.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="844" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="845" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="846" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="847" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_3.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="848" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="849" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="850" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_1.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="851" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="852" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_1.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="853" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_1.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumericManyEvents.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="854" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="855" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="856" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="857" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_1.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="858" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_0_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="859" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_1.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="860" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_2.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="861" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_2.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="862" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_2.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="863" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_2.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="864" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_2.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="865" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SR.S" /></Request>
+WokingClientWithoutSubs;<Request ID="866" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.R" /></Request>
+WokingClientWithoutSubs;<Request ID="867" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="868" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="869" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="870" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="871" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_3.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="872" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_4.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="873" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_5.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="874" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_7.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="875" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.RD_2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_8.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="876" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_6.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="877" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="878" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="879" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_0_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="880" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="881" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_0_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="882" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_7.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="883" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.DINT2DINT_8.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="884" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="885" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="886" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.RemoteNumeric_3_2_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="887" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="888" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_1.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="889" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_CTU_2.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.E_PERMIT_2.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="890" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="891" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="892" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="893" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="894" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="895" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="896" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="897" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="898" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_0_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="899" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_8.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="900" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_7.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="901" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_7.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="902" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="903" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_8.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="904" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="905" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="906" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_4.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="907" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_5.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_6.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="908" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_6.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="909" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="910" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="911" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="912" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_3.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="913" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="914" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="915" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_1.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="916" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="917" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_1.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="918" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_1.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteStringManyEvents.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="919" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="920" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="921" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="922" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_1.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="923" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_0_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="924" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_1.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="925" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_2.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="926" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_2.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="927" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_2.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="928" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_2.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="929" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_2.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="930" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SR.S" /></Request>
+WokingClientWithoutSubs;<Request ID="931" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.R" /></Request>
+WokingClientWithoutSubs;<Request ID="932" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="933" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="934" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="935" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="936" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_3.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="937" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_4.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="938" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_5.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="939" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_7.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="940" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.RD_2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_8.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="941" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_6.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="942" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="943" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="944" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_0_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="945" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="946" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_0_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="947" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_7.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="948" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.DINT2DINT_8.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="949" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="950" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="951" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.RemoteString_3_2_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="952" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="953" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="954" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_CTU_2.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="955" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="956" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="957" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="958" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="959" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.INITO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="960" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.INITO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="961" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="962" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="963" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_0_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="964" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_8.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="965" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_7.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="966" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStrin_3_2_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_7.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="967" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="968" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_8.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="969" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="970" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStrin_3_2_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="971" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_4.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="972" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_5.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_6.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="973" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_6.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="974" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="975" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="976" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="977" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_3.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="978" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="979" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_2.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="980" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_1.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="981" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="982" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_1.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="983" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_1.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStringManyEvents.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="984" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="985" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="986" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_1.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="987" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_1.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="988" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_0_0.CNF" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="989" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_1.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="990" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_2.EO1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="991" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_2.EO2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="992" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_2.CU" /></Request>
+WokingClientWithoutSubs;<Request ID="993" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_2.CUO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="994" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_2.EO" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.DINT2DINT.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="995" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SR.S" /></Request>
+WokingClientWithoutSubs;<Request ID="996" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.R" /></Request>
+WokingClientWithoutSubs;<Request ID="997" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SR.EO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="998" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="999" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,000" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,001" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_3.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="1,002" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_4.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,003" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_5.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="1,004" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.RD_1" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_7.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,005" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.RD_2" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_8.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,006" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_6.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.SD_3" /></Request>
+WokingClientWithoutSubs;<Request ID="1,007" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,008" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,009" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_0_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,010" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,011" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_0_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,012" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_7.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,013" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.DINT2DINT_8.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,014" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,015" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteString_3_2_2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,016" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.QO" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.RemoteByteStrin_3_2_0.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,017" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,018" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,019" Action="CREATE"><Connection Source="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_CTU_2.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,020" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,021" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,022" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,023" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,024" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,025" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,026" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,027" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,028" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,029" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,030" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,031" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,032" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,033" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,034" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,035" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,036" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,037" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,038" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,039" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,040" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.QO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,041" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,042" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="1,043" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.QO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,044" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,045" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="1,046" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.QO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,047" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,048" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.SD_2" /></Request>
+WokingClientWithoutSubs;<Request ID="1,049" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.QO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.stringWrite1_1_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,050" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,051" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,052" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,053" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,054" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,055" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,056" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,057" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,058" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,059" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,060" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,061" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,062" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,063" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,064" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,065" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,066" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,067" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,068" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,069" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,070" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,071" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,072" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,073" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,074" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4_1.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,075" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.INITO" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,076" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.INITO" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,077" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5_1.CNF" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,078" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5.CNF" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,079" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.RD_1" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,080" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.RD_1" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,081" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.RD_2" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,082" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,083" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,084" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_3.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,085" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,086" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,087" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote3.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,088" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,089" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.RD_2" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,090" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.RD_1" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,091" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,092" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_3.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,093" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_2.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,094" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.RD_1" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,095" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.RD_2" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,096" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote4_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,097" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.stringTestReadRemote5_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,098" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,099" Action="CREATE"><Connection Source="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,100" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.F_BOOL_TO_UINT_1.CNF" Destination="WorkingWithoutSubscription.HandleInit_1.E_DEMUX_2_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,101" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.E_DEMUX_2_1.EO1" Destination="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,102" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.INITO" Destination="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,103" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.E_DEMUX_2_1.EO2" Destination="WorkingWithoutSubscription.E_DELAY_1.START" /></Request>
+WokingClientWithoutSubs;<Request ID="1,104" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.PUBLISH_0_1.CNF" Destination="WorkingWithoutSubscription.HandleInit_1.STEST_END_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,105" Action="CREATE"><Connection Source="WorkingWithoutSubscription.HandleInit_1.F_BOOL_TO_UINT_1.OUT" Destination="WorkingWithoutSubscription.HandleInit_1.E_DEMUX_2_1.K" /></Request>
+WokingClientWithoutSubs;<Request ID="1,106" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,107" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.F_EQ.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootRead.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,108" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_2.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,109" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootRead2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,110" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,111" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,112" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootWrite_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,113" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,114" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,115" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootWrite.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,116" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,117" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,118" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootWrite.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,119" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,120" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootMethod.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,121" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootMethod.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,122" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,123" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootRead.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,124" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootWrite_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,125" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.INITO" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,126" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootRead2.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,127" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.CNF" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootMethod_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,128" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.directRootMethod_1.CNF" Destination="WorkingWithoutSubscription.E_SR_1_1.R" /></Request>
+WokingClientWithoutSubs;<Request ID="1,129" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.INITO" Destination="WorkingWithoutSubscription.HandleInit_1.F_BOOL_TO_UINT_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,130" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,131" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.F_EQ.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootRead.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,132" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootRead2.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,133" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_2.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.F_EQ_1.IN1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,134" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead.RD_1" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,135" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.RD_1" Destination="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_2.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,136" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1_1.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,137" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.QO" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootWrite_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,138" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.BOOL2BOOL_2_1_1.OUT" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.SD_1" /></Request>
+WokingClientWithoutSubs;<Request ID="1,139" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.QO" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootWrite.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,140" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.QO" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootMethod.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,141" Action="CREATE"><Connection Source="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.QO" Destination="WorkingWithoutSubscription.DirectRootRemote.directRootMethod_1.check" /></Request>
+WokingClientWithoutSubs;<Request ID="1,142" Action="CREATE"><Connection Source="WorkingWithoutSubscription.InitFinishedSignal_1.INITO" Destination="WorkingWithoutSubscription.PUBLISH_0_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,143" Action="CREATE"><Connection Source="WorkingWithoutSubscription.InitFinishedSignal_1.IND" Destination="WorkingWithoutSubscription.PUBLISH_0_1.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,144" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_2_1.EO" Destination="WorkingWithoutSubscription.E_PERMIT_1.EI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,145" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_PERMIT_1.EO" Destination="WorkingWithoutSubscription.E_SR_1_1.S" /></Request>
+WokingClientWithoutSubs;<Request ID="1,146" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.EO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,147" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_DELAY_1.EO" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+WokingClientWithoutSubs;<Request ID="1,148" Action="CREATE"><Connection Source="WorkingWithoutSubscription.PUBLISH_0_1.CNF" Destination="WorkingWithoutSubscription.E_SR_2_1.S" /></Request>
+WokingClientWithoutSubs;<Request ID="1,149" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,150" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,151" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0_1_1_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,152" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.CLIENT_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,153" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteIsolatedCases_1.PUBLISH_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,154" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,155" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,156" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,157" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.ReadVars.Read3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,158" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,159" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,160" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,161" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.numericNodeIdTestRemote_1.WriteToVars.Write3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,162" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_2_1.Q" Destination="WorkingWithoutSubscription.E_PERMIT_1.PERMIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,163" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,164" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,165" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.ReadVars.Read3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,166" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,167" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,168" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.folderTestRemote_1.WriteToVars.Write2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,169" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,170" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,171" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,172" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.ReadVars.Read3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,173" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,174" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,175" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,176" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.bytestringNodeIdTestRemote_1.WriteToVars.Write3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,177" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,178" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,179" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_3_2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,180" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteBrowseName.CLIENT_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,181" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,182" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,183" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_3_2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,184" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteNumericMethod.CLIENT_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,185" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,186" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,187" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_3_2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,188" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteStringMethod.CLIENT_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,189" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,190" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,191" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_3_2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,192" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.RemoteMethods_1.RemoteByteStringMethod.CLIENT_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,193" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,194" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,195" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,196" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.ReadVars.Read3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,197" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,198" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,199" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,200" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.stringNodeIdTestRemote_1.WriteToVars.Write3.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,201" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.HandleInit_1.F_BOOL_TO_UINT_1.IN" /></Request>
+WokingClientWithoutSubs;<Request ID="1,202" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,203" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_2.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,204" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,205" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.rootRead_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,206" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,207" Action="CREATE"><Connection Source="WorkingWithoutSubscription.E_SR_1_1.Q" Destination="WorkingWithoutSubscription.DirectRootRemote.SERVER_0_1.QI" /></Request>
+WokingClientWithoutSubs;<Request ID="1,208" Action="CREATE"><Connection Source="START.WARM" Destination="WorkingWithoutSubscription.InitFinishedSignal_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,209" Action="CREATE"><Connection Source="START.COLD" Destination="WorkingWithoutSubscription.InitFinishedSignal_1.INIT" /></Request>
+WokingClientWithoutSubs;<Request ID="1,210" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/delayedClient.fboot b/systemtests/src/modules/opc_ua/delayedClient.fboot
new file mode 100644
index 0000000..97391b4
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/delayedClient.fboot
@@ -0,0 +1,1894 @@
+;<Request ID="1" Action="CREATE"><FB Name="delayedWorkingClient" Type="EMB_RES" /></Request>
+delayedWorkingClient;<Request ID="2" Action="CREATE"><FB Name="E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="3" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="4" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="5" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="6" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="7" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="8" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="9" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="10" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+delayedWorkingClient;<Request ID="11" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="12" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="13" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="14" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="15" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="16" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="17" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingClient;<Request ID="18" Action="WRITE"><Connection Source="T#1s" Destination="numericNodeIdTestRemote.WriteToVars.E_DELAY.DT" /></Request>
+delayedWorkingClient;<Request ID="19" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.E_SWITCH" Type="E_SWITCH" /></Request>
+delayedWorkingClient;<Request ID="20" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="21" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+delayedWorkingClient;<Request ID="22" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="23" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+delayedWorkingClient;<Request ID="24" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="25" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="26" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.Write3Numeric" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="27" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.ID" /></Request>
+delayedWorkingClient;<Request ID="28" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="29" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="30" Action="CREATE"><FB Name="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="31" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="32" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+delayedWorkingClient;<Request ID="33" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="34" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+delayedWorkingClient;<Request ID="35" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="36" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="37" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="38" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="39" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="40" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="41" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="42" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="43" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="44" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="45" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="46" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="47" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="48" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="49" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="50" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="51" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="52" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="53" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+delayedWorkingClient;<Request ID="54" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="55" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="56" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="57" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="58" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="59" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="60" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="61" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="62" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="63" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="64" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="65" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="66" Action="CREATE"><FB Name="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="67" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="68" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="69" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="70" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="71" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.ID" /></Request>
+delayedWorkingClient;<Request ID="72" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="73" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="74" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="75" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="76" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="77" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="78" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="79" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="80" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="81" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingClient;<Request ID="82" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.ID" /></Request>
+delayedWorkingClient;<Request ID="83" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="84" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.ID" /></Request>
+delayedWorkingClient;<Request ID="85" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="86" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="87" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="88" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="89" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="90" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="91" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="92" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="93" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN2" /></Request>
+delayedWorkingClient;<Request ID="94" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="95" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="96" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN2" /></Request>
+delayedWorkingClient;<Request ID="97" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="98" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="99" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="100" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN2" /></Request>
+delayedWorkingClient;<Request ID="101" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="102" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="103" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="104" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="105" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="106" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="107" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="108" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="109" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="110" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="111" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="112" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:i=12348;,1:i=12349]" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="113" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="114" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="115" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="116" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="117" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="118" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="119" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="120" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="121" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN2" /></Request>
+delayedWorkingClient;<Request ID="122" Action="CREATE"><FB Name="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="123" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="124" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_4" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="125" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_4.IN" /></Request>
+delayedWorkingClient;<Request ID="126" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="127" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.ID" /></Request>
+delayedWorkingClient;<Request ID="128" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="129" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_2.IN" /></Request>
+delayedWorkingClient;<Request ID="130" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="131" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="132" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="133" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="134" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="135" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+delayedWorkingClient;<Request ID="136" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.ID" /></Request>
+delayedWorkingClient;<Request ID="137" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+delayedWorkingClient;<Request ID="138" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.ID" /></Request>
+delayedWorkingClient;<Request ID="139" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="140" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_3.IN" /></Request>
+delayedWorkingClient;<Request ID="141" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_5" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="142" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_5.IN" /></Request>
+delayedWorkingClient;<Request ID="143" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_6" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="144" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_6.IN" /></Request>
+delayedWorkingClient;<Request ID="145" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_7" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="146" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.DINT2DINT_8" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="147" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="148" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="149" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="150" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="151" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="152" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="153" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="154" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="155" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteBrowseName.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="156" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="157" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="158" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="159" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="160" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="161" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT_1" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="162" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="163" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteBrowseName.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="164" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="165" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU_1" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="166" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteBrowseName.E_CTU_1.PV" /></Request>
+delayedWorkingClient;<Request ID="167" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT_1" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="168" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="169" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents.check" /></Request>
+delayedWorkingClient;<Request ID="170" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SPLIT_2" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="171" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_PERMIT_2" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="172" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_CTU_2" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="173" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteBrowseName.E_CTU_2.PV" /></Request>
+delayedWorkingClient;<Request ID="174" Action="CREATE"><FB Name="RemoteMethods.RemoteBrowseName.E_SR" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="175" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="176" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.IN" /></Request>
+delayedWorkingClient;<Request ID="177" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="178" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.ID" /></Request>
+delayedWorkingClient;<Request ID="179" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="180" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.IN" /></Request>
+delayedWorkingClient;<Request ID="181" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="182" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="183" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="184" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="185" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="186" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+delayedWorkingClient;<Request ID="187" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.ID" /></Request>
+delayedWorkingClient;<Request ID="188" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+delayedWorkingClient;<Request ID="189" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.ID" /></Request>
+delayedWorkingClient;<Request ID="190" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="191" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.IN" /></Request>
+delayedWorkingClient;<Request ID="192" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="193" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.IN" /></Request>
+delayedWorkingClient;<Request ID="194" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="195" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.IN" /></Request>
+delayedWorkingClient;<Request ID="196" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="197" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="198" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="199" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="200" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="201" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="202" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="203" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="204" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="205" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="206" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="207" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="208" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="209" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="210" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="211" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="212" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="213" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="214" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="215" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="216" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU_1" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="217" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_1.PV" /></Request>
+delayedWorkingClient;<Request ID="218" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="219" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="220" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents.check" /></Request>
+delayedWorkingClient;<Request ID="221" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="222" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="223" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_CTU_2" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="224" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_2.PV" /></Request>
+delayedWorkingClient;<Request ID="225" Action="CREATE"><FB Name="RemoteMethods.RemoteNumericMethod.E_SR" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="226" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="227" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_4.IN" /></Request>
+delayedWorkingClient;<Request ID="228" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="229" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=methodHello]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.ID" /></Request>
+delayedWorkingClient;<Request ID="230" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="231" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_2.IN" /></Request>
+delayedWorkingClient;<Request ID="232" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="233" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=methodHello1]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="234" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="235" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="236" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="237" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+delayedWorkingClient;<Request ID="238" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=methodHello2]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.ID" /></Request>
+delayedWorkingClient;<Request ID="239" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+delayedWorkingClient;<Request ID="240" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=methodHello3]" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.ID" /></Request>
+delayedWorkingClient;<Request ID="241" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="242" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_3.IN" /></Request>
+delayedWorkingClient;<Request ID="243" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="244" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_5.IN" /></Request>
+delayedWorkingClient;<Request ID="245" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="246" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_6.IN" /></Request>
+delayedWorkingClient;<Request ID="247" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="248" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="249" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="250" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="251" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="252" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="253" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="254" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="255" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="256" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="257" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteStringMethod.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="258" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="259" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="260" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="261" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="262" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="263" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="264" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="265" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteStringMethod.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="266" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="267" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="268" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteStringMethod.E_CTU_1.PV" /></Request>
+delayedWorkingClient;<Request ID="269" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="270" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="271" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents.check" /></Request>
+delayedWorkingClient;<Request ID="272" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="273" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="274" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="275" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteStringMethod.E_CTU_2.PV" /></Request>
+delayedWorkingClient;<Request ID="276" Action="CREATE"><FB Name="RemoteMethods.RemoteStringMethod.E_SR" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="277" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="278" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.IN" /></Request>
+delayedWorkingClient;<Request ID="279" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="280" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=methodByteStringNodeId1]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.ID" /></Request>
+delayedWorkingClient;<Request ID="281" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="282" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.IN" /></Request>
+delayedWorkingClient;<Request ID="283" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="284" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=methodByteStringNodeId2]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="285" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="286" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="287" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="288" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0" Type="CLIENT_3_0" /></Request>
+delayedWorkingClient;<Request ID="289" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=methodByteStringNodeId3]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.ID" /></Request>
+delayedWorkingClient;<Request ID="290" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2" Type="CLIENT_3_2" /></Request>
+delayedWorkingClient;<Request ID="291" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=methodByteStringNodeId4]" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.ID" /></Request>
+delayedWorkingClient;<Request ID="292" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="293" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.IN" /></Request>
+delayedWorkingClient;<Request ID="294" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="295" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.IN" /></Request>
+delayedWorkingClient;<Request ID="296" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="297" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.IN" /></Request>
+delayedWorkingClient;<Request ID="298" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="299" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="300" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="301" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="302" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="303" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="304" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="305" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="306" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="307" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="308" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="309" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="310" Action="WRITE"><Connection Source="DINT#123456" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="311" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="312" Action="WRITE"><Connection Source="DINT#654321" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="313" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="314" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="315" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="316" Action="WRITE"><Connection Source="UINT#4" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="317" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="318" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU_1" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="319" Action="WRITE"><Connection Source="UINT#9" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_1.PV" /></Request>
+delayedWorkingClient;<Request ID="320" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="321" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="322" Action="WRITE"><Connection Source="0" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents.check" /></Request>
+delayedWorkingClient;<Request ID="323" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2" Type="E_SPLIT" /></Request>
+delayedWorkingClient;<Request ID="324" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="325" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_CTU_2" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="326" Action="WRITE"><Connection Source="UINT#2" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_2.PV" /></Request>
+delayedWorkingClient;<Request ID="327" Action="CREATE"><FB Name="RemoteMethods.RemoteByteStringMethod.E_SR" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="328" Action="CREATE"><FB Name="HandleInit.STEST_END_1" Type="STEST_END" /></Request>
+delayedWorkingClient;<Request ID="329" Action="CREATE"><FB Name="HandleInit.E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+delayedWorkingClient;<Request ID="330" Action="CREATE"><FB Name="HandleInit.F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+delayedWorkingClient;<Request ID="331" Action="CREATE"><FB Name="HandleInit.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+delayedWorkingClient;<Request ID="332" Action="WRITE"><Connection Source="1" Destination="HandleInit.PUBLISH_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="333" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="HandleInit.PUBLISH_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="334" Action="CREATE"><FB Name="PUBLISH_0" Type="PUBLISH_0" /></Request>
+delayedWorkingClient;<Request ID="335" Action="WRITE"><Connection Source="1" Destination="PUBLISH_0.QI" /></Request>
+delayedWorkingClient;<Request ID="336" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="PUBLISH_0.ID" /></Request>
+delayedWorkingClient;<Request ID="337" Action="CREATE"><FB Name="InitFinishedSignal" Type="SUBSCRIBE_0" /></Request>
+delayedWorkingClient;<Request ID="338" Action="WRITE"><Connection Source="1" Destination="InitFinishedSignal.QI" /></Request>
+delayedWorkingClient;<Request ID="339" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="InitFinishedSignal.ID" /></Request>
+delayedWorkingClient;<Request ID="340" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="341" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="342" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="343" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="344" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="345" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="346" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="347" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+delayedWorkingClient;<Request ID="348" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="349" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="350" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="351" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="352" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="353" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="354" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="355" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+delayedWorkingClient;<Request ID="356" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="357" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="358" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="359" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.ID" /></Request>
+delayedWorkingClient;<Request ID="360" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="361" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+delayedWorkingClient;<Request ID="362" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="363" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="364" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="365" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="366" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="367" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+delayedWorkingClient;<Request ID="368" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="369" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+delayedWorkingClient;<Request ID="370" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="371" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="372" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="373" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="374" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="375" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="376" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="377" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="378" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="379" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="380" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="381" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="382" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="383" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="384" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="385" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="386" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="387" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="388" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+delayedWorkingClient;<Request ID="389" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="390" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="391" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="392" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="393" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="394" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="395" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="396" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="397" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="398" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="399" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="400" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="401" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="402" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="403" Action="WRITE"><Connection Source="DINT#123" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="404" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="405" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="406" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.ID" /></Request>
+delayedWorkingClient;<Request ID="407" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="408" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="409" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="410" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="411" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="412" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="413" Action="WRITE"><Connection Source="DINT#789" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="414" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="415" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="416" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingClient;<Request ID="417" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.ID" /></Request>
+delayedWorkingClient;<Request ID="418" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="419" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.ID" /></Request>
+delayedWorkingClient;<Request ID="420" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="421" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="422" Action="WRITE"><Connection Source="DINT#456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="423" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="424" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="425" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="426" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="427" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="428" Action="WRITE"><Connection Source="3" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="429" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="430" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="431" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.IN2" /></Request>
+delayedWorkingClient;<Request ID="432" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="433" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="434" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.IN2" /></Request>
+delayedWorkingClient;<Request ID="435" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="436" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="437" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="438" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.IN2" /></Request>
+delayedWorkingClient;<Request ID="439" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="440" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="441" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="442" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="443" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="444" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="445" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="446" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="447" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="448" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="449" Action="WRITE"><Connection Source="DINT#0" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="450" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="451" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:b=byteStringNodeId3;,1:b=byteStringNodeId4]" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="452" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="453" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="454" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="455" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="456" Action="WRITE"><Connection Source="DINT#654321" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.IN2" /></Request>
+delayedWorkingClient;<Request ID="457" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="458" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="459" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="460" Action="CREATE"><FB Name="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="461" Action="WRITE"><Connection Source="DINT#123456" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="462" Action="CREATE"><FB Name="E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingClient;<Request ID="463" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY.DT" /></Request>
+delayedWorkingClient;<Request ID="464" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="465" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="466" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="467" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="468" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="469" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="470" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="471" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+delayedWorkingClient;<Request ID="472" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="473" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="474" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="475" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="476" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="477" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="478" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.writeString1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="479" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.writeString1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="480" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.writeString1_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="481" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.writeString1_1_1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="482" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="483" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.WriteToVars.Write1.ID" /></Request>
+delayedWorkingClient;<Request ID="484" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="485" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.WriteToVars.Write2.ID" /></Request>
+delayedWorkingClient;<Request ID="486" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write3_1" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="487" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="488" Action="CREATE"><FB Name="stringNodeIdTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="489" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.WriteToVars.Write3.ID" /></Request>
+delayedWorkingClient;<Request ID="490" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="491" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.ReadVars.Read1.ID" /></Request>
+delayedWorkingClient;<Request ID="492" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="493" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.ReadVars.Read2.ID" /></Request>
+delayedWorkingClient;<Request ID="494" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="495" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="496" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="497" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="498" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="499" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="500" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="501" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="502" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="503" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="504" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="505" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="506" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="507" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="508" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="509" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="510" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="511" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="512" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.ReadVars.Read3.ID" /></Request>
+delayedWorkingClient;<Request ID="513" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="514" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="515" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="516" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="517" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="518" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="519" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.Read3_1" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="520" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="521" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="522" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="523" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="524" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="525" Action="CREATE"><FB Name="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="526" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="527" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="528" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="529" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="530" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.ID" /></Request>
+delayedWorkingClient;<Request ID="531" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="532" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="533" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="534" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="535" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="536" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="537" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="538" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="539" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="540" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingClient;<Request ID="541" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.ID" /></Request>
+delayedWorkingClient;<Request ID="542" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="543" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.ID" /></Request>
+delayedWorkingClient;<Request ID="544" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="545" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="546" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="547" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="548" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="549" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="550" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="551" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="552" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN2" /></Request>
+delayedWorkingClient;<Request ID="553" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="554" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="555" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN2" /></Request>
+delayedWorkingClient;<Request ID="556" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="557" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="558" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="559" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN2" /></Request>
+delayedWorkingClient;<Request ID="560" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="561" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="562" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="563" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="564" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="565" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="566" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="567" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="568" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="569" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="570" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="571" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN2" /></Request>
+delayedWorkingClient;<Request ID="572" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="573" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="574" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="575" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="576" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;,1:s=hello3;,1:s=hello4]" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.ID" /></Request>
+delayedWorkingClient;<Request ID="577" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="578" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="579" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="580" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="581" Action="CREATE"><FB Name="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="582" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="583" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="584" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+delayedWorkingClient;<Request ID="585" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="586" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="587" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="588" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="589" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.SubscribeToVars.Subscribe3.ID" /></Request>
+delayedWorkingClient;<Request ID="590" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="591" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="592" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="593" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="594" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="595" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="596" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="597" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="598" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="599" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingClient;<Request ID="600" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.SubscribeToVars.Subscribe1.ID" /></Request>
+delayedWorkingClient;<Request ID="601" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.Subscribe2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingClient;<Request ID="602" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.SubscribeToVars.Subscribe2.ID" /></Request>
+delayedWorkingClient;<Request ID="603" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="604" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_1_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="605" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="606" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="607" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="608" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="609" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="610" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.E_CTU" Type="E_CTU" /></Request>
+delayedWorkingClient;<Request ID="611" Action="WRITE"><Connection Source="3" Destination="folderTestRemote.SubscribeToVars.E_CTU.PV" /></Request>
+delayedWorkingClient;<Request ID="612" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.E_PERMIT" Type="E_PERMIT" /></Request>
+delayedWorkingClient;<Request ID="613" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="614" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.SubscribeToVars.F_EQ_.IN2" /></Request>
+delayedWorkingClient;<Request ID="615" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.folderTestSubscribe5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="616" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_5" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="617" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.IN2" /></Request>
+delayedWorkingClient;<Request ID="618" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="619" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="620" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="621" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.IN2" /></Request>
+delayedWorkingClient;<Request ID="622" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="623" Action="WRITE"><Connection Source="DINT#0" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="624" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="625" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="626" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="627" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="628" Action="CREATE"><FB Name="folderTestRemote.SubscribeToVars.F_OR_1_1_1" Type="F_OR" /></Request>
+delayedWorkingClient;<Request ID="629" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="630" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="631" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="632" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="633" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="634" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="635" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="636" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_2.IN" /></Request>
+delayedWorkingClient;<Request ID="637" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="638" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="639" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.E_SWITCH" Type="E_SWITCH" /></Request>
+delayedWorkingClient;<Request ID="640" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingClient;<Request ID="641" Action="WRITE"><Connection Source="T#1s" Destination="folderTestRemote.WriteToVars.E_DELAY.DT" /></Request>
+delayedWorkingClient;<Request ID="642" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="643" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.WriteToVars.Write1.ID" /></Request>
+delayedWorkingClient;<Request ID="644" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write2" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="645" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.WriteToVars.Write2.ID" /></Request>
+delayedWorkingClient;<Request ID="646" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.Write3" Type="CLIENT_2_0" /></Request>
+delayedWorkingClient;<Request ID="647" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.WriteToVars.Write3.ID" /></Request>
+delayedWorkingClient;<Request ID="648" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.writeDelayedFolder1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="649" Action="CREATE"><FB Name="folderTestRemote.WriteToVars.writeDelayedFolder1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="650" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="651" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTestRemote.ReadVars.Read1.ID" /></Request>
+delayedWorkingClient;<Request ID="652" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read2" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="653" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTestRemote.ReadVars.Read2.ID" /></Request>
+delayedWorkingClient;<Request ID="654" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="655" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="656" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote4" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="657" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="658" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="659" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="660" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote3" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="661" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="662" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="663" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="664" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="665" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="666" Action="WRITE"><Connection Source="DINT#789" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="667" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="668" Action="WRITE"><Connection Source="DINT#123" Destination="folderTestRemote.ReadVars.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="669" Action="CREATE"><FB Name="folderTestRemote.ReadVars.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="670" Action="WRITE"><Connection Source="DINT#456" Destination="folderTestRemote.ReadVars.F_EQ_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="671" Action="CREATE"><FB Name="folderTestRemote.ReadVars.Read3" Type="CLIENT_0_2" /></Request>
+delayedWorkingClient;<Request ID="672" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTestRemote.ReadVars.Read3.ID" /></Request>
+delayedWorkingClient;<Request ID="673" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote5" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="674" Action="CREATE"><FB Name="folderTestRemote.ReadVars.folderTestReadRemote1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="675" Action="CREATE"><FB Name="folderTestRemote.ReadVars.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="676" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="677" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteIsolatedCases.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="678" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="679" Action="WRITE"><Connection Source="DINT#456" Destination="RemoteIsolatedCases.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="680" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="681" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="RemoteIsolatedCases.CLIENT_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="682" Action="CREATE"><FB Name="RemoteIsolatedCases.WRITE_Only_read" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="683" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="684" Action="WRITE"><Connection Source="DINT#123" Destination="RemoteIsolatedCases.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="685" Action="CREATE"><FB Name="RemoteIsolatedCases.READ_Only_read" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="686" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="687" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="688" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="689" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="RemoteIsolatedCases.CLIENT_0_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="690" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0_1_1_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="691" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/noNewFolder]" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="692" Action="CREATE"><FB Name="RemoteIsolatedCases.readNoNewFoler" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="693" Action="CREATE"><FB Name="RemoteIsolatedCases.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="694" Action="CREATE"><FB Name="RemoteIsolatedCases.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="695" Action="WRITE"><Connection Source="DINT#789" Destination="RemoteIsolatedCases.F_EQ_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="696" Action="CREATE"><FB Name="RemoteIsolatedCases.CLIENT_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="697" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/noNewFolderMethod]" Destination="RemoteIsolatedCases.CLIENT_0.ID" /></Request>
+delayedWorkingClient;<Request ID="698" Action="CREATE"><FB Name="RemoteIsolatedCases.methodNoNewFolder" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="699" Action="CREATE"><FB Name="RemoteIsolatedCases.PUBLISH_1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="700" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/IsolatedTests/READVariable]" Destination="RemoteIsolatedCases.PUBLISH_1.ID" /></Request>
+delayedWorkingClient;<Request ID="701" Action="CREATE"><FB Name="RemoteIsolatedCases.writeOnlyWrittableVar" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="702" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="703" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="704" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRootRemote.BOOL2BOOL_2_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="705" Action="CREATE"><FB Name="DirectRootRemote.directRootRead" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="706" Action="CREATE"><FB Name="DirectRootRemote.directRootWrite" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="707" Action="CREATE"><FB Name="DirectRootRemote.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="708" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRootRemote.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="709" Action="CREATE"><FB Name="DirectRootRemote.directRootMethod" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="710" Action="CREATE"><FB Name="DirectRootRemote.directRootRead2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="711" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="712" Action="CREATE"><FB Name="DirectRootRemote.directRootWrite_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="713" Action="CREATE"><FB Name="DirectRootRemote.directRootMethod_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="714" Action="CREATE"><FB Name="DirectRootRemote.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="715" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRootRemote.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="716" Action="CREATE"><FB Name="DirectRootRemote.BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="717" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRootRemote.BOOL2BOOL_2_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="718" Action="CREATE"><FB Name="DirectRootRemote.rootRead" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="719" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:writeVar]" Destination="DirectRootRemote.rootRead.ID" /></Request>
+delayedWorkingClient;<Request ID="720" Action="CREATE"><FB Name="DirectRootRemote.rootRead_2" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="721" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/1:folder2/writeVar]" Destination="DirectRootRemote.rootRead_2.ID" /></Request>
+delayedWorkingClient;<Request ID="722" Action="CREATE"><FB Name="DirectRootRemote.rootRead_1_1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="723" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:folder2/readVar]" Destination="DirectRootRemote.rootRead_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="724" Action="CREATE"><FB Name="DirectRootRemote.rootRead_1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="725" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/1:readVar/]" Destination="DirectRootRemote.rootRead_1.ID" /></Request>
+delayedWorkingClient;<Request ID="726" Action="CREATE"><FB Name="DirectRootRemote.SERVER_0" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="727" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:method]" Destination="DirectRootRemote.SERVER_0.ID" /></Request>
+delayedWorkingClient;<Request ID="728" Action="CREATE"><FB Name="DirectRootRemote.SERVER_0_1" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="729" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/1:folder2/method]" Destination="DirectRootRemote.SERVER_0_1.ID" /></Request>
+delayedWorkingClient;<Request ID="730" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1" Type="CLIENT_1" /></Request>
+delayedWorkingClient;<Request ID="731" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject1/2:TestMethod]" Destination="CreatedObjects.CLIENT_1.ID" /></Request>
+delayedWorkingClient;<Request ID="732" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="733" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="734" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="735" Action="CREATE"><FB Name="CreatedObjects.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="736" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.F_EQ.IN2" /></Request>
+delayedWorkingClient;<Request ID="737" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="738" Action="CREATE"><FB Name="CreatedObjects.remoteVar1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="739" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="740" Action="CREATE"><FB Name="CreatedObjects.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="741" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="742" Action="CREATE"><FB Name="CreatedObjects.remoteVar2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="743" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="744" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="745" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="746" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/testObject1/2:Variable1]" Destination="CreatedObjects.CLIENT_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="747" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="748" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/testObject1/2:Variable2]" Destination="CreatedObjects.CLIENT_1_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="749" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="750" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_1_1" Type="CLIENT_1_0" /></Request>
+delayedWorkingClient;<Request ID="751" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/testObject2/2:Variable2]" Destination="CreatedObjects.CLIENT_1_1_1_1.ID" /></Request>
+delayedWorkingClient;<Request ID="752" Action="CREATE"><FB Name="CreatedObjects.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="753" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="754" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_1_2" Type="CLIENT_0_1" /></Request>
+delayedWorkingClient;<Request ID="755" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/testObject2/2:Variable1]" Destination="CreatedObjects.CLIENT_1_1_2.ID" /></Request>
+delayedWorkingClient;<Request ID="756" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="757" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_1_1_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="758" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="759" Action="CREATE"><FB Name="CreatedObjects.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="760" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.F_EQ_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="761" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="762" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="763" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.DINT2DINT_2.IN" /></Request>
+delayedWorkingClient;<Request ID="764" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_2" Type="CLIENT_1" /></Request>
+delayedWorkingClient;<Request ID="765" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject2/2:TestMethod]" Destination="CreatedObjects.CLIENT_1_2.ID" /></Request>
+delayedWorkingClient;<Request ID="766" Action="CREATE"><FB Name="CreatedObjects.remoteVar1_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="767" Action="CREATE"><FB Name="CreatedObjects.remoteVar2_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="768" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="769" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="770" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="771" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="772" Action="CREATE"><FB Name="CreatedObjects.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="773" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_2_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="774" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_2_1" Type="CLIENT_1" /></Request>
+delayedWorkingClient;<Request ID="775" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject2/2:TestMethod2]" Destination="CreatedObjects.CLIENT_1_2_1.ID" /></Request>
+delayedWorkingClient;<Request ID="776" Action="CREATE"><FB Name="CreatedObjects.remoteObjectMethod1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingClient;<Request ID="777" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="778" Action="WRITE"><Connection Source="DINT#456" Destination="CreatedObjects.DINT2DINT_3.IN" /></Request>
+delayedWorkingClient;<Request ID="779" Action="CREATE"><FB Name="CreatedObjects.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingClient;<Request ID="780" Action="CREATE"><FB Name="CreatedObjects.CLIENT_1_3" Type="CLIENT_1" /></Request>
+delayedWorkingClient;<Request ID="781" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject1/2:TestMethod2]" Destination="CreatedObjects.CLIENT_1_3.ID" /></Request>
+delayedWorkingClient;<Request ID="782" Action="CREATE"><FB Name="CreatedObjects.F_EQ_3" Type="F_EQ" /></Request>
+delayedWorkingClient;<Request ID="783" Action="WRITE"><Connection Source="DINT#123" Destination="CreatedObjects.F_EQ_3.IN2" /></Request>
+delayedWorkingClient;<Request ID="784" Action="CREATE"><FB Name="UnkonwnServer" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="785" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://192.168.0.100:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="UnkonwnServer.ID" /></Request>
+delayedWorkingClient;<Request ID="786" Action="CREATE"><FB Name="UnknownServer2" Type="CLIENT_0" /></Request>
+delayedWorkingClient;<Request ID="787" Action="WRITE"><Connection Source="1" Destination="UnknownServer2.QI" /></Request>
+delayedWorkingClient;<Request ID="788" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://192.168.0.101:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="UnknownServer2.ID" /></Request>
+delayedWorkingClient;<Request ID="789" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="790" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="791" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="792" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="793" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.E_SWITCH.EO0" Destination="numericNodeIdTestRemote.WriteToVars.E_DELAY.START" /></Request>
+delayedWorkingClient;<Request ID="794" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="795" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="796" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+delayedWorkingClient;<Request ID="797" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+delayedWorkingClient;<Request ID="798" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.E_SWITCH.EO1" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="799" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+delayedWorkingClient;<Request ID="800" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.REQ" /></Request>
+delayedWorkingClient;<Request ID="801" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.E_DELAY.EO" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.REQ" /></Request>
+delayedWorkingClient;<Request ID="802" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3Numeric.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="803" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3Numeric.CNF" Destination="numericNodeIdTestRemote.WriteToVars.E_SWITCH.EI" /></Request>
+delayedWorkingClient;<Request ID="804" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+delayedWorkingClient;<Request ID="805" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="806" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+delayedWorkingClient;<Request ID="807" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+delayedWorkingClient;<Request ID="808" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="809" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1.REQ" /></Request>
+delayedWorkingClient;<Request ID="810" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="811" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="812" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="813" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="814" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+delayedWorkingClient;<Request ID="815" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.SD_1" /></Request>
+delayedWorkingClient;<Request ID="816" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.SD_2" /></Request>
+delayedWorkingClient;<Request ID="817" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3Numeric.QO" Destination="numericNodeIdTestRemote.WriteToVars.E_SWITCH.G" /></Request>
+delayedWorkingClient;<Request ID="818" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write1.QO" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="819" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write2.QO" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1_1.check" /></Request>
+delayedWorkingClient;<Request ID="820" Action="CREATE"><Connection Source="numericNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="numericNodeIdTestRemote.WriteToVars.writeDelayedNumeric1.check" /></Request>
+delayedWorkingClient;<Request ID="821" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+delayedWorkingClient;<Request ID="822" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+delayedWorkingClient;<Request ID="823" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+delayedWorkingClient;<Request ID="824" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="825" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="826" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.REQ" /></Request>
+delayedWorkingClient;<Request ID="827" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="828" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="829" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.REQ" /></Request>
+delayedWorkingClient;<Request ID="830" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.REQ" /></Request>
+delayedWorkingClient;<Request ID="831" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+delayedWorkingClient;<Request ID="832" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="833" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="834" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="835" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.REQ" /></Request>
+delayedWorkingClient;<Request ID="836" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="837" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="838" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.REQ" /></Request>
+delayedWorkingClient;<Request ID="839" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="840" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INIT" /></Request>
+delayedWorkingClient;<Request ID="841" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.INITO" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="842" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="843" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="844" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="845" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.REQ" /></Request>
+delayedWorkingClient;<Request ID="846" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.REQ" /></Request>
+delayedWorkingClient;<Request ID="847" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.CNF" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="848" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="849" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.CNF" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="850" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+delayedWorkingClient;<Request ID="851" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="852" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="853" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="854" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4.check" /></Request>
+delayedWorkingClient;<Request ID="855" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="856" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="857" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5.check" /></Request>
+delayedWorkingClient;<Request ID="858" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote3.check" /></Request>
+delayedWorkingClient;<Request ID="859" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="860" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="861" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="862" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote2.check" /></Request>
+delayedWorkingClient;<Request ID="863" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="864" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote1.check" /></Request>
+delayedWorkingClient;<Request ID="865" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="866" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="867" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="868" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="869" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote4_NBN.check" /></Request>
+delayedWorkingClient;<Request ID="870" Action="CREATE"><Connection Source="numericNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.ReadVars.numericTestReadRemote5_NBN.check" /></Request>
+delayedWorkingClient;<Request ID="871" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INIT" /></Request>
+delayedWorkingClient;<Request ID="872" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="873" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INIT" /></Request>
+delayedWorkingClient;<Request ID="874" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="875" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="876" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="877" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="878" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.REQ" /></Request>
+delayedWorkingClient;<Request ID="879" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="880" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="881" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1.REQ" /></Request>
+delayedWorkingClient;<Request ID="882" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3.REQ" /></Request>
+delayedWorkingClient;<Request ID="883" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2.REQ" /></Request>
+delayedWorkingClient;<Request ID="884" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="885" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.REQ" /></Request>
+delayedWorkingClient;<Request ID="886" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="887" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="888" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="889" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="890" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4.REQ" /></Request>
+delayedWorkingClient;<Request ID="891" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="892" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="893" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="894" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5.REQ" /></Request>
+delayedWorkingClient;<Request ID="895" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.REQ" /></Request>
+delayedWorkingClient;<Request ID="896" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="897" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="898" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="899" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="900" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="901" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="902" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.IND" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="903" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.REQ" /></Request>
+delayedWorkingClient;<Request ID="904" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="905" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="906" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="907" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="908" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="909" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INITO" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="910" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="911" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="912" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="913" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="914" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="915" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="916" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="917" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="918" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN1" /></Request>
+delayedWorkingClient;<Request ID="919" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN1" /></Request>
+delayedWorkingClient;<Request ID="920" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="921" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="922" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="923" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.IN2" /></Request>
+delayedWorkingClient;<Request ID="924" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.IN1" /></Request>
+delayedWorkingClient;<Request ID="925" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe1.check" /></Request>
+delayedWorkingClient;<Request ID="926" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="927" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="928" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="929" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe2.check" /></Request>
+delayedWorkingClient;<Request ID="930" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe3.check" /></Request>
+delayedWorkingClient;<Request ID="931" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4.check" /></Request>
+delayedWorkingClient;<Request ID="932" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="933" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="934" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5.check" /></Request>
+delayedWorkingClient;<Request ID="935" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="936" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="937" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN1" /></Request>
+delayedWorkingClient;<Request ID="938" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="939" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="940" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="941" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="942" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN1" /></Request>
+delayedWorkingClient;<Request ID="943" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="944" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="945" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_1" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="946" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="947" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_2" Destination="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="948" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe4_1.check" /></Request>
+delayedWorkingClient;<Request ID="949" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="950" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="951" Action="CREATE"><Connection Source="numericNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.OUT" Destination="numericNodeIdTestRemote.SubscribeToVars_1.numericIdTestSubscribe5_1.check" /></Request>
+delayedWorkingClient;<Request ID="952" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="953" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="954" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="955" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="956" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="957" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="958" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="959" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="960" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="961" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="962" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="963" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_7.REQ" /></Request>
+delayedWorkingClient;<Request ID="964" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_1.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="965" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_8.REQ" /></Request>
+delayedWorkingClient;<Request ID="966" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_2.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="967" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="968" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="969" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_6.REQ" /></Request>
+delayedWorkingClient;<Request ID="970" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="971" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="972" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.CNF" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="973" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT.CNF" Destination="RemoteMethods.RemoteBrowseName.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="974" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="975" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT.EO1" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="976" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="977" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.CUO" Destination="RemoteMethods.RemoteBrowseName.E_CTU_1.CU" /></Request>
+delayedWorkingClient;<Request ID="978" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="979" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_1.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="980" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteBrowseName.RemoteBrowseManyEvents.REQ" /></Request>
+delayedWorkingClient;<Request ID="981" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="982" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT.EO2" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="983" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="984" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="985" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.CNF" Destination="RemoteMethods.RemoteBrowseName.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="986" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_4.REQ" /></Request>
+delayedWorkingClient;<Request ID="987" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT.EI" /></Request>
+delayedWorkingClient;<Request ID="988" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="989" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT.EO" Destination="RemoteMethods.RemoteBrowseName.E_CTU_2.CU" /></Request>
+delayedWorkingClient;<Request ID="990" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_2.CUO" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="991" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="992" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_PERMIT.EO" Destination="RemoteMethods.RemoteBrowseName.E_SR.S" /></Request>
+delayedWorkingClient;<Request ID="993" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SR.EO" Destination="RemoteMethods.RemoteBrowseName.E_CTU.R" /></Request>
+delayedWorkingClient;<Request ID="994" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_SR.EO" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="995" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_2" /></Request>
+delayedWorkingClient;<Request ID="996" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="997" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_1" /></Request>
+delayedWorkingClient;<Request ID="998" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.SD_3" /></Request>
+delayedWorkingClient;<Request ID="999" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,000" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,001" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_7.IN" /></Request>
+delayedWorkingClient;<Request ID="1,002" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteBrowseName.DINT2DINT_8.IN" /></Request>
+delayedWorkingClient;<Request ID="1,003" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,004" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,005" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,006" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_0_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,007" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,008" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_0_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,009" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,010" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteBrowseName.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,011" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_1.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,012" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.F_EQ_2.OUT" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,013" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteBrowseName.RemoteMethodBrowse_3_2_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,014" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,015" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_1.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_1.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,016" Action="CREATE"><Connection Source="RemoteMethods.RemoteBrowseName.E_CTU_2.Q" Destination="RemoteMethods.RemoteBrowseName.E_PERMIT_2.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,017" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,018" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,019" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,020" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,021" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,022" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,023" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,024" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,025" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,026" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,027" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,028" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,029" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,030" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,031" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,032" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,033" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,034" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,035" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,036" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,037" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,038" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,039" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,040" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,041" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,042" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_1.CU" /></Request>
+delayedWorkingClient;<Request ID="1,043" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,044" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,045" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumericManyEvents.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,046" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,047" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,048" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,049" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,050" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.CNF" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,051" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,052" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,053" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,054" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU_2.CU" /></Request>
+delayedWorkingClient;<Request ID="1,055" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,056" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,057" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SR.S" /></Request>
+delayedWorkingClient;<Request ID="1,058" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SR.EO" Destination="RemoteMethods.RemoteNumericMethod.E_CTU.R" /></Request>
+delayedWorkingClient;<Request ID="1,059" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_SR.EO" Destination="RemoteMethods.RemoteNumericMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,060" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,061" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="1,062" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,063" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,064" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,065" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,066" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.IN" /></Request>
+delayedWorkingClient;<Request ID="1,067" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.IN" /></Request>
+delayedWorkingClient;<Request ID="1,068" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,069" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,070" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,071" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_0_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,072" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,073" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_0_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,074" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,075" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteNumericMethod.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,076" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,077" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,078" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteNumericMethod.RemoteNumeric_3_2_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,079" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,080" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_1.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,081" Action="CREATE"><Connection Source="RemoteMethods.RemoteNumericMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteNumericMethod.E_PERMIT_2.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,082" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,083" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,084" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,085" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,086" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,087" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,088" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,089" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,090" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,091" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,092" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,093" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_7.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,094" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,095" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_8.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,096" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,097" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,098" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,099" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_6.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,100" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,101" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,102" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.CNF" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,103" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteStringMethod.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,104" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,105" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,106" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,107" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteStringMethod.E_CTU_1.CU" /></Request>
+delayedWorkingClient;<Request ID="1,108" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,109" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,110" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteStringMethod.RemoteStringManyEvents.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,111" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,112" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,113" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,114" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,115" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.CNF" Destination="RemoteMethods.RemoteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,116" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,117" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,118" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,119" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteStringMethod.E_CTU_2.CU" /></Request>
+delayedWorkingClient;<Request ID="1,120" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,121" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT_2.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,122" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteStringMethod.E_SR.S" /></Request>
+delayedWorkingClient;<Request ID="1,123" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteStringMethod.E_CTU.R" /></Request>
+delayedWorkingClient;<Request ID="1,124" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteStringMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,125" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,126" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="1,127" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,128" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,129" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,130" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,131" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_7.IN" /></Request>
+delayedWorkingClient;<Request ID="1,132" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteStringMethod.DINT2DINT_8.IN" /></Request>
+delayedWorkingClient;<Request ID="1,133" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,134" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,135" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,136" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_0_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,137" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,138" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_0_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,139" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,140" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteStringMethod.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,141" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,142" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,143" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteStringMethod.RemoteString_3_2_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,144" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,145" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,146" Action="CREATE"><Connection Source="RemoteMethods.RemoteStringMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,147" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,148" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,149" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,150" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,151" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.INITO" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,152" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.INITO" Destination="RemoteIsolatedCases.PUBLISH_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,153" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,154" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,155" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,156" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,157" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,158" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,159" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,160" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,161" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,162" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,163" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,164" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,165" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.CNF" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,166" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,167" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,168" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT.CNF" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,169" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.CNF" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,170" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EO1" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,171" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,172" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_1.CU" /></Request>
+delayedWorkingClient;<Request ID="1,173" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,174" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_1.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,175" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.EO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStringManyEvents.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,176" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,177" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EO2" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,178" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,179" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EO1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,180" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.CNF" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.CU" /></Request>
+delayedWorkingClient;<Request ID="1,181" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EO2" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,182" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EO1" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,183" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EO2" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,184" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU_2.CU" /></Request>
+delayedWorkingClient;<Request ID="1,185" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_2.CUO" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,186" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.EO" Destination="RemoteIsolatedCases.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,187" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_PERMIT.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SR.S" /></Request>
+delayedWorkingClient;<Request ID="1,188" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_CTU.R" /></Request>
+delayedWorkingClient;<Request ID="1,189" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_SR.EO" Destination="RemoteMethods.RemoteByteStringMethod.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,190" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_2.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,191" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.RD_1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT.IN" /></Request>
+delayedWorkingClient;<Request ID="1,192" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_1.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,193" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_3.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,194" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_4.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,195" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_5.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,196" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.RD_1" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.IN" /></Request>
+delayedWorkingClient;<Request ID="1,197" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.RD_2" Destination="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.IN" /></Request>
+delayedWorkingClient;<Request ID="1,198" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_6.OUT" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.SD_3" /></Request>
+delayedWorkingClient;<Request ID="1,199" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,200" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,201" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_0_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,202" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,203" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_0_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,204" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_7.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,205" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.DINT2DINT_8.OUT" Destination="RemoteMethods.RemoteByteStringMethod.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,206" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_1.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,207" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.F_EQ_2.OUT" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteString_3_2_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,208" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.QO" Destination="RemoteMethods.RemoteByteStringMethod.RemoteByteStrin_3_2_0.check" /></Request>
+delayedWorkingClient;<Request ID="1,209" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,210" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_1.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,211" Action="CREATE"><Connection Source="RemoteMethods.RemoteByteStringMethod.E_CTU_2.Q" Destination="RemoteMethods.RemoteByteStringMethod.E_PERMIT_2.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,212" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.CNF" Destination="HandleInit.E_DEMUX_2_1.EI" /></Request>
+delayedWorkingClient;<Request ID="1,213" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO1" Destination="HandleInit.PUBLISH_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,214" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.INITO" Destination="HandleInit.PUBLISH_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,215" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO2" Destination="E_DELAY.START" /></Request>
+delayedWorkingClient;<Request ID="1,216" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.CNF" Destination="HandleInit.STEST_END_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,217" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.OUT" Destination="HandleInit.E_DEMUX_2_1.K" /></Request>
+delayedWorkingClient;<Request ID="1,218" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,219" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,220" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,221" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,222" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,223" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,224" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,225" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,226" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,227" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,228" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,229" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,230" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,231" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,232" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,233" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,234" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,235" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,236" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,237" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,238" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,239" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,240" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,241" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,242" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,243" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,244" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1.check" /></Request>
+delayedWorkingClient;<Request ID="1,245" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write3.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,246" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write2.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,247" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.WriteToVars.Write1.QO" Destination="bytestringNodeIdTestRemote.WriteToVars.writeBytestringDelay1_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,248" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,249" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,250" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,251" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,252" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,253" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,254" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,255" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,256" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,257" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,258" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,259" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,260" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,261" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,262" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,263" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,264" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,265" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,266" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,267" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,268" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,269" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,270" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,271" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,272" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,273" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,274" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.INITO" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,275" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.CNF" Destination="RemoteMethods.RemoteBrowseName.E_SPLIT_2.EI" /></Request>
+delayedWorkingClient;<Request ID="1,276" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.CNF" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,277" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,278" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,279" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,280" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,281" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4.check" /></Request>
+delayedWorkingClient;<Request ID="1,282" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,283" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,284" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5.check" /></Request>
+delayedWorkingClient;<Request ID="1,285" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote3.check" /></Request>
+delayedWorkingClient;<Request ID="1,286" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,287" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,288" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,289" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote2.check" /></Request>
+delayedWorkingClient;<Request ID="1,290" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,291" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote1.check" /></Request>
+delayedWorkingClient;<Request ID="1,292" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,293" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,294" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote4_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,295" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,296" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.ReadVars.bytestringTestReadRemote5_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,297" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="bytestringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,298" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,299" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,300" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,301" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,302" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,303" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,304" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,305" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.CUO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,306" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,307" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,308" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,309" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,310" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,311" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,312" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,313" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,314" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,315" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,316" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,317" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,318" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,319" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,320" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,321" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,322" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,323" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,324" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,325" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,326" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,327" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,328" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,329" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,330" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,331" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,332" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,333" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,334" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.IND" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,335" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.CNF" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,336" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.INITO" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,337" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.INITO" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,338" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,339" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,340" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,341" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,342" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,343" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,344" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,345" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,346" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.E_CTU.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,347" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,348" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,349" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,350" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,351" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,352" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,353" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,354" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe1.check" /></Request>
+delayedWorkingClient;<Request ID="1,355" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,356" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,357" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,358" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe2.check" /></Request>
+delayedWorkingClient;<Request ID="1,359" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe3.check" /></Request>
+delayedWorkingClient;<Request ID="1,360" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4.check" /></Request>
+delayedWorkingClient;<Request ID="1,361" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,362" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,363" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5.check" /></Request>
+delayedWorkingClient;<Request ID="1,364" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,365" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,366" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,367" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_2_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,368" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,369" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,370" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,371" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,372" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.RD_2" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,373" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe5_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,374" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_5_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,375" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.RD_1" Destination="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,376" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,377" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,378" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,379" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.bytestringIdTestSubscribe4_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,380" Action="CREATE"><Connection Source="bytestringNodeIdTestRemote.SubscribeToVars.F_EQ__2.OUT" Destination="bytestringNodeIdTestRemote.SubscribeToVars.F_OR_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,381" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,382" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,383" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,384" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,385" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,386" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,387" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,388" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,389" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,390" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.writeString1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,391" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,392" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.writeString1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,393" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.INITO" Destination="stringNodeIdTestRemote.WriteToVars.Write2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,394" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.writeString1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,395" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.CNF" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,396" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.writeString1_1_1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.Write1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,397" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.CNF" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,398" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.writeString1_1_1_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,399" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.CNF" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,400" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,401" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,402" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,403" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,404" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,405" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3_1.QO" Destination="stringNodeIdTestRemote.WriteToVars.writeString1.check" /></Request>
+delayedWorkingClient;<Request ID="1,406" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,407" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.WriteToVars.Write3.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,408" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write3.QO" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,409" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write2.QO" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,410" Action="CREATE"><Connection Source="stringNodeIdTestRemote.WriteToVars.Write1.QO" Destination="stringNodeIdTestRemote.WriteToVars.writeString1_1_1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,411" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,412" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,413" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,414" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,415" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,416" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,417" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,418" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,419" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,420" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,421" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,422" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,423" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,424" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,425" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,426" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,427" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,428" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,429" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_2.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,430" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,431" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,432" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,433" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,434" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,435" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.CNF" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,436" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,437" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.INITO" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,438" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.CNF" Destination="bytestringNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,439" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.CNF" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,440" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read1.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,441" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,442" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read2.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,443" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,444" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4.check" /></Request>
+delayedWorkingClient;<Request ID="1,445" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,446" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,447" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5.check" /></Request>
+delayedWorkingClient;<Request ID="1,448" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote3.check" /></Request>
+delayedWorkingClient;<Request ID="1,449" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,450" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,451" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,452" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote2.check" /></Request>
+delayedWorkingClient;<Request ID="1,453" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,454" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_2.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote1.check" /></Request>
+delayedWorkingClient;<Request ID="1,455" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.RD_1" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,456" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.Read3_1.RD_2" Destination="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,457" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote4_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,458" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.stringTestReadRemote5_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,459" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,460" Action="CREATE"><Connection Source="stringNodeIdTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.ReadVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,461" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,462" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,463" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,464" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,465" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,466" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,467" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,468" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,469" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,470" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,471" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,472" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,473" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,474" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,475" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,476" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,477" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,478" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,479" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,480" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,481" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,482" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,483" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,484" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,485" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,486" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,487" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,488" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,489" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.IND" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,490" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,491" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,492" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,493" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,494" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,495" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,496" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,497" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.CNF" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,498" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INITO" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,499" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.INITO" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,500" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,501" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,502" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,503" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,504" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,505" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,506" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,507" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,508" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,509" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,510" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,511" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,512" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,513" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,514" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,515" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe1.check" /></Request>
+delayedWorkingClient;<Request ID="1,516" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,517" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,518" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,519" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe2.check" /></Request>
+delayedWorkingClient;<Request ID="1,520" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe3.check" /></Request>
+delayedWorkingClient;<Request ID="1,521" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4.check" /></Request>
+delayedWorkingClient;<Request ID="1,522" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,523" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,524" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5.check" /></Request>
+delayedWorkingClient;<Request ID="1,525" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,526" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,527" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,528" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_2_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,529" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,530" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,531" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,532" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,533" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,534" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe5_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,535" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_2" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,536" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ__2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,537" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.RD_1" Destination="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,538" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_3_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_2_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,539" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.stringIdTestSubscribe4_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,540" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_1_1_1_1_1_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_OR_1_1_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,541" Action="CREATE"><Connection Source="stringNodeIdTestRemote.SubscribeToVars_1.BOOL2BOOL_1_1_1_1_2_1_1.OUT" Destination="stringNodeIdTestRemote.SubscribeToVars_1.F_EQ_5_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,542" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,543" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,544" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,545" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,546" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.IND" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,547" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,548" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,549" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.INITO" Destination="UnkonwnServer.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,550" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.E_CTU.CUO" Destination="folderTestRemote.SubscribeToVars.E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,551" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,552" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,553" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,554" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,555" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_2.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,556" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,557" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,558" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,559" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,560" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,561" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,562" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,563" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,564" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,565" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,566" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,567" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1_1.CNF" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,568" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,569" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_.CNF" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,570" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5.CNF" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,571" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,572" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,573" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe3.RD_2" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,574" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,575" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe1.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,576" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.RD_1" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,577" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.Subscribe2.RD_2" Destination="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,578" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,579" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.E_CTU.Q" Destination="folderTestRemote.SubscribeToVars.E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,580" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_5.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,581" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ__1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,582" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_5_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,583" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ__1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,584" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,585" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,586" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,587" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe1.check" /></Request>
+delayedWorkingClient;<Request ID="1,588" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_2.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,589" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ__1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,590" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,591" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe2.check" /></Request>
+delayedWorkingClient;<Request ID="1,592" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_2.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe3.check" /></Request>
+delayedWorkingClient;<Request ID="1,593" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe4.check" /></Request>
+delayedWorkingClient;<Request ID="1,594" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,595" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,596" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_OR_1_1_1.OUT" Destination="folderTestRemote.SubscribeToVars.folderTestSubscribe5.check" /></Request>
+delayedWorkingClient;<Request ID="1,597" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,598" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_5.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_1_1_1.IN2" /></Request>
+delayedWorkingClient;<Request ID="1,599" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,600" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.F_EQ_1_1_2_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_OR_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,601" Action="CREATE"><Connection Source="folderTestRemote.SubscribeToVars.BOOL2BOOL_1_1_1_3_1.OUT" Destination="folderTestRemote.SubscribeToVars.F_EQ_1_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,602" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,603" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,604" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,605" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_2.CNF" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,606" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.E_SWITCH.EO0" Destination="folderTestRemote.WriteToVars.E_DELAY.START" /></Request>
+delayedWorkingClient;<Request ID="1,607" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.INITO" Destination="folderTestRemote.ReadVars.Read1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,608" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.E_SWITCH.EO1" Destination="folderTestRemote.WriteToVars.Write2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,609" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.INITO" Destination="folderTestRemote.WriteToVars.Write1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,610" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.CNF" Destination="folderTestRemote.WriteToVars.Write3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,611" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.E_DELAY.EO" Destination="folderTestRemote.WriteToVars.Write3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,612" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.INITO" Destination="folderTestRemote.WriteToVars.Write2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,613" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.CNF" Destination="folderTestRemote.WriteToVars.E_SWITCH.EI" /></Request>
+delayedWorkingClient;<Request ID="1,614" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.writeDelayedFolder1.CNF" Destination="folderTestRemote.WriteToVars.Write1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,615" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.CNF" Destination="folderTestRemote.WriteToVars.writeDelayedFolder1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,616" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.writeDelayedFolder1_1.CNF" Destination="folderTestRemote.ReadVars.Read1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,617" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.CNF" Destination="folderTestRemote.WriteToVars.writeDelayedFolder1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,618" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_2.OUT" Destination="folderTestRemote.WriteToVars.Write1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,619" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,620" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write2.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,621" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_2.OUT" Destination="folderTestRemote.WriteToVars.Write3.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,622" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.BOOL2BOOL_1_1_1_1_1.OUT" Destination="folderTestRemote.WriteToVars.Write3.SD_2" /></Request>
+delayedWorkingClient;<Request ID="1,623" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write3.QO" Destination="folderTestRemote.WriteToVars.E_SWITCH.G" /></Request>
+delayedWorkingClient;<Request ID="1,624" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write2.QO" Destination="folderTestRemote.WriteToVars.writeDelayedFolder1.check" /></Request>
+delayedWorkingClient;<Request ID="1,625" Action="CREATE"><Connection Source="folderTestRemote.WriteToVars.Write1.QO" Destination="folderTestRemote.WriteToVars.writeDelayedFolder1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,626" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.INITO" Destination="folderTestRemote.ReadVars.Read2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,627" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,628" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote1.CNF" Destination="folderTestRemote.ReadVars.Read2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,629" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.INITO" Destination="folderTestRemote.ReadVars.Read3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,630" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,631" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,632" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote4.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,633" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote4.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,634" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,635" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote5.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,636" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,637" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote3.CNF" Destination="folderTestRemote.ReadVars.Read3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,638" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,639" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,640" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.CNF" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,641" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,642" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote2.CNF" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,643" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_3.CNF" Destination="folderTestRemote.ReadVars.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,644" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_2.CNF" Destination="folderTestRemote.ReadVars.folderTestReadRemote1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,645" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.INITO" Destination="folderTestRemote.SubscribeToVars.Subscribe1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,646" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.folderTestReadRemote5.CNF" Destination="numericNodeIdTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,647" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read1.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,648" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,649" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read2.RD_2" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,650" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,651" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote4.check" /></Request>
+delayedWorkingClient;<Request ID="1,652" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,653" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,654" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_1_1_1.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote5.check" /></Request>
+delayedWorkingClient;<Request ID="1,655" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote3.check" /></Request>
+delayedWorkingClient;<Request ID="1,656" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_1_1_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_1_1_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,657" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.RD_2" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,658" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.Read3.RD_1" Destination="folderTestRemote.ReadVars.BOOL2BOOL_1_1_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,659" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_1_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote2.check" /></Request>
+delayedWorkingClient;<Request ID="1,660" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.BOOL2BOOL_3.OUT" Destination="folderTestRemote.ReadVars.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,661" Action="CREATE"><Connection Source="folderTestRemote.ReadVars.F_EQ_2.OUT" Destination="folderTestRemote.ReadVars.folderTestReadRemote1.check" /></Request>
+delayedWorkingClient;<Request ID="1,662" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,663" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,664" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_1.CNF" Destination="RemoteIsolatedCases.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,665" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ.CNF" Destination="RemoteIsolatedCases.WRITE_Only_read.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,666" Action="CREATE"><Connection Source="RemoteIsolatedCases.WRITE_Only_read.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,667" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,668" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1.CNF" Destination="RemoteIsolatedCases.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,669" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1.CNF" Destination="RemoteIsolatedCases.READ_Only_read.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,670" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1_1.CNF" Destination="RemoteIsolatedCases.readNoNewFoler.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,671" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_2.CNF" Destination="RemoteIsolatedCases.F_EQ_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,672" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.CNF" Destination="RemoteIsolatedCases.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,673" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,674" Action="CREATE"><Connection Source="RemoteIsolatedCases.READ_Only_read.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,675" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.INITO" Destination="DirectRootRemote.rootRead.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,676" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,677" Action="CREATE"><Connection Source="RemoteIsolatedCases.readNoNewFoler.CNF" Destination="RemoteIsolatedCases.CLIENT_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,678" Action="CREATE"><Connection Source="RemoteIsolatedCases.methodNoNewFolder.CNF" Destination="DirectRootRemote.rootRead.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,679" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.CNF" Destination="RemoteIsolatedCases.methodNoNewFolder.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,680" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT.CNF" Destination="RemoteIsolatedCases.PUBLISH_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,681" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.INITO" Destination="RemoteIsolatedCases.CLIENT_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,682" Action="CREATE"><Connection Source="RemoteIsolatedCases.writeOnlyWrittableVar.CNF" Destination="RemoteIsolatedCases.CLIENT_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,683" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.CNF" Destination="RemoteIsolatedCases.writeOnlyWrittableVar.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,684" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,685" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,686" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1.OUT" Destination="RemoteIsolatedCases.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,687" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1.OUT" Destination="RemoteIsolatedCases.READ_Only_read.check" /></Request>
+delayedWorkingClient;<Request ID="1,688" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_1.OUT" Destination="RemoteIsolatedCases.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,689" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ.OUT" Destination="RemoteIsolatedCases.WRITE_Only_read.check" /></Request>
+delayedWorkingClient;<Request ID="1,690" Action="CREATE"><Connection Source="RemoteIsolatedCases.F_EQ_1_1.OUT" Destination="RemoteIsolatedCases.readNoNewFoler.check" /></Request>
+delayedWorkingClient;<Request ID="1,691" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0_1_1_1.RD_1" Destination="RemoteIsolatedCases.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,692" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT_1_2.OUT" Destination="RemoteIsolatedCases.F_EQ_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,693" Action="CREATE"><Connection Source="RemoteIsolatedCases.CLIENT_0.QO" Destination="RemoteIsolatedCases.methodNoNewFolder.check" /></Request>
+delayedWorkingClient;<Request ID="1,694" Action="CREATE"><Connection Source="RemoteIsolatedCases.DINT2DINT.OUT" Destination="RemoteIsolatedCases.PUBLISH_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,695" Action="CREATE"><Connection Source="RemoteIsolatedCases.PUBLISH_1.QO" Destination="RemoteIsolatedCases.writeOnlyWrittableVar.check" /></Request>
+delayedWorkingClient;<Request ID="1,696" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1.CNF" Destination="DirectRootRemote.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,697" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ.CNF" Destination="DirectRootRemote.directRootRead.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,698" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_2.CNF" Destination="DirectRootRemote.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,699" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ_1.CNF" Destination="DirectRootRemote.directRootRead2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,700" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.INITO" Destination="DirectRootRemote.rootRead_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,701" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1_1.CNF" Destination="DirectRootRemote.rootRead_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,702" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.CNF" Destination="DirectRootRemote.directRootWrite_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,703" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.INITO" Destination="DirectRootRemote.rootRead_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,704" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1.CNF" Destination="DirectRootRemote.rootRead_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,705" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.CNF" Destination="DirectRootRemote.directRootWrite.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,706" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.INITO" Destination="DirectRootRemote.rootRead_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,707" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,708" Action="CREATE"><Connection Source="DirectRootRemote.directRootWrite.CNF" Destination="DirectRootRemote.SERVER_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,709" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.INITO" Destination="DirectRootRemote.SERVER_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,710" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.CNF" Destination="DirectRootRemote.directRootMethod.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,711" Action="CREATE"><Connection Source="DirectRootRemote.directRootMethod.CNF" Destination="DirectRootRemote.rootRead_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,712" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,713" Action="CREATE"><Connection Source="DirectRootRemote.directRootRead.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,714" Action="CREATE"><Connection Source="DirectRootRemote.directRootWrite_1.CNF" Destination="DirectRootRemote.SERVER_0_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,715" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.INITO" Destination="DirectRootRemote.SERVER_0_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,716" Action="CREATE"><Connection Source="DirectRootRemote.directRootRead2.CNF" Destination="DirectRootRemote.BOOL2BOOL_2_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,717" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.CNF" Destination="DirectRootRemote.directRootMethod_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,718" Action="CREATE"><Connection Source="DirectRootRemote.directRootMethod_1.CNF" Destination="CreatedObjects.DINT2DINT.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,719" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.INITO" Destination="CreatedObjects.CLIENT_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,720" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1.OUT" Destination="DirectRootRemote.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,721" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ.OUT" Destination="DirectRootRemote.directRootRead.check" /></Request>
+delayedWorkingClient;<Request ID="1,722" Action="CREATE"><Connection Source="DirectRootRemote.F_EQ_1.OUT" Destination="DirectRootRemote.directRootRead2.check" /></Request>
+delayedWorkingClient;<Request ID="1,723" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_2.OUT" Destination="DirectRootRemote.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,724" Action="CREATE"><Connection Source="DirectRootRemote.rootRead.RD_1" Destination="DirectRootRemote.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,725" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_2.RD_1" Destination="DirectRootRemote.BOOL2BOOL_2_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,726" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1_1.OUT" Destination="DirectRootRemote.rootRead_1_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,727" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1_1.QO" Destination="DirectRootRemote.directRootWrite_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,728" Action="CREATE"><Connection Source="DirectRootRemote.BOOL2BOOL_2_1_1.OUT" Destination="DirectRootRemote.rootRead_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,729" Action="CREATE"><Connection Source="DirectRootRemote.rootRead_1.QO" Destination="DirectRootRemote.directRootWrite.check" /></Request>
+delayedWorkingClient;<Request ID="1,730" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0.QO" Destination="DirectRootRemote.directRootMethod.check" /></Request>
+delayedWorkingClient;<Request ID="1,731" Action="CREATE"><Connection Source="DirectRootRemote.SERVER_0_1.QO" Destination="DirectRootRemote.directRootMethod_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,732" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.CNF" Destination="CreatedObjects.DINT2DINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,733" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT.CNF" Destination="CreatedObjects.CLIENT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,734" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1.CNF" Destination="CreatedObjects.F_EQ.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,735" Action="CREATE"><Connection Source="CreatedObjects.F_EQ.CNF" Destination="CreatedObjects.remoteObjectMethod1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,736" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1.CNF" Destination="CreatedObjects.F_EQ_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,737" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1.CNF" Destination="CreatedObjects.remoteVar1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,738" Action="CREATE"><Connection Source="CreatedObjects.remoteVar1_1.CNF" Destination="CreatedObjects.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,739" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.CNF" Destination="CreatedObjects.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,740" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.INITO" Destination="CreatedObjects.CLIENT_1_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,741" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1.CNF" Destination="CreatedObjects.CLIENT_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,742" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.CNF" Destination="CreatedObjects.remoteVar2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,743" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.INITO" Destination="CreatedObjects.CLIENT_1_1_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,744" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1_1.CNF" Destination="CreatedObjects.remoteVar1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,745" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,746" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2.CNF" Destination="CreatedObjects.remoteObjectMethod2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,747" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1_1.CNF" Destination="CreatedObjects.CLIENT_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,748" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,749" Action="CREATE"><Connection Source="CreatedObjects.remoteVar1_2.CNF" Destination="CreatedObjects.DINT2DINT_1_1_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,750" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2.CNF" Destination="CreatedObjects.F_EQ_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,751" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_2.CNF" Destination="CreatedObjects.F_EQ_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,752" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2.CNF" Destination="CreatedObjects.CLIENT_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,753" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.CNF" Destination="CreatedObjects.remoteVar2_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,754" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.INITO" Destination="CreatedObjects.CLIENT_1_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,755" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.INITO" Destination="UnknownServer2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,756" Action="CREATE"><Connection Source="CreatedObjects.remoteVar2_2.CNF" Destination="E_SR_1.R" /></Request>
+delayedWorkingClient;<Request ID="1,757" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.CNF" Destination="CreatedObjects.DINT2DINT_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,758" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2_1.CNF" Destination="CreatedObjects.CLIENT_1_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,759" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2_1.CNF" Destination="CreatedObjects.F_EQ_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,760" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2_1.CNF" Destination="CreatedObjects.remoteObjectMethod2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,761" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.INITO" Destination="CreatedObjects.CLIENT_1_2_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,762" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.INITO" Destination="CreatedObjects.CLIENT_1_1_2.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,763" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod2.CNF" Destination="CreatedObjects.DINT2DINT_2_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,764" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.CNF" Destination="CreatedObjects.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,765" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_3.CNF" Destination="CreatedObjects.F_EQ_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,766" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_3.CNF" Destination="CreatedObjects.remoteObjectMethod1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,767" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_3.CNF" Destination="CreatedObjects.CLIENT_1_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,768" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod1.CNF" Destination="CreatedObjects.DINT2DINT_3.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,769" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod1_1.CNF" Destination="CreatedObjects.CLIENT_1_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,770" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.INITO" Destination="CreatedObjects.CLIENT_1_3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,771" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.INITO" Destination="CreatedObjects.CLIENT_1_1.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,772" Action="CREATE"><Connection Source="CreatedObjects.remoteVar2_1.CNF" Destination="CreatedObjects.DINT2DINT_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,773" Action="CREATE"><Connection Source="CreatedObjects.remoteObjectMethod2_1.CNF" Destination="CreatedObjects.CLIENT_1_1_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,774" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1.RD_1" Destination="CreatedObjects.DINT2DINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,775" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT.OUT" Destination="CreatedObjects.CLIENT_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,776" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1.OUT" Destination="CreatedObjects.F_EQ.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,777" Action="CREATE"><Connection Source="CreatedObjects.F_EQ.OUT" Destination="CreatedObjects.remoteObjectMethod1.check" /></Request>
+delayedWorkingClient;<Request ID="1,778" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1.OUT" Destination="CreatedObjects.remoteVar1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,779" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1.OUT" Destination="CreatedObjects.F_EQ_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,780" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1.RD_1" Destination="CreatedObjects.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,781" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1.OUT" Destination="CreatedObjects.CLIENT_1_1_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,782" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1.QO" Destination="CreatedObjects.remoteVar2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,783" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_2.RD_1" Destination="CreatedObjects.DINT2DINT_1_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,784" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_1_1.OUT" Destination="CreatedObjects.remoteVar1_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,785" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2.OUT" Destination="CreatedObjects.remoteObjectMethod2.check" /></Request>
+delayedWorkingClient;<Request ID="1,786" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_1_1.OUT" Destination="CreatedObjects.CLIENT_1_1_1_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,787" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2.OUT" Destination="CreatedObjects.F_EQ_2.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,788" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2.RD_1" Destination="CreatedObjects.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingClient;<Request ID="1,789" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_1_1_1.QO" Destination="CreatedObjects.remoteVar2_2.check" /></Request>
+delayedWorkingClient;<Request ID="1,790" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2.OUT" Destination="CreatedObjects.CLIENT_1_2.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,791" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_1_2.OUT" Destination="CreatedObjects.F_EQ_1_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,792" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_2_1.OUT" Destination="CreatedObjects.remoteObjectMethod2_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,793" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_2_1.RD_1" Destination="CreatedObjects.DINT2DINT_1_2_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,794" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_2_1.OUT" Destination="CreatedObjects.F_EQ_2_1.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,795" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_2_1.OUT" Destination="CreatedObjects.CLIENT_1_2_1.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,796" Action="CREATE"><Connection Source="CreatedObjects.F_EQ_3.OUT" Destination="CreatedObjects.remoteObjectMethod1_1.check" /></Request>
+delayedWorkingClient;<Request ID="1,797" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_1_3.OUT" Destination="CreatedObjects.F_EQ_3.IN1" /></Request>
+delayedWorkingClient;<Request ID="1,798" Action="CREATE"><Connection Source="CreatedObjects.DINT2DINT_3.OUT" Destination="CreatedObjects.CLIENT_1_3.SD_1" /></Request>
+delayedWorkingClient;<Request ID="1,799" Action="CREATE"><Connection Source="CreatedObjects.CLIENT_1_3.RD_1" Destination="CreatedObjects.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingClient;<Request ID="1,800" Action="CREATE"><Connection Source="InitFinishedSignal.INITO" Destination="PUBLISH_0.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,801" Action="CREATE"><Connection Source="InitFinishedSignal.IND" Destination="PUBLISH_0.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,802" Action="CREATE"><Connection Source="E_PERMIT.EO" Destination="E_SR_1.S" /></Request>
+delayedWorkingClient;<Request ID="1,803" Action="CREATE"><Connection Source="PUBLISH_0.CNF" Destination="E_SR_2.S" /></Request>
+delayedWorkingClient;<Request ID="1,804" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="E_PERMIT.EI" /></Request>
+delayedWorkingClient;<Request ID="1,805" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="folderTestRemote.WriteToVars.Write3.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,806" Action="CREATE"><Connection Source="E_DELAY.EO" Destination="folderTestRemote.WriteToVars.BOOL2BOOL_2.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,807" Action="CREATE"><Connection Source="START.COLD" Destination="InitFinishedSignal.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,808" Action="CREATE"><Connection Source="START.WARM" Destination="InitFinishedSignal.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,809" Action="CREATE"><Connection Source="UnknownServer2.INITO" Destination="HandleInit.F_BOOL_TO_UINT_1.REQ" /></Request>
+delayedWorkingClient;<Request ID="1,810" Action="CREATE"><Connection Source="UnkonwnServer.INITO" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.INIT" /></Request>
+delayedWorkingClient;<Request ID="1,811" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,812" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,813" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_3_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,814" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteBrowseName.CLIENT_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,815" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,816" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,817" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_3_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,818" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteNumericMethod.CLIENT_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,819" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,820" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,821" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_3_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,822" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteStringMethod.CLIENT_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,823" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,824" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,825" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_3_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,826" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteMethods.RemoteByteStringMethod.CLIENT_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,827" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,828" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,829" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,830" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,831" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,832" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,833" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,834" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,835" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,836" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,837" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,838" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="bytestringNodeIdTestRemote.SubscribeToVars.Subscribe3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,839" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,840" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,841" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,842" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,843" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,844" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,845" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,846" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.WriteToVars.Write3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,847" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,848" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,849" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,850" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="stringNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,851" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,852" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,853" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,854" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.ReadVars.Read3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,855" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,856" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,857" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,858" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.WriteToVars.Write3Numeric.QI" /></Request>
+delayedWorkingClient;<Request ID="1,859" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,860" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,861" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,862" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="numericNodeIdTestRemote.SubscribeToVars_1.Subscribe3_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,863" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="E_PERMIT.PERMIT" /></Request>
+delayedWorkingClient;<Request ID="1,864" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,865" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,866" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.SubscribeToVars.Subscribe2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,867" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,868" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,869" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.ReadVars.Read3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,870" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,871" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,872" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="folderTestRemote.WriteToVars.Write3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,873" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="HandleInit.F_BOOL_TO_UINT_1.IN" /></Request>
+delayedWorkingClient;<Request ID="1,874" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,875" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,876" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0_1_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,877" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.CLIENT_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,878" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteIsolatedCases.PUBLISH_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,879" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead.QI" /></Request>
+delayedWorkingClient;<Request ID="1,880" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,881" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,882" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.rootRead_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,883" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.SERVER_0.QI" /></Request>
+delayedWorkingClient;<Request ID="1,884" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="DirectRootRemote.SERVER_0_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,885" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,886" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,887" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,888" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,889" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_2.QI" /></Request>
+delayedWorkingClient;<Request ID="1,890" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_1_1_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,891" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_2_1.QI" /></Request>
+delayedWorkingClient;<Request ID="1,892" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="CreatedObjects.CLIENT_1_3.QI" /></Request>
+delayedWorkingClient;<Request ID="1,893" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="UnkonwnServer.QI" /></Request>
+delayedWorkingClient;<Request ID="1,894" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/delayedServer.fboot b/systemtests/src/modules/opc_ua/delayedServer.fboot
new file mode 100644
index 0000000..7631f54
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/delayedServer.fboot
@@ -0,0 +1,1171 @@
+;<Request ID="1" Action="CREATE"><FB Name="delayedWorkingServer" Type="EMB_RES" /></Request>
+delayedWorkingServer;<Request ID="2" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="3" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="4" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="5" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="6" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="7" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="8" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_0_3" Type="SERVER_0_3" /></Request>
+delayedWorkingServer;<Request ID="9" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.ID" /></Request>
+delayedWorkingServer;<Request ID="10" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="11" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_2_3" Type="SERVER_2_3" /></Request>
+delayedWorkingServer;<Request ID="12" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.ID" /></Request>
+delayedWorkingServer;<Request ID="13" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="14" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="15" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_1_0" Type="SERVER_1_0" /></Request>
+delayedWorkingServer;<Request ID="16" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.ID" /></Request>
+delayedWorkingServer;<Request ID="17" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="18" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="19" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="20" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="21" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="22" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="23" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.IN" /></Request>
+delayedWorkingServer;<Request ID="24" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="25" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.IN" /></Request>
+delayedWorkingServer;<Request ID="26" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="27" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="28" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="29" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="30" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="31" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="32" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="33" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="34" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="35" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="36" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="37" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="38" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="39" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="40" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="41" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="42" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="43" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="44" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="45" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY.DT" /></Request>
+delayedWorkingServer;<Request ID="46" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.E_DELAY_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="47" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.DT" /></Request>
+delayedWorkingServer;<Request ID="48" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="49" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="50" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="51" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="52" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="53" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="54" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+delayedWorkingServer;<Request ID="55" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.ID" /></Request>
+delayedWorkingServer;<Request ID="56" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="57" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+delayedWorkingServer;<Request ID="58" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.ID" /></Request>
+delayedWorkingServer;<Request ID="59" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="60" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="61" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+delayedWorkingServer;<Request ID="62" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.ID" /></Request>
+delayedWorkingServer;<Request ID="63" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="64" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="65" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="66" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="67" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="68" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="69" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_2.IN" /></Request>
+delayedWorkingServer;<Request ID="70" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="71" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_3.IN" /></Request>
+delayedWorkingServer;<Request ID="72" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="73" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="74" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="75" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="76" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="77" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="78" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="79" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="80" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="81" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="82" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="83" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="84" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="85" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="86" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="87" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="88" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="89" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="90" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="91" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodNumericNodeId.E_DELAY.DT" /></Request>
+delayedWorkingServer;<Request ID="92" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="93" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodNumericNodeId.E_DELAY_1.DT" /></Request>
+delayedWorkingServer;<Request ID="94" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="95" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="96" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="97" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=methodHello]" Destination="LocaMethods.MethodStringNodeId.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="98" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="99" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="100" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+delayedWorkingServer;<Request ID="101" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=methodHello2]" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.ID" /></Request>
+delayedWorkingServer;<Request ID="102" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="103" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+delayedWorkingServer;<Request ID="104" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=methodHello3]" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.ID" /></Request>
+delayedWorkingServer;<Request ID="105" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="106" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="107" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+delayedWorkingServer;<Request ID="108" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=methodHello1]" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.ID" /></Request>
+delayedWorkingServer;<Request ID="109" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="110" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_1_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="111" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="112" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="113" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="114" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="115" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_2.IN" /></Request>
+delayedWorkingServer;<Request ID="116" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="117" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_3.IN" /></Request>
+delayedWorkingServer;<Request ID="118" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="119" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="120" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="121" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="122" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="123" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="124" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="125" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="126" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="127" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="128" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="129" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="130" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="131" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="132" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="133" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="134" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="135" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="136" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="137" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodStringNodeId.E_DELAY.DT" /></Request>
+delayedWorkingServer;<Request ID="138" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="139" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodStringNodeId.E_DELAY_1.DT" /></Request>
+delayedWorkingServer;<Request ID="140" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="141" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="142" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="143" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=methodByteStringNodeId1]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="144" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="145" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="146" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+delayedWorkingServer;<Request ID="147" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=methodByteStringNodeId3]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.ID" /></Request>
+delayedWorkingServer;<Request ID="148" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="149" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+delayedWorkingServer;<Request ID="150" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=methodByteStringNodeId4]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.ID" /></Request>
+delayedWorkingServer;<Request ID="151" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="152" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="153" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+delayedWorkingServer;<Request ID="154" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=methodByteStringNodeId2]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.ID" /></Request>
+delayedWorkingServer;<Request ID="155" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="156" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="157" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="158" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="159" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="160" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="161" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.IN" /></Request>
+delayedWorkingServer;<Request ID="162" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="163" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.IN" /></Request>
+delayedWorkingServer;<Request ID="164" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="165" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="166" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="167" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="168" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="169" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="170" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="171" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="172" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="173" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="174" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="175" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="176" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="177" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="178" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="179" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="180" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="181" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="182" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.E_DELAY" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="183" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY.DT" /></Request>
+delayedWorkingServer;<Request ID="184" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="185" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY_1.DT" /></Request>
+delayedWorkingServer;<Request ID="186" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+delayedWorkingServer;<Request ID="187" Action="CREATE"><FB Name="SUBSCRIBE_0_1" Type="SUBSCRIBE_0" /></Request>
+delayedWorkingServer;<Request ID="188" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_0_1.QI" /></Request>
+delayedWorkingServer;<Request ID="189" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="SUBSCRIBE_0_1.ID" /></Request>
+delayedWorkingServer;<Request ID="190" Action="CREATE"><FB Name="HandleInitLocal.InitFinished" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="191" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="HandleInitLocal.InitFinished.ID" /></Request>
+delayedWorkingServer;<Request ID="192" Action="CREATE"><FB Name="HandleInitLocal.SUBSCRIBE_0" Type="SUBSCRIBE_0" /></Request>
+delayedWorkingServer;<Request ID="193" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="HandleInitLocal.SUBSCRIBE_0.ID" /></Request>
+delayedWorkingServer;<Request ID="194" Action="CREATE"><FB Name="HandleInitLocal.E_CYCLE" Type="E_CYCLE" /></Request>
+delayedWorkingServer;<Request ID="195" Action="WRITE"><Connection Source="T#1000ms" Destination="HandleInitLocal.E_CYCLE.DT" /></Request>
+delayedWorkingServer;<Request ID="196" Action="CREATE"><FB Name="HandleInitLocal.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+delayedWorkingServer;<Request ID="197" Action="CREATE"><FB Name="HandleInitLocal.STEST_END" Type="STEST_END" /></Request>
+delayedWorkingServer;<Request ID="198" Action="CREATE"><FB Name="HandleInitLocal.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+delayedWorkingServer;<Request ID="199" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+delayedWorkingServer;<Request ID="200" Action="CREATE"><FB Name="E_DELAY_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="201" Action="WRITE"><Connection Source="T#10s" Destination="E_DELAY_1.DT" /></Request>
+delayedWorkingServer;<Request ID="202" Action="CREATE"><FB Name="E_SPLIT" Type="E_SPLIT" /></Request>
+delayedWorkingServer;<Request ID="203" Action="CREATE"><FB Name="E_DELAY_1_1" Type="E_DELAY" /></Request>
+delayedWorkingServer;<Request ID="204" Action="WRITE"><Connection Source="T#10s" Destination="E_DELAY_1_1.DT" /></Request>
+delayedWorkingServer;<Request ID="205" Action="CREATE"><FB Name="F_NOT" Type="F_NOT" /></Request>
+delayedWorkingServer;<Request ID="206" Action="CREATE"><FB Name="E_PERMIT_1" Type="E_PERMIT" /></Request>
+delayedWorkingServer;<Request ID="207" Action="CREATE"><FB Name="DirectRoot.rootRead" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="208" Action="WRITE"><Connection Source="opc_ua[READ;/1:readVar/]" Destination="DirectRoot.rootRead.ID" /></Request>
+delayedWorkingServer;<Request ID="209" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="210" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="211" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRoot.BOOL2BOOL_2_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="212" Action="CREATE"><FB Name="DirectRoot.directRootRead" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="213" Action="CREATE"><FB Name="DirectRoot.rootWrite" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="214" Action="WRITE"><Connection Source="opc_ua[WRITE;/1:writeVar]" Destination="DirectRoot.rootWrite.ID" /></Request>
+delayedWorkingServer;<Request ID="215" Action="CREATE"><FB Name="DirectRoot.directRootWrite" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="216" Action="CREATE"><FB Name="DirectRoot.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="217" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRoot.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="218" Action="CREATE"><FB Name="DirectRoot.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="219" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/1:method]" Destination="DirectRoot.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="220" Action="CREATE"><FB Name="DirectRoot.directRootMethod" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="221" Action="CREATE"><FB Name="DirectRoot.rootRead_2" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="222" Action="WRITE"><Connection Source="opc_ua[READ;/1:folder2/readVar]" Destination="DirectRoot.rootRead_2.ID" /></Request>
+delayedWorkingServer;<Request ID="223" Action="CREATE"><FB Name="DirectRoot.directRootRead2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="224" Action="CREATE"><FB Name="DirectRoot.rootWrite2" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="225" Action="WRITE"><Connection Source="opc_ua[WRITE;/1:folder2/writeVar]" Destination="DirectRoot.rootWrite2.ID" /></Request>
+delayedWorkingServer;<Request ID="226" Action="CREATE"><FB Name="DirectRoot.SERVER_0_1" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="227" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/1:folder2/method]" Destination="DirectRoot.SERVER_0_1.ID" /></Request>
+delayedWorkingServer;<Request ID="228" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="229" Action="CREATE"><FB Name="DirectRoot.directRootWrite2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="230" Action="CREATE"><FB Name="DirectRoot.directRootMethod_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="231" Action="CREATE"><FB Name="DirectRoot.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="232" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRoot.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="233" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="234" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRoot.BOOL2BOOL_2_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="235" Action="CREATE"><FB Name="DirectRoot.E_SWITCH" Type="E_SWITCH" /></Request>
+delayedWorkingServer;<Request ID="236" Action="CREATE"><FB Name="IsolatedCases.PUBLISH_1" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="237" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/IsolatedTests/WRITEVariable]" Destination="IsolatedCases.PUBLISH_1.ID" /></Request>
+delayedWorkingServer;<Request ID="238" Action="CREATE"><FB Name="IsolatedCases.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="239" Action="WRITE"><Connection Source="DINT#123" Destination="IsolatedCases.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="240" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="241" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="242" Action="WRITE"><Connection Source="DINT#456" Destination="IsolatedCases.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="243" Action="CREATE"><FB Name="IsolatedCases.TEST_CONDITION" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="244" Action="CREATE"><FB Name="IsolatedCases.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="245" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/IsolatedTests/READVariable]" Destination="IsolatedCases.SUBSCRIBE_1.ID" /></Request>
+delayedWorkingServer;<Request ID="246" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="247" Action="WRITE"><Connection Source="DINT#789" Destination="IsolatedCases.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="248" Action="CREATE"><FB Name="IsolatedCases.PUBLISH_1_1" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="249" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/noNewFolder]" Destination="IsolatedCases.PUBLISH_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="250" Action="CREATE"><FB Name="IsolatedCases.SERVER_0" Type="SERVER_0" /></Request>
+delayedWorkingServer;<Request ID="251" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/noNewFolderMethod]" Destination="IsolatedCases.SERVER_0.ID" /></Request>
+delayedWorkingServer;<Request ID="252" Action="CREATE"><FB Name="CreateObjects.deleteObject1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="253" Action="CREATE"><FB Name="CreateObjects.deleteObject2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="254" Action="CREATE"><FB Name="CreateObjects.createObject2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="255" Action="CREATE"><FB Name="CreateObjects.createObject3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="256" Action="CREATE"><FB Name="CreateObjects.createObject1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="257" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="258" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/created1/created2/created3]" Destination="CreateObjects.PUBLISH_1.ID" /></Request>
+delayedWorkingServer;<Request ID="259" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="260" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/created1/created2]" Destination="CreateObjects.PUBLISH_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="261" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_2" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="262" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=61;/Objects/created1]" Destination="CreateObjects.PUBLISH_1_1_2.ID" /></Request>
+delayedWorkingServer;<Request ID="263" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="264" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Types/0:ObjectTypes/0:BaseObjectType/0:FolderType;/Objects/created1/created2]" Destination="CreateObjects.PUBLISH_1_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="265" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1_1" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="266" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/0:Types/0:ObjectTypes/0:BaseObjectType/0:FolderType,0:i=61;/Objects/created1/created2/created3]" Destination="CreateObjects.PUBLISH_1_1_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="267" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1_1_1" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="268" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=2004;/Objects/created1/newServer]" Destination="CreateObjects.PUBLISH_1_1_1_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="269" Action="CREATE"><FB Name="CreateObjects.createServer" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="270" Action="CREATE"><FB Name="CreateObjects.E_SWITCH" Type="E_SWITCH" /></Request>
+delayedWorkingServer;<Request ID="271" Action="CREATE"><FB Name="CreateObjects.testObject" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="272" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,2:i=15001;/Objects/testObject1]" Destination="CreateObjects.testObject.ID" /></Request>
+delayedWorkingServer;<Request ID="273" Action="CREATE"><FB Name="CreateObjects.testObject1Test" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="274" Action="CREATE"><FB Name="CreateObjects.testObject2Test" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="275" Action="CREATE"><FB Name="CreateObjects.testObject2" Type="PUBLISH_0" /></Request>
+delayedWorkingServer;<Request ID="276" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Types/0:ObjectTypes/0:BaseObjectType/2:TestObject;/Objects/testObject2]" Destination="CreateObjects.testObject2.ID" /></Request>
+delayedWorkingServer;<Request ID="277" Action="CREATE"><FB Name="CreateObjects.testMethod1" Type="SERVER_1" /></Request>
+delayedWorkingServer;<Request ID="278" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod]" Destination="CreateObjects.testMethod1.ID" /></Request>
+delayedWorkingServer;<Request ID="279" Action="CREATE"><FB Name="CreateObjects.DINT2DINT" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="280" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="281" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="282" Action="CREATE"><FB Name="CreateObjects.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="283" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="284" Action="CREATE"><FB Name="CreateObjects.objectMethod1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="285" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_2" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="286" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/testObject1/2:Variable1]" Destination="CreateObjects.PUBLISH_1_2.ID" /></Request>
+delayedWorkingServer;<Request ID="287" Action="CREATE"><FB Name="CreateObjects.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="288" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/testObject1/2:Variable2]" Destination="CreateObjects.SUBSCRIBE_1.ID" /></Request>
+delayedWorkingServer;<Request ID="289" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="290" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="291" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="292" Action="CREATE"><FB Name="CreateObjects.ojectVar2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="293" Action="CREATE"><FB Name="CreateObjects.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="294" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="295" Action="CREATE"><FB Name="CreateObjects.ojectVar1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="296" Action="CREATE"><FB Name="CreateObjects.E_SWITCH_1" Type="E_SWITCH" /></Request>
+delayedWorkingServer;<Request ID="297" Action="CREATE"><FB Name="CreateObjects.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="298" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="299" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_2_1" Type="PUBLISH_1" /></Request>
+delayedWorkingServer;<Request ID="300" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/testObject2/2:Variable1]" Destination="CreateObjects.PUBLISH_1_2_1.ID" /></Request>
+delayedWorkingServer;<Request ID="301" Action="CREATE"><FB Name="CreateObjects.ojectVar2_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="302" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="303" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="304" Action="CREATE"><FB Name="CreateObjects.objectMethod1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="305" Action="CREATE"><FB Name="CreateObjects.ojectVar1_1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="306" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="307" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="308" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="309" Action="CREATE"><FB Name="CreateObjects.F_EQ_2" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="310" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.F_EQ_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="311" Action="CREATE"><FB Name="CreateObjects.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="312" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/testObject2/2:Variable2]" Destination="CreateObjects.SUBSCRIBE_1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="313" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_2" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="314" Action="CREATE"><FB Name="CreateObjects.testMethod1_1" Type="SERVER_1" /></Request>
+delayedWorkingServer;<Request ID="315" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject2/2:TestMethod]" Destination="CreateObjects.testMethod1_1.ID" /></Request>
+delayedWorkingServer;<Request ID="316" Action="CREATE"><FB Name="CreateObjects.F_EQ_3" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="317" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_3.IN2" /></Request>
+delayedWorkingServer;<Request ID="318" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="319" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingServer;<Request ID="320" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_3" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="321" Action="CREATE"><FB Name="CreateObjects.objectMethod1_2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="322" Action="CREATE"><FB Name="CreateObjects.testMethod1_2" Type="SERVER_1" /></Request>
+delayedWorkingServer;<Request ID="323" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod2]" Destination="CreateObjects.testMethod1_2.ID" /></Request>
+delayedWorkingServer;<Request ID="324" Action="CREATE"><FB Name="CreateObjects.F_EQ_4" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="325" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_4.IN2" /></Request>
+delayedWorkingServer;<Request ID="326" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_4" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="327" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_4.IN" /></Request>
+delayedWorkingServer;<Request ID="328" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_4" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="329" Action="CREATE"><FB Name="CreateObjects.objectMethod1_3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="330" Action="CREATE"><FB Name="CreateObjects.testMethod1_3" Type="SERVER_1" /></Request>
+delayedWorkingServer;<Request ID="331" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject2/2:TestMethod2]" Destination="CreateObjects.testMethod1_3.ID" /></Request>
+delayedWorkingServer;<Request ID="332" Action="CREATE"><FB Name="folderTest_1.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="333" Action="CREATE"><FB Name="folderTest_1.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="334" Action="CREATE"><FB Name="folderTest_1.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="335" Action="CREATE"><FB Name="folderTest_1.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="336" Action="CREATE"><FB Name="folderTest_1.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="337" Action="CREATE"><FB Name="folderTest_1.Writable1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="338" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTest_1.Writable1.ID" /></Request>
+delayedWorkingServer;<Request ID="339" Action="CREATE"><FB Name="folderTest_1.Writable2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="340" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTest_1.Writable2.ID" /></Request>
+delayedWorkingServer;<Request ID="341" Action="CREATE"><FB Name="folderTest_1.Writable3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="342" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTest_1.Writable3.ID" /></Request>
+delayedWorkingServer;<Request ID="343" Action="CREATE"><FB Name="folderTest_1.localReadFolder1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="344" Action="CREATE"><FB Name="folderTest_1.localReadFolder2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="345" Action="CREATE"><FB Name="folderTest_1.localReadFolder3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="346" Action="CREATE"><FB Name="folderTest_1.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="347" Action="WRITE"><Connection Source="DINT#123" Destination="folderTest_1.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="348" Action="CREATE"><FB Name="folderTest_1.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="349" Action="WRITE"><Connection Source="DINT#456" Destination="folderTest_1.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="350" Action="CREATE"><FB Name="folderTest_1.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="351" Action="WRITE"><Connection Source="DINT#789" Destination="folderTest_1.F_EQ_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="352" Action="CREATE"><FB Name="folderTest_1.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="353" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest_1.F_EQ__1.IN2" /></Request>
+delayedWorkingServer;<Request ID="354" Action="CREATE"><FB Name="folderTest_1.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="355" Action="CREATE"><FB Name="folderTest_1.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="356" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest_1.F_EQ_5_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="357" Action="CREATE"><FB Name="folderTest_1.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="358" Action="CREATE"><FB Name="folderTest_1.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="359" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTest_1.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="360" Action="CREATE"><FB Name="folderTest_1.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="361" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest_1.F_EQ__1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="362" Action="CREATE"><FB Name="folderTest_1.F_EQ_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="363" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTest_1.F_EQ_2_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="364" Action="CREATE"><FB Name="folderTest_1.localReadFolder5" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="365" Action="CREATE"><FB Name="folderTest_1.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="366" Action="CREATE"><FB Name="folderTest_1.F_EQ_5_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="367" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest_1.F_EQ_5_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="368" Action="CREATE"><FB Name="folderTest_1.localReadFolder4" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="369" Action="CREATE"><FB Name="folderTest_1.F_OR_2_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="370" Action="CREATE"><FB Name="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="371" Action="CREATE"><FB Name="byteStringNodeIdTest_1.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="372" Action="CREATE"><FB Name="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="373" Action="CREATE"><FB Name="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="374" Action="CREATE"><FB Name="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="375" Action="CREATE"><FB Name="byteStringNodeIdTest_1.Writable1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="376" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="byteStringNodeIdTest_1.Writable1.ID" /></Request>
+delayedWorkingServer;<Request ID="377" Action="CREATE"><FB Name="byteStringNodeIdTest_1.Writable2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="378" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="byteStringNodeIdTest_1.Writable2.ID" /></Request>
+delayedWorkingServer;<Request ID="379" Action="CREATE"><FB Name="byteStringNodeIdTest_1.Writable3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="380" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="byteStringNodeIdTest_1.Writable3.ID" /></Request>
+delayedWorkingServer;<Request ID="381" Action="CREATE"><FB Name="byteStringNodeIdTest_1.localBytestringNumeric1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="382" Action="CREATE"><FB Name="byteStringNodeIdTest_1.localBytestringNumeric2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="383" Action="CREATE"><FB Name="byteStringNodeIdTest_1.localBytestringNumeric3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="384" Action="CREATE"><FB Name="byteStringNodeIdTest_1.localBytestringNumeric4" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="385" Action="CREATE"><FB Name="byteStringNodeIdTest_1.localBytestringNumeric5" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="386" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="387" Action="WRITE"><Connection Source="DINT#123" Destination="byteStringNodeIdTest_1.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="388" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="389" Action="WRITE"><Connection Source="DINT#456" Destination="byteStringNodeIdTest_1.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="390" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="391" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest_1.F_EQ__1.IN2" /></Request>
+delayedWorkingServer;<Request ID="392" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="393" Action="WRITE"><Connection Source="DINT#789" Destination="byteStringNodeIdTest_1.F_EQ_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="394" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="395" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="396" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest_1.F_EQ_5_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="397" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="398" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="399" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest_1.F_EQ__1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="400" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_5_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="401" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest_1.F_EQ_5_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="402" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="403" Action="WRITE"><Connection Source="DINT#654321" Destination="byteStringNodeIdTest_1.F_EQ_2_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="404" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_OR_2_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="405" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="406" Action="CREATE"><FB Name="byteStringNodeIdTest_1.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="407" Action="WRITE"><Connection Source="DINT#123456" Destination="byteStringNodeIdTest_1.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="408" Action="CREATE"><FB Name="numericNodeIdTest_1.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="409" Action="CREATE"><FB Name="numericNodeIdTest_1.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="410" Action="CREATE"><FB Name="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="411" Action="CREATE"><FB Name="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="412" Action="CREATE"><FB Name="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="413" Action="CREATE"><FB Name="numericNodeIdTest_1.Writable1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="414" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTest_1.Writable1.ID" /></Request>
+delayedWorkingServer;<Request ID="415" Action="CREATE"><FB Name="numericNodeIdTest_1.Writable2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="416" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTest_1.Writable2.ID" /></Request>
+delayedWorkingServer;<Request ID="417" Action="CREATE"><FB Name="numericNodeIdTest_1.Writable3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="418" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTest_1.Writable3.ID" /></Request>
+delayedWorkingServer;<Request ID="419" Action="CREATE"><FB Name="numericNodeIdTest_1.localNumeric1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="420" Action="CREATE"><FB Name="numericNodeIdTest_1.localNumeric2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="421" Action="CREATE"><FB Name="numericNodeIdTest_1.localNumeric3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="422" Action="CREATE"><FB Name="numericNodeIdTest_1.localNumeric4" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="423" Action="CREATE"><FB Name="numericNodeIdTest_1.localNumeric5" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="424" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="425" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTest_1.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="426" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="427" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTest_1.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="428" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="429" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest_1.F_EQ__1.IN2" /></Request>
+delayedWorkingServer;<Request ID="430" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="431" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTest_1.F_EQ_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="432" Action="CREATE"><FB Name="numericNodeIdTest_1.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="433" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="434" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest_1.F_EQ_5_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="435" Action="CREATE"><FB Name="numericNodeIdTest_1.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="436" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="437" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest_1.F_EQ__1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="438" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_5_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="439" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest_1.F_EQ_5_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="440" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="441" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTest_1.F_EQ_2_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="442" Action="CREATE"><FB Name="numericNodeIdTest_1.F_OR_2_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="443" Action="CREATE"><FB Name="numericNodeIdTest_1.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="444" Action="CREATE"><FB Name="numericNodeIdTest_1.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="445" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTest_1.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="446" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="447" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="448" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="449" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="450" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+delayedWorkingServer;<Request ID="451" Action="CREATE"><FB Name="stringNodeIdTest.Writable1" Type="SUBSCRIBE_1" /></Request>
+delayedWorkingServer;<Request ID="452" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTest.Writable1.ID" /></Request>
+delayedWorkingServer;<Request ID="453" Action="CREATE"><FB Name="stringNodeIdTest.Writable2" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="454" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTest.Writable2.ID" /></Request>
+delayedWorkingServer;<Request ID="455" Action="CREATE"><FB Name="stringNodeIdTest.Writable3" Type="SUBSCRIBE_2" /></Request>
+delayedWorkingServer;<Request ID="456" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTest.Writable3.ID" /></Request>
+delayedWorkingServer;<Request ID="457" Action="CREATE"><FB Name="stringNodeIdTest.localString1" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="458" Action="CREATE"><FB Name="stringNodeIdTest.localString2" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="459" Action="CREATE"><FB Name="stringNodeIdTest.localString3" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="460" Action="CREATE"><FB Name="stringNodeIdTest.localString4" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="461" Action="CREATE"><FB Name="stringNodeIdTest.localString5" Type="TEST_CONDITION" /></Request>
+delayedWorkingServer;<Request ID="462" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="463" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTest.F_EQ.IN2" /></Request>
+delayedWorkingServer;<Request ID="464" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="465" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTest.F_EQ_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="466" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ__1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="467" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ__1.IN2" /></Request>
+delayedWorkingServer;<Request ID="468" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_2_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="469" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTest.F_EQ_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="470" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="471" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_5_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="472" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ_5_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="473" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_2" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="474" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ__1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="475" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ__1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="476" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_5_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="477" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ_5_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="478" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_2_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="479" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTest.F_EQ_2_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="480" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_2_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="481" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_1_1" Type="F_OR" /></Request>
+delayedWorkingServer;<Request ID="482" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_1_1" Type="F_EQ" /></Request>
+delayedWorkingServer;<Request ID="483" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTest.F_EQ_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="484" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="485" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="486" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="487" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="488" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="489" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="490" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="491" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.IND" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="492" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="493" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="494" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="495" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="496" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="497" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="498" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="499" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="500" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="501" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="502" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.IND" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="503" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="504" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="505" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="506" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="507" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="508" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="509" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="510" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="511" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="512" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="513" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="514" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="515" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.IND" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY.START" /></Request>
+delayedWorkingServer;<Request ID="516" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.E_DELAY.EO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="517" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.IND" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.START" /></Request>
+delayedWorkingServer;<Request ID="518" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.EO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="519" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_2" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="520" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_1" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="521" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="522" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_3" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingServer;<Request ID="523" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_2" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="524" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="525" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_1" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="526" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_3" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.IN" /></Request>
+delayedWorkingServer;<Request ID="527" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="528" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.SD_1" /></Request>
+delayedWorkingServer;<Request ID="529" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="530" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.SD_2" /></Request>
+delayedWorkingServer;<Request ID="531" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.SD_1" /></Request>
+delayedWorkingServer;<Request ID="532" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="533" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="534" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="535" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="536" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="537" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="538" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="539" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="540" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="541" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="542" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="543" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="544" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="545" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="546" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="547" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="548" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="549" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="550" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="551" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="552" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="553" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="554" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="555" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="556" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="557" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="558" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="559" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="560" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="561" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="562" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="563" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="564" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="565" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="566" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="567" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="568" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="569" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="570" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="571" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="572" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="573" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="574" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="575" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.IND" Destination="LocaMethods.MethodNumericNodeId.E_DELAY.START" /></Request>
+delayedWorkingServer;<Request ID="576" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.E_DELAY.EO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="577" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodNumericNodeId.E_DELAY_1.START" /></Request>
+delayedWorkingServer;<Request ID="578" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="579" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="580" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="581" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="582" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingServer;<Request ID="583" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="584" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="585" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="586" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.IN" /></Request>
+delayedWorkingServer;<Request ID="587" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="588" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.SD_1" /></Request>
+delayedWorkingServer;<Request ID="589" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="590" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.SD_2" /></Request>
+delayedWorkingServer;<Request ID="591" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.SD_1" /></Request>
+delayedWorkingServer;<Request ID="592" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="593" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="594" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="595" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="596" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="597" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="598" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="599" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="600" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="601" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="602" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="603" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="604" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="605" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="606" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="607" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_0.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="608" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="609" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_1_0_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="610" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="611" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="612" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="613" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="614" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="615" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="616" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="617" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="618" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="619" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="620" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="621" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_3.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="622" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="623" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="624" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="625" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="626" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="627" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="628" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="629" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="630" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="631" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="632" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_3.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="633" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="634" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="635" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.IND" Destination="LocaMethods.MethodStringNodeId.E_DELAY_1.START" /></Request>
+delayedWorkingServer;<Request ID="636" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="637" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodStringNodeId.E_DELAY.START" /></Request>
+delayedWorkingServer;<Request ID="638" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.E_DELAY.EO" Destination="LocaMethods.MethodStringNodeId.LocalString_1_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="639" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="640" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="641" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="642" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingServer;<Request ID="643" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="644" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="645" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="646" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+delayedWorkingServer;<Request ID="647" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="648" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.SD_1" /></Request>
+delayedWorkingServer;<Request ID="649" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_1_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="650" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.SD_2" /></Request>
+delayedWorkingServer;<Request ID="651" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.SD_1" /></Request>
+delayedWorkingServer;<Request ID="652" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="653" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="654" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="655" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="656" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="657" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="658" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="659" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="660" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="661" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="662" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="663" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="664" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="665" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="666" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="667" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="668" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.INITO" Destination="IsolatedCases.SUBSCRIBE_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="669" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="670" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="671" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="672" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="673" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="674" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="675" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="676" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="677" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="678" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="679" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="680" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="681" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="682" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="683" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="684" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="685" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="686" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="687" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="688" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="689" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="690" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="691" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="692" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="693" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="694" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="695" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY_1.START" /></Request>
+delayedWorkingServer;<Request ID="696" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="697" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.IND" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY.START" /></Request>
+delayedWorkingServer;<Request ID="698" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.E_DELAY.EO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.REQ" /></Request>
+delayedWorkingServer;<Request ID="699" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="700" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="701" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="702" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.IN" /></Request>
+delayedWorkingServer;<Request ID="703" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="704" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="705" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.IN" /></Request>
+delayedWorkingServer;<Request ID="706" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+delayedWorkingServer;<Request ID="707" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.check" /></Request>
+delayedWorkingServer;<Request ID="708" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.SD_1" /></Request>
+delayedWorkingServer;<Request ID="709" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.check" /></Request>
+delayedWorkingServer;<Request ID="710" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.SD_2" /></Request>
+delayedWorkingServer;<Request ID="711" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.SD_1" /></Request>
+delayedWorkingServer;<Request ID="712" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="713" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="714" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="715" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="716" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="717" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="718" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.check" /></Request>
+delayedWorkingServer;<Request ID="719" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.check" /></Request>
+delayedWorkingServer;<Request ID="720" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="721" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="722" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="723" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.check" /></Request>
+delayedWorkingServer;<Request ID="724" Action="CREATE"><Connection Source="HandleInitLocal.E_CYCLE.EO" Destination="HandleInitLocal.InitFinished.REQ" /></Request>
+delayedWorkingServer;<Request ID="725" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.IND" Destination="HandleInitLocal.E_CYCLE.STOP" /></Request>
+delayedWorkingServer;<Request ID="726" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.CNF" Destination="HandleInitLocal.E_DEMUX_2.EI" /></Request>
+delayedWorkingServer;<Request ID="727" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.INITO" Destination="HandleInitLocal.InitFinished.INIT" /></Request>
+delayedWorkingServer;<Request ID="728" Action="CREATE"><Connection Source="HandleInitLocal.InitFinished.INITO" Destination="HandleInitLocal.F_BOOL_TO_UINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="729" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO2" Destination="HandleInitLocal.E_CYCLE.START" /></Request>
+delayedWorkingServer;<Request ID="730" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO1" Destination="HandleInitLocal.STEST_END.REQ" /></Request>
+delayedWorkingServer;<Request ID="731" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.OUT" Destination="HandleInitLocal.E_DEMUX_2.K" /></Request>
+delayedWorkingServer;<Request ID="732" Action="CREATE"><Connection Source="DirectRoot.rootRead.IND" Destination="DirectRoot.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="733" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1.CNF" Destination="DirectRoot.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="734" Action="CREATE"><Connection Source="DirectRoot.F_EQ.CNF" Destination="DirectRoot.directRootRead.REQ" /></Request>
+delayedWorkingServer;<Request ID="735" Action="CREATE"><Connection Source="DirectRoot.rootRead.INITO" Destination="DirectRoot.rootWrite.INIT" /></Request>
+delayedWorkingServer;<Request ID="736" Action="CREATE"><Connection Source="DirectRoot.rootWrite.CNF" Destination="DirectRoot.directRootWrite.REQ" /></Request>
+delayedWorkingServer;<Request ID="737" Action="CREATE"><Connection Source="DirectRoot.directRootMethod.CNF" Destination="DirectRoot.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="738" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.IND" Destination="DirectRoot.directRootMethod.REQ" /></Request>
+delayedWorkingServer;<Request ID="739" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.INITO" Destination="DirectRoot.rootWrite2.INIT" /></Request>
+delayedWorkingServer;<Request ID="740" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.IND" Destination="DirectRoot.directRootMethod_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="741" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.CNF" Destination="DirectRoot.directRootWrite2.REQ" /></Request>
+delayedWorkingServer;<Request ID="742" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_2.CNF" Destination="DirectRoot.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="743" Action="CREATE"><Connection Source="DirectRoot.directRootMethod_1.CNF" Destination="DirectRoot.SERVER_0_1.RSP" /></Request>
+delayedWorkingServer;<Request ID="744" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.IND" Destination="DirectRoot.BOOL2BOOL_2_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="745" Action="CREATE"><Connection Source="DirectRoot.F_EQ_1.CNF" Destination="DirectRoot.directRootRead2.REQ" /></Request>
+delayedWorkingServer;<Request ID="746" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.INITO" Destination="DirectRoot.rootRead_2.INIT" /></Request>
+delayedWorkingServer;<Request ID="747" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1_1.CNF" Destination="DirectRoot.rootWrite2.REQ" /></Request>
+delayedWorkingServer;<Request ID="748" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1.CNF" Destination="DirectRoot.rootWrite.REQ" /></Request>
+delayedWorkingServer;<Request ID="749" Action="CREATE"><Connection Source="DirectRoot.directRootWrite.CNF" Destination="DirectRoot.BOOL2BOOL_2_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="750" Action="CREATE"><Connection Source="DirectRoot.rootWrite.INITO" Destination="DirectRoot.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="751" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.INITO" Destination="DirectRoot.SERVER_0_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="752" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.INITO" Destination="DirectRoot.E_SWITCH.EI" /></Request>
+delayedWorkingServer;<Request ID="753" Action="CREATE"><Connection Source="DirectRoot.E_SWITCH.EO1" Destination="DirectRoot.BOOL2BOOL_2_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="754" Action="CREATE"><Connection Source="DirectRoot.directRootWrite2.CNF" Destination="F_NOT.REQ" /></Request>
+delayedWorkingServer;<Request ID="755" Action="CREATE"><Connection Source="DirectRoot.E_SWITCH.EO0" Destination="F_NOT.REQ" /></Request>
+delayedWorkingServer;<Request ID="756" Action="CREATE"><Connection Source="DirectRoot.rootRead.RD_1" Destination="DirectRoot.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="757" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1.OUT" Destination="DirectRoot.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="758" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1.OUT" Destination="DirectRoot.rootWrite.SD_1" /></Request>
+delayedWorkingServer;<Request ID="759" Action="CREATE"><Connection Source="DirectRoot.F_EQ.OUT" Destination="DirectRoot.directRootRead.check" /></Request>
+delayedWorkingServer;<Request ID="760" Action="CREATE"><Connection Source="DirectRoot.rootWrite.QO" Destination="DirectRoot.directRootWrite.check" /></Request>
+delayedWorkingServer;<Request ID="761" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.QO" Destination="DirectRoot.directRootMethod.check" /></Request>
+delayedWorkingServer;<Request ID="762" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.QO" Destination="DirectRoot.directRootWrite2.check" /></Request>
+delayedWorkingServer;<Request ID="763" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.QO" Destination="DirectRoot.directRootMethod_1.check" /></Request>
+delayedWorkingServer;<Request ID="764" Action="CREATE"><Connection Source="DirectRoot.F_EQ_1.OUT" Destination="DirectRoot.directRootRead2.check" /></Request>
+delayedWorkingServer;<Request ID="765" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.RD_1" Destination="DirectRoot.BOOL2BOOL_2_1_2.IN" /></Request>
+delayedWorkingServer;<Request ID="766" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_2.OUT" Destination="DirectRoot.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="767" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1_1.OUT" Destination="DirectRoot.rootWrite2.SD_1" /></Request>
+delayedWorkingServer;<Request ID="768" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.INITO" Destination="IsolatedCases.PUBLISH_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="769" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1.CNF" Destination="IsolatedCases.PUBLISH_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="770" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1.INITO" Destination="IsolatedCases.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="771" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT.CNF" Destination="IsolatedCases.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="772" Action="CREATE"><Connection Source="IsolatedCases.F_EQ.CNF" Destination="IsolatedCases.TEST_CONDITION.REQ" /></Request>
+delayedWorkingServer;<Request ID="773" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.IND" Destination="IsolatedCases.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="774" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1_1.INITO" Destination="IsolatedCases.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="775" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1_1.CNF" Destination="IsolatedCases.PUBLISH_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="776" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1.CNF" Destination="IsolatedCases.PUBLISH_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="777" Action="CREATE"><Connection Source="IsolatedCases.SERVER_0.INITO" Destination="CreateObjects.PUBLISH_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="778" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1_1.CNF" Destination="IsolatedCases.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="779" Action="CREATE"><Connection Source="IsolatedCases.SERVER_0.IND" Destination="IsolatedCases.SERVER_0.RSP" /></Request>
+delayedWorkingServer;<Request ID="780" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1.OUT" Destination="IsolatedCases.PUBLISH_1.SD_1" /></Request>
+delayedWorkingServer;<Request ID="781" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT.OUT" Destination="IsolatedCases.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="782" Action="CREATE"><Connection Source="IsolatedCases.F_EQ.OUT" Destination="IsolatedCases.TEST_CONDITION.check" /></Request>
+delayedWorkingServer;<Request ID="783" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.RD_1" Destination="IsolatedCases.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="784" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1_1.OUT" Destination="IsolatedCases.PUBLISH_1_1.SD_1" /></Request>
+delayedWorkingServer;<Request ID="785" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.CNF" Destination="CreateObjects.deleteObject1.REQ" /></Request>
+delayedWorkingServer;<Request ID="786" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.CNF" Destination="CreateObjects.deleteObject2.REQ" /></Request>
+delayedWorkingServer;<Request ID="787" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.CNF" Destination="CreateObjects.createObject1.REQ" /></Request>
+delayedWorkingServer;<Request ID="788" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.CNF" Destination="CreateObjects.createObject2.REQ" /></Request>
+delayedWorkingServer;<Request ID="789" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.CNF" Destination="CreateObjects.createObject3.REQ" /></Request>
+delayedWorkingServer;<Request ID="790" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.INITO" Destination="CreateObjects.PUBLISH_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="791" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_2.INIT" /></Request>
+delayedWorkingServer;<Request ID="792" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.INITO" Destination="CreateObjects.PUBLISH_1_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="793" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="794" Action="CREATE"><Connection Source="CreateObjects.createObject1.CNF" Destination="CreateObjects.PUBLISH_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="795" Action="CREATE"><Connection Source="CreateObjects.createObject2.CNF" Destination="CreateObjects.PUBLISH_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="796" Action="CREATE"><Connection Source="CreateObjects.deleteObject1.CNF" Destination="CreateObjects.PUBLISH_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="797" Action="CREATE"><Connection Source="CreateObjects.deleteObject2.CNF" Destination="DirectRoot.rootRead.INIT" /></Request>
+delayedWorkingServer;<Request ID="798" Action="CREATE"><Connection Source="CreateObjects.createObject3.CNF" Destination="CreateObjects.PUBLISH_1_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="799" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_1_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="800" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.CNF" Destination="CreateObjects.createServer.REQ" /></Request>
+delayedWorkingServer;<Request ID="801" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH.EO1" Destination="CreateObjects.PUBLISH_1_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="802" Action="CREATE"><Connection Source="CreateObjects.testObject.CNF" Destination="CreateObjects.testObject1Test.REQ" /></Request>
+delayedWorkingServer;<Request ID="803" Action="CREATE"><Connection Source="CreateObjects.createServer.CNF" Destination="CreateObjects.testObject.REQ" /></Request>
+delayedWorkingServer;<Request ID="804" Action="CREATE"><Connection Source="CreateObjects.testObject1Test.CNF" Destination="CreateObjects.testObject2.REQ" /></Request>
+delayedWorkingServer;<Request ID="805" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.INITO" Destination="CreateObjects.testObject.INIT" /></Request>
+delayedWorkingServer;<Request ID="806" Action="CREATE"><Connection Source="CreateObjects.testObject.INITO" Destination="CreateObjects.testObject2.INIT" /></Request>
+delayedWorkingServer;<Request ID="807" Action="CREATE"><Connection Source="CreateObjects.testObject2.CNF" Destination="CreateObjects.testObject2Test.REQ" /></Request>
+delayedWorkingServer;<Request ID="808" Action="CREATE"><Connection Source="CreateObjects.testMethod1.IND" Destination="CreateObjects.DINT2DINT.REQ" /></Request>
+delayedWorkingServer;<Request ID="809" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1.CNF" Destination="CreateObjects.testMethod1.RSP" /></Request>
+delayedWorkingServer;<Request ID="810" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT.CNF" Destination="CreateObjects.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="811" Action="CREATE"><Connection Source="CreateObjects.F_EQ.CNF" Destination="CreateObjects.objectMethod1.REQ" /></Request>
+delayedWorkingServer;<Request ID="812" Action="CREATE"><Connection Source="CreateObjects.objectMethod1.CNF" Destination="CreateObjects.DINT2DINT_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="813" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.IND" Destination="CreateObjects.DINT2DINT_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="814" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1.CNF" Destination="CreateObjects.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="815" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1.CNF" Destination="CreateObjects.ojectVar2.REQ" /></Request>
+delayedWorkingServer;<Request ID="816" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1.CNF" Destination="CreateObjects.PUBLISH_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="817" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.CNF" Destination="CreateObjects.ojectVar1.REQ" /></Request>
+delayedWorkingServer;<Request ID="818" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.INITO" Destination="CreateObjects.SUBSCRIBE_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="819" Action="CREATE"><Connection Source="CreateObjects.testObject2.INITO" Destination="CreateObjects.E_SWITCH.EI" /></Request>
+delayedWorkingServer;<Request ID="820" Action="CREATE"><Connection Source="CreateObjects.testObject2Test.CNF" Destination="CreateObjects.testMethod1.INIT" /></Request>
+delayedWorkingServer;<Request ID="821" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH_1.EO1" Destination="CreateObjects.DINT2DINT_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="822" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH_1.EO0" Destination="DirectRoot.rootRead.INIT" /></Request>
+delayedWorkingServer;<Request ID="823" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH.EO0" Destination="CreateObjects.testMethod1.INIT" /></Request>
+delayedWorkingServer;<Request ID="824" Action="CREATE"><Connection Source="CreateObjects.F_EQ_2.CNF" Destination="CreateObjects.objectMethod1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="825" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_2.CNF" Destination="CreateObjects.PUBLISH_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="826" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.CNF" Destination="CreateObjects.ojectVar1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="827" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.IND" Destination="CreateObjects.DINT2DINT_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="828" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1_1.CNF" Destination="CreateObjects.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="829" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_1.CNF" Destination="CreateObjects.DINT2DINT_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="830" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.IND" Destination="CreateObjects.DINT2DINT_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="831" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.INITO" Destination="CreateObjects.SUBSCRIBE_1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="832" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_2.CNF" Destination="CreateObjects.F_EQ_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="833" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1_1.CNF" Destination="CreateObjects.ojectVar2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="834" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_2.CNF" Destination="CreateObjects.testMethod1_1.RSP" /></Request>
+delayedWorkingServer;<Request ID="835" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.INITO" Destination="CreateObjects.E_SWITCH_1.EI" /></Request>
+delayedWorkingServer;<Request ID="836" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.INITO" Destination="CreateObjects.testMethod1_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="837" Action="CREATE"><Connection Source="CreateObjects.ojectVar1_1.CNF" Destination="CreateObjects.PUBLISH_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="838" Action="CREATE"><Connection Source="CreateObjects.ojectVar1.CNF" Destination="CreateObjects.DINT2DINT_1_1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="839" Action="CREATE"><Connection Source="CreateObjects.F_EQ_3.CNF" Destination="CreateObjects.objectMethod1_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="840" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_2.CNF" Destination="CreateObjects.DINT2DINT_1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="841" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.IND" Destination="CreateObjects.DINT2DINT_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="842" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_3.CNF" Destination="CreateObjects.F_EQ_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="843" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_3.CNF" Destination="CreateObjects.testMethod1_2.RSP" /></Request>
+delayedWorkingServer;<Request ID="844" Action="CREATE"><Connection Source="CreateObjects.testMethod1.INITO" Destination="CreateObjects.testMethod1_2.INIT" /></Request>
+delayedWorkingServer;<Request ID="845" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.INITO" Destination="CreateObjects.PUBLISH_1_2.INIT" /></Request>
+delayedWorkingServer;<Request ID="846" Action="CREATE"><Connection Source="CreateObjects.F_EQ_4.CNF" Destination="CreateObjects.objectMethod1_3.REQ" /></Request>
+delayedWorkingServer;<Request ID="847" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_3.CNF" Destination="CreateObjects.DINT2DINT_1_4.REQ" /></Request>
+delayedWorkingServer;<Request ID="848" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.IND" Destination="CreateObjects.DINT2DINT_4.REQ" /></Request>
+delayedWorkingServer;<Request ID="849" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_4.CNF" Destination="CreateObjects.F_EQ_4.REQ" /></Request>
+delayedWorkingServer;<Request ID="850" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_4.CNF" Destination="CreateObjects.testMethod1_3.RSP" /></Request>
+delayedWorkingServer;<Request ID="851" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.INITO" Destination="CreateObjects.testMethod1_3.INIT" /></Request>
+delayedWorkingServer;<Request ID="852" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.INITO" Destination="CreateObjects.PUBLISH_1_2_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="853" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.QO" Destination="CreateObjects.deleteObject1.check" /></Request>
+delayedWorkingServer;<Request ID="854" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.QO" Destination="CreateObjects.deleteObject2.check" /></Request>
+delayedWorkingServer;<Request ID="855" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.QO" Destination="CreateObjects.createObject1.check" /></Request>
+delayedWorkingServer;<Request ID="856" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.QO" Destination="CreateObjects.createObject2.check" /></Request>
+delayedWorkingServer;<Request ID="857" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.QO" Destination="CreateObjects.createObject3.check" /></Request>
+delayedWorkingServer;<Request ID="858" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.QO" Destination="CreateObjects.createServer.check" /></Request>
+delayedWorkingServer;<Request ID="859" Action="CREATE"><Connection Source="CreateObjects.testObject.QO" Destination="CreateObjects.testObject1Test.check" /></Request>
+delayedWorkingServer;<Request ID="860" Action="CREATE"><Connection Source="CreateObjects.testObject2.QO" Destination="CreateObjects.testObject2Test.check" /></Request>
+delayedWorkingServer;<Request ID="861" Action="CREATE"><Connection Source="CreateObjects.testMethod1.RD_1" Destination="CreateObjects.DINT2DINT.IN" /></Request>
+delayedWorkingServer;<Request ID="862" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1.OUT" Destination="CreateObjects.testMethod1.SD_1" /></Request>
+delayedWorkingServer;<Request ID="863" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT.OUT" Destination="CreateObjects.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="864" Action="CREATE"><Connection Source="CreateObjects.F_EQ.OUT" Destination="CreateObjects.objectMethod1.check" /></Request>
+delayedWorkingServer;<Request ID="865" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.RD_1" Destination="CreateObjects.DINT2DINT_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="866" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1.OUT" Destination="CreateObjects.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="867" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1.OUT" Destination="CreateObjects.ojectVar2.check" /></Request>
+delayedWorkingServer;<Request ID="868" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1.OUT" Destination="CreateObjects.PUBLISH_1_2.SD_1" /></Request>
+delayedWorkingServer;<Request ID="869" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.QO" Destination="CreateObjects.ojectVar1.check" /></Request>
+delayedWorkingServer;<Request ID="870" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1_1.OUT" Destination="CreateObjects.ojectVar2_1.check" /></Request>
+delayedWorkingServer;<Request ID="871" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1_1.OUT" Destination="CreateObjects.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="872" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.RD_1" Destination="CreateObjects.DINT2DINT_1_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="873" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_2.OUT" Destination="CreateObjects.testMethod1_1.SD_1" /></Request>
+delayedWorkingServer;<Request ID="874" Action="CREATE"><Connection Source="CreateObjects.F_EQ_2.OUT" Destination="CreateObjects.objectMethod1_1.check" /></Request>
+delayedWorkingServer;<Request ID="875" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.RD_1" Destination="CreateObjects.DINT2DINT_2.IN" /></Request>
+delayedWorkingServer;<Request ID="876" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_2.OUT" Destination="CreateObjects.PUBLISH_1_2_1.SD_1" /></Request>
+delayedWorkingServer;<Request ID="877" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.QO" Destination="CreateObjects.ojectVar1_1.check" /></Request>
+delayedWorkingServer;<Request ID="878" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_2.OUT" Destination="CreateObjects.F_EQ_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="879" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_3.OUT" Destination="CreateObjects.testMethod1_2.SD_1" /></Request>
+delayedWorkingServer;<Request ID="880" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_3.OUT" Destination="CreateObjects.F_EQ_3.IN1" /></Request>
+delayedWorkingServer;<Request ID="881" Action="CREATE"><Connection Source="CreateObjects.F_EQ_3.OUT" Destination="CreateObjects.objectMethod1_2.check" /></Request>
+delayedWorkingServer;<Request ID="882" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.RD_1" Destination="CreateObjects.DINT2DINT_3.IN" /></Request>
+delayedWorkingServer;<Request ID="883" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_4.OUT" Destination="CreateObjects.testMethod1_3.SD_1" /></Request>
+delayedWorkingServer;<Request ID="884" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_4.OUT" Destination="CreateObjects.F_EQ_4.IN1" /></Request>
+delayedWorkingServer;<Request ID="885" Action="CREATE"><Connection Source="CreateObjects.F_EQ_4.OUT" Destination="CreateObjects.objectMethod1_3.check" /></Request>
+delayedWorkingServer;<Request ID="886" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.RD_1" Destination="CreateObjects.DINT2DINT_4.IN" /></Request>
+delayedWorkingServer;<Request ID="887" Action="CREATE"><Connection Source="folderTest_1.Writable1.INITO" Destination="E_DELAY_1_1.START" /></Request>
+delayedWorkingServer;<Request ID="888" Action="CREATE"><Connection Source="folderTest_1.Writable2.INITO" Destination="folderTest_1.Writable1.INIT" /></Request>
+delayedWorkingServer;<Request ID="889" Action="CREATE"><Connection Source="folderTest_1.Writable3.INITO" Destination="folderTest_1.Writable2.INIT" /></Request>
+delayedWorkingServer;<Request ID="890" Action="CREATE"><Connection Source="folderTest_1.Writable1.IND" Destination="folderTest_1.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="891" Action="CREATE"><Connection Source="folderTest_1.Writable2.IND" Destination="folderTest_1.BOOL2BOOL_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="892" Action="CREATE"><Connection Source="folderTest_1.Writable3.IND" Destination="folderTest_1.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="893" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_2_1.CNF" Destination="folderTest_1.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="894" Action="CREATE"><Connection Source="folderTest_1.F_EQ.CNF" Destination="folderTest_1.localReadFolder1.REQ" /></Request>
+delayedWorkingServer;<Request ID="895" Action="CREATE"><Connection Source="folderTest_1.F_EQ_2_1.CNF" Destination="folderTest_1.F_EQ_5_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="896" Action="CREATE"><Connection Source="folderTest_1.F_EQ_2_1_1.CNF" Destination="folderTest_1.F_EQ_5_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="897" Action="CREATE"><Connection Source="folderTest_1.F_EQ_1.CNF" Destination="folderTest_1.F_EQ__1.REQ" /></Request>
+delayedWorkingServer;<Request ID="898" Action="CREATE"><Connection Source="folderTest_1.F_EQ_1_1.CNF" Destination="folderTest_1.F_EQ__1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="899" Action="CREATE"><Connection Source="folderTest_1.Writable2.IND" Destination="folderTest_1.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="900" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_2_1.CNF" Destination="folderTest_1.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="901" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_2_1.CNF" Destination="folderTest_1.F_EQ_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="902" Action="CREATE"><Connection Source="folderTest_1.F_EQ_5_1.CNF" Destination="folderTest_1.F_OR_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="903" Action="CREATE"><Connection Source="folderTest_1.F_EQ__1.CNF" Destination="folderTest_1.F_OR_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="904" Action="CREATE"><Connection Source="folderTest_1.F_OR_1.CNF" Destination="folderTest_1.localReadFolder2.REQ" /></Request>
+delayedWorkingServer;<Request ID="905" Action="CREATE"><Connection Source="folderTest_1.F_OR_2.CNF" Destination="folderTest_1.localReadFolder3.REQ" /></Request>
+delayedWorkingServer;<Request ID="906" Action="CREATE"><Connection Source="folderTest_1.Writable3.IND" Destination="folderTest_1.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="907" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="folderTest_1.F_EQ_2_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="908" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_2_1.CNF" Destination="folderTest_1.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="909" Action="CREATE"><Connection Source="folderTest_1.F_EQ_5_1_1.CNF" Destination="folderTest_1.F_OR_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="910" Action="CREATE"><Connection Source="folderTest_1.F_OR_2_1.CNF" Destination="folderTest_1.localReadFolder5.REQ" /></Request>
+delayedWorkingServer;<Request ID="911" Action="CREATE"><Connection Source="folderTest_1.F_OR_1_1.CNF" Destination="folderTest_1.localReadFolder4.REQ" /></Request>
+delayedWorkingServer;<Request ID="912" Action="CREATE"><Connection Source="folderTest_1.F_EQ__1_1.CNF" Destination="folderTest_1.F_OR_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="913" Action="CREATE"><Connection Source="folderTest_1.Writable1.RD_1" Destination="folderTest_1.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="914" Action="CREATE"><Connection Source="folderTest_1.Writable3.RD_2" Destination="folderTest_1.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="915" Action="CREATE"><Connection Source="folderTest_1.Writable3.RD_1" Destination="folderTest_1.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="916" Action="CREATE"><Connection Source="folderTest_1.Writable2.RD_2" Destination="folderTest_1.BOOL2BOOL_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="917" Action="CREATE"><Connection Source="folderTest_1.Writable2.RD_1" Destination="folderTest_1.BOOL2BOOL_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="918" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_2_1.OUT" Destination="folderTest_1.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="919" Action="CREATE"><Connection Source="folderTest_1.F_EQ.OUT" Destination="folderTest_1.localReadFolder1.check" /></Request>
+delayedWorkingServer;<Request ID="920" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="folderTest_1.F_EQ_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="921" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_2_1.OUT" Destination="folderTest_1.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="922" Action="CREATE"><Connection Source="folderTest_1.F_EQ_2_1.OUT" Destination="folderTest_1.F_OR_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="923" Action="CREATE"><Connection Source="folderTest_1.F_EQ__1.OUT" Destination="folderTest_1.F_OR_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="924" Action="CREATE"><Connection Source="folderTest_1.F_OR_2.OUT" Destination="folderTest_1.localReadFolder3.check" /></Request>
+delayedWorkingServer;<Request ID="925" Action="CREATE"><Connection Source="folderTest_1.F_OR_1.OUT" Destination="folderTest_1.localReadFolder2.check" /></Request>
+delayedWorkingServer;<Request ID="926" Action="CREATE"><Connection Source="folderTest_1.F_EQ_1.OUT" Destination="folderTest_1.F_OR_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="927" Action="CREATE"><Connection Source="folderTest_1.F_EQ_5_1.OUT" Destination="folderTest_1.F_OR_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="928" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="folderTest_1.F_EQ_5_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="929" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_2_1.OUT" Destination="folderTest_1.F_EQ__1.IN1" /></Request>
+delayedWorkingServer;<Request ID="930" Action="CREATE"><Connection Source="folderTest_1.F_EQ_5_1_1.OUT" Destination="folderTest_1.F_OR_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="931" Action="CREATE"><Connection Source="folderTest_1.F_OR_1_1.OUT" Destination="folderTest_1.localReadFolder4.check" /></Request>
+delayedWorkingServer;<Request ID="932" Action="CREATE"><Connection Source="folderTest_1.F_EQ_1_1.OUT" Destination="folderTest_1.F_OR_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="933" Action="CREATE"><Connection Source="folderTest_1.F_EQ_2_1_1.OUT" Destination="folderTest_1.F_OR_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="934" Action="CREATE"><Connection Source="folderTest_1.F_OR_2_1.OUT" Destination="folderTest_1.localReadFolder5.check" /></Request>
+delayedWorkingServer;<Request ID="935" Action="CREATE"><Connection Source="folderTest_1.F_EQ__1_1.OUT" Destination="folderTest_1.F_OR_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="936" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="folderTest_1.F_EQ_5_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="937" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="folderTest_1.F_EQ_2_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="938" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_2_1.OUT" Destination="folderTest_1.F_EQ__1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="939" Action="CREATE"><Connection Source="folderTest_1.BOOL2BOOL_1_1_1_2_1.OUT" Destination="folderTest_1.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="940" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable1.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="941" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable2.INITO" Destination="byteStringNodeIdTest_1.Writable1.INIT" /></Request>
+delayedWorkingServer;<Request ID="942" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable3.INITO" Destination="byteStringNodeIdTest_1.Writable2.INIT" /></Request>
+delayedWorkingServer;<Request ID="943" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable1.IND" Destination="byteStringNodeIdTest_1.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="944" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable2.IND" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="945" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable3.IND" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="946" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_2_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="947" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ.CNF" Destination="byteStringNodeIdTest_1.localBytestringNumeric1.REQ" /></Request>
+delayedWorkingServer;<Request ID="948" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_2_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_5_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="949" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ__1.REQ" /></Request>
+delayedWorkingServer;<Request ID="950" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable2.IND" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="951" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="952" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_5_1.CNF" Destination="byteStringNodeIdTest_1.F_OR_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="953" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_2.CNF" Destination="byteStringNodeIdTest_1.localBytestringNumeric3.REQ" /></Request>
+delayedWorkingServer;<Request ID="954" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="955" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ__1.CNF" Destination="byteStringNodeIdTest_1.F_OR_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="956" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_1.CNF" Destination="byteStringNodeIdTest_1.localBytestringNumeric2.REQ" /></Request>
+delayedWorkingServer;<Request ID="957" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_5_1_1.CNF" Destination="byteStringNodeIdTest_1.F_OR_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="958" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ__1_1.CNF" Destination="byteStringNodeIdTest_1.F_OR_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="959" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_1_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ__1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="960" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_2_1_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_5_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="961" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable3.IND" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="962" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="963" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="byteStringNodeIdTest_1.F_EQ_2_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="964" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_1_1.CNF" Destination="byteStringNodeIdTest_1.localBytestringNumeric4.REQ" /></Request>
+delayedWorkingServer;<Request ID="965" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_2_1.CNF" Destination="byteStringNodeIdTest_1.localBytestringNumeric5.REQ" /></Request>
+delayedWorkingServer;<Request ID="966" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable1.RD_1" Destination="byteStringNodeIdTest_1.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="967" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable3.RD_2" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="968" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable3.RD_1" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="969" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable2.RD_2" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="970" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.Writable2.RD_1" Destination="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="971" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_2_1.OUT" Destination="byteStringNodeIdTest_1.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="972" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ.OUT" Destination="byteStringNodeIdTest_1.localBytestringNumeric1.check" /></Request>
+delayedWorkingServer;<Request ID="973" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_5_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="974" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="975" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_2_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="976" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ__1.OUT" Destination="byteStringNodeIdTest_1.F_OR_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="977" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1.OUT" Destination="byteStringNodeIdTest_1.F_EQ__1.IN1" /></Request>
+delayedWorkingServer;<Request ID="978" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_2_1.OUT" Destination="byteStringNodeIdTest_1.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="979" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="byteStringNodeIdTest_1.F_EQ_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="980" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="byteStringNodeIdTest_1.F_EQ_5_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="981" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_1.OUT" Destination="byteStringNodeIdTest_1.localBytestringNumeric2.check" /></Request>
+delayedWorkingServer;<Request ID="982" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_2.OUT" Destination="byteStringNodeIdTest_1.localBytestringNumeric3.check" /></Request>
+delayedWorkingServer;<Request ID="983" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ__1_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="984" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_1_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="985" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_2_1_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="986" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_EQ_5_1_1.OUT" Destination="byteStringNodeIdTest_1.F_OR_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="987" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_1_1.OUT" Destination="byteStringNodeIdTest_1.localBytestringNumeric4.check" /></Request>
+delayedWorkingServer;<Request ID="988" Action="CREATE"><Connection Source="byteStringNodeIdTest_1.F_OR_2_1.OUT" Destination="byteStringNodeIdTest_1.localBytestringNumeric5.check" /></Request>
+delayedWorkingServer;<Request ID="989" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable1.INITO" Destination="stringNodeIdTest.Writable3.INIT" /></Request>
+delayedWorkingServer;<Request ID="990" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable2.INITO" Destination="numericNodeIdTest_1.Writable1.INIT" /></Request>
+delayedWorkingServer;<Request ID="991" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable3.INITO" Destination="numericNodeIdTest_1.Writable2.INIT" /></Request>
+delayedWorkingServer;<Request ID="992" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable1.IND" Destination="numericNodeIdTest_1.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="993" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable2.IND" Destination="numericNodeIdTest_1.BOOL2BOOL_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="994" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable3.IND" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="995" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_2_1.CNF" Destination="numericNodeIdTest_1.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="996" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ.CNF" Destination="numericNodeIdTest_1.localNumeric1.REQ" /></Request>
+delayedWorkingServer;<Request ID="997" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_2_1.CNF" Destination="numericNodeIdTest_1.F_EQ_5_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="998" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_1.CNF" Destination="numericNodeIdTest_1.F_EQ__1.REQ" /></Request>
+delayedWorkingServer;<Request ID="999" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_2_1_1.CNF" Destination="numericNodeIdTest_1.F_EQ_5_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,000" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_1_1.CNF" Destination="numericNodeIdTest_1.F_EQ__1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,001" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable2.IND" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,002" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_2.CNF" Destination="numericNodeIdTest_1.localNumeric3.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,003" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_5_1.CNF" Destination="numericNodeIdTest_1.F_OR_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,004" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_1.CNF" Destination="numericNodeIdTest_1.localNumeric2.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,005" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ__1.CNF" Destination="numericNodeIdTest_1.F_OR_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,006" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1.CNF" Destination="numericNodeIdTest_1.F_EQ_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,007" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_2_1.CNF" Destination="numericNodeIdTest_1.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,008" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable3.IND" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,009" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="numericNodeIdTest_1.F_EQ_2_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,010" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.CNF" Destination="numericNodeIdTest_1.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,011" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ__1_1.CNF" Destination="numericNodeIdTest_1.F_OR_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,012" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_1_1.CNF" Destination="numericNodeIdTest_1.localNumeric4.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,013" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_2_1.CNF" Destination="numericNodeIdTest_1.localNumeric5.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,014" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_5_1_1.CNF" Destination="numericNodeIdTest_1.F_OR_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,015" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable1.RD_1" Destination="numericNodeIdTest_1.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,016" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable3.RD_2" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,017" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable3.RD_1" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,018" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable2.RD_2" Destination="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,019" Action="CREATE"><Connection Source="numericNodeIdTest_1.Writable2.RD_1" Destination="numericNodeIdTest_1.BOOL2BOOL_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,020" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,021" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ.OUT" Destination="numericNodeIdTest_1.localNumeric1.check" /></Request>
+delayedWorkingServer;<Request ID="1,022" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_5_1.OUT" Destination="numericNodeIdTest_1.F_OR_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,023" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_1.OUT" Destination="numericNodeIdTest_1.F_OR_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,024" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_2_1.OUT" Destination="numericNodeIdTest_1.F_OR_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,025" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ__1.OUT" Destination="numericNodeIdTest_1.F_OR_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,026" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ__1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,027" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,028" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,029" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ_5_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,030" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_1.OUT" Destination="numericNodeIdTest_1.localNumeric2.check" /></Request>
+delayedWorkingServer;<Request ID="1,031" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_2.OUT" Destination="numericNodeIdTest_1.localNumeric3.check" /></Request>
+delayedWorkingServer;<Request ID="1,032" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ__1_1.OUT" Destination="numericNodeIdTest_1.F_OR_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,033" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_1_1.OUT" Destination="numericNodeIdTest_1.F_OR_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,034" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_2_1_1.OUT" Destination="numericNodeIdTest_1.F_OR_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,035" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_EQ_5_1_1.OUT" Destination="numericNodeIdTest_1.F_OR_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,036" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_1_1.OUT" Destination="numericNodeIdTest_1.localNumeric4.check" /></Request>
+delayedWorkingServer;<Request ID="1,037" Action="CREATE"><Connection Source="numericNodeIdTest_1.F_OR_2_1.OUT" Destination="numericNodeIdTest_1.localNumeric5.check" /></Request>
+delayedWorkingServer;<Request ID="1,038" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,039" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTest_1.F_EQ__1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,040" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTest_1.F_EQ_2_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,041" Action="CREATE"><Connection Source="numericNodeIdTest_1.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTest_1.F_EQ_5_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,042" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.INITO" Destination="byteStringNodeIdTest_1.Writable3.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,043" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.INITO" Destination="stringNodeIdTest.Writable1.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,044" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.INITO" Destination="stringNodeIdTest.Writable2.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,045" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.IND" Destination="stringNodeIdTest.BOOL2BOOL_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,046" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,047" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,048" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_2_1.CNF" Destination="stringNodeIdTest.F_EQ.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,049" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ.CNF" Destination="stringNodeIdTest.localString1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,050" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1.CNF" Destination="stringNodeIdTest.F_EQ_5_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,051" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1.CNF" Destination="stringNodeIdTest.F_EQ__1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,052" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1_1.CNF" Destination="stringNodeIdTest.F_EQ__1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,053" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1_1.CNF" Destination="stringNodeIdTest.F_EQ_5_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,054" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,055" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,056" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1.CNF" Destination="stringNodeIdTest.F_OR_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,057" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1.CNF" Destination="stringNodeIdTest.F_OR_2.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,058" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2.CNF" Destination="stringNodeIdTest.localString3.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,059" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1.CNF" Destination="stringNodeIdTest.localString2.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,060" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,061" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,062" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,063" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1_1.CNF" Destination="stringNodeIdTest.F_OR_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,064" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1_1.CNF" Destination="stringNodeIdTest.localString4.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,065" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="stringNodeIdTest.F_EQ_2_1_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,066" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1_1.CNF" Destination="stringNodeIdTest.F_OR_2_1.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,067" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2_1.CNF" Destination="stringNodeIdTest.localString5.REQ" /></Request>
+delayedWorkingServer;<Request ID="1,068" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,069" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.RD_2" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,070" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,071" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.RD_2" Destination="stringNodeIdTest.BOOL2BOOL_1_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,072" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_1_2_1.IN" /></Request>
+delayedWorkingServer;<Request ID="1,073" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_2_1.OUT" Destination="stringNodeIdTest.F_EQ.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,074" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ.OUT" Destination="stringNodeIdTest.localString1.check" /></Request>
+delayedWorkingServer;<Request ID="1,075" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1.OUT" Destination="stringNodeIdTest.F_OR_2.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,076" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1.OUT" Destination="stringNodeIdTest.F_OR_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,077" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1.OUT" Destination="stringNodeIdTest.F_OR_2.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,078" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1.OUT" Destination="stringNodeIdTest.F_OR_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,079" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,080" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ__1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,081" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,082" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_5_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,083" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2.OUT" Destination="stringNodeIdTest.localString3.check" /></Request>
+delayedWorkingServer;<Request ID="1,084" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1.OUT" Destination="stringNodeIdTest.localString2.check" /></Request>
+delayedWorkingServer;<Request ID="1,085" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1_1.OUT" Destination="stringNodeIdTest.F_OR_1_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,086" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1_1.OUT" Destination="stringNodeIdTest.F_OR_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,087" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1_1.OUT" Destination="stringNodeIdTest.F_OR_2_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,088" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1_1.OUT" Destination="stringNodeIdTest.F_OR_2_1.IN2" /></Request>
+delayedWorkingServer;<Request ID="1,089" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,090" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ__1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,091" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTest.F_EQ_2_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,092" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTest.F_EQ_5_1_1.IN1" /></Request>
+delayedWorkingServer;<Request ID="1,093" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1_1.OUT" Destination="stringNodeIdTest.localString4.check" /></Request>
+delayedWorkingServer;<Request ID="1,094" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2_1.OUT" Destination="stringNodeIdTest.localString5.check" /></Request>
+delayedWorkingServer;<Request ID="1,095" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.INITO" Destination="E_SR.S" /></Request>
+delayedWorkingServer;<Request ID="1,096" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.IND" Destination="E_SR.R" /></Request>
+delayedWorkingServer;<Request ID="1,097" Action="CREATE"><Connection Source="E_SR.EO" Destination="E_SWITCH.EI" /></Request>
+delayedWorkingServer;<Request ID="1,098" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="E_SPLIT.EI" /></Request>
+delayedWorkingServer;<Request ID="1,099" Action="CREATE"><Connection Source="E_SPLIT.EO1" Destination="E_DELAY_1.START" /></Request>
+delayedWorkingServer;<Request ID="1,100" Action="CREATE"><Connection Source="E_SPLIT.EO2" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,101" Action="CREATE"><Connection Source="F_NOT.CNF" Destination="E_PERMIT_1.EI" /></Request>
+delayedWorkingServer;<Request ID="1,102" Action="CREATE"><Connection Source="E_PERMIT_1.EO" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,103" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,104" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_0_1.RSP" /></Request>
+delayedWorkingServer;<Request ID="1,105" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="folderTest_1.Writable3.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,106" Action="CREATE"><Connection Source="E_DELAY_1.EO" Destination="folderTest_1.Writable3.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,107" Action="CREATE"><Connection Source="E_DELAY_1_1.EO" Destination="numericNodeIdTest_1.Writable3.INIT" /></Request>
+delayedWorkingServer;<Request ID="1,108" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,109" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,110" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,111" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,112" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,113" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,114" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,115" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,116" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,117" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,118" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,119" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,120" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,121" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,122" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,123" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,124" Action="CREATE"><Connection Source="E_SR.Q" Destination="E_SWITCH.G" /></Request>
+delayedWorkingServer;<Request ID="1,125" Action="CREATE"><Connection Source="E_SR.Q" Destination="F_NOT.IN" /></Request>
+delayedWorkingServer;<Request ID="1,126" Action="CREATE"><Connection Source="F_NOT.OUT" Destination="E_PERMIT_1.PERMIT" /></Request>
+delayedWorkingServer;<Request ID="1,127" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.SUBSCRIBE_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,128" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.InitFinished.QI" /></Request>
+delayedWorkingServer;<Request ID="1,129" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.F_BOOL_TO_UINT.IN" /></Request>
+delayedWorkingServer;<Request ID="1,130" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootRead.QI" /></Request>
+delayedWorkingServer;<Request ID="1,131" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,132" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.SERVER_0_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,133" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootRead_2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,134" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootWrite2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,135" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootWrite.QI" /></Request>
+delayedWorkingServer;<Request ID="1,136" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.E_SWITCH.G" /></Request>
+delayedWorkingServer;<Request ID="1,137" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.SUBSCRIBE_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,138" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.PUBLISH_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,139" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.PUBLISH_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,140" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.SERVER_0.QI" /></Request>
+delayedWorkingServer;<Request ID="1,141" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,142" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,143" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,144" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,145" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,146" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,147" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.E_SWITCH.G" /></Request>
+delayedWorkingServer;<Request ID="1,148" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testObject.QI" /></Request>
+delayedWorkingServer;<Request ID="1,149" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testObject2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,150" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,151" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,152" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.SUBSCRIBE_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,153" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.E_SWITCH_1.G" /></Request>
+delayedWorkingServer;<Request ID="1,154" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.SUBSCRIBE_1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,155" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_2_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,156" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,157" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,158" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,159" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest_1.Writable1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,160" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest_1.Writable2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,161" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest_1.Writable3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,162" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest_1.Writable1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,163" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest_1.Writable2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,164" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest_1.Writable3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,165" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest_1.Writable1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,166" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest_1.Writable2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,167" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest_1.Writable3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,168" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable1.QI" /></Request>
+delayedWorkingServer;<Request ID="1,169" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable2.QI" /></Request>
+delayedWorkingServer;<Request ID="1,170" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable3.QI" /></Request>
+delayedWorkingServer;<Request ID="1,171" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/failingClient.fboot b/systemtests/src/modules/opc_ua/failingClient.fboot
new file mode 100644
index 0000000..401d484
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/failingClient.fboot
@@ -0,0 +1,442 @@
+;<Request ID="1" Action="CREATE"><FB Name="FailingClient" Type="EMB_RES" /></Request>
+FailingClient;<Request ID="2" Action="CREATE"><FB Name="E_SWITCH_1" Type="E_SWITCH" /></Request>
+FailingClient;<Request ID="3" Action="CREATE"><FB Name="InitFinishedSignal" Type="SUBSCRIBE_0" /></Request>
+FailingClient;<Request ID="4" Action="WRITE"><Connection Source="1" Destination="InitFinishedSignal.QI" /></Request>
+FailingClient;<Request ID="5" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="InitFinishedSignal.ID" /></Request>
+FailingClient;<Request ID="6" Action="CREATE"><FB Name="HandleInit.STEST_END_1" Type="STEST_END" /></Request>
+FailingClient;<Request ID="7" Action="CREATE"><FB Name="HandleInit.E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+FailingClient;<Request ID="8" Action="CREATE"><FB Name="HandleInit.F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+FailingClient;<Request ID="9" Action="CREATE"><FB Name="HandleInit.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+FailingClient;<Request ID="10" Action="WRITE"><Connection Source="1" Destination="HandleInit.PUBLISH_0_1.QI" /></Request>
+FailingClient;<Request ID="11" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="HandleInit.PUBLISH_0_1.ID" /></Request>
+FailingClient;<Request ID="12" Action="CREATE"><FB Name="E_DELAY" Type="E_DELAY" /></Request>
+FailingClient;<Request ID="13" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY.DT" /></Request>
+FailingClient;<Request ID="14" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+FailingClient;<Request ID="15" Action="CREATE"><FB Name="PUBLISH_0" Type="PUBLISH_0" /></Request>
+FailingClient;<Request ID="16" Action="WRITE"><Connection Source="1" Destination="PUBLISH_0.QI" /></Request>
+FailingClient;<Request ID="17" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="PUBLISH_0.ID" /></Request>
+FailingClient;<Request ID="18" Action="CREATE"><FB Name="UnknownNode.dint" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="19" Action="CREATE"><FB Name="UnknownNode.CallUnknown" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="20" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CallUnknown.QI" /></Request>
+FailingClient;<Request ID="21" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="UnknownNode.CallUnknown.ID" /></Request>
+FailingClient;<Request ID="22" Action="CREATE"><FB Name="UnknownNode.Read1" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="23" Action="WRITE"><Connection Source="1" Destination="UnknownNode.Read1.QI" /></Request>
+FailingClient;<Request ID="24" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="UnknownNode.Read1.ID" /></Request>
+FailingClient;<Request ID="25" Action="CREATE"><FB Name="UnknownNode.ClientCallUnknown" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="26" Action="CREATE"><FB Name="UnknownNode.dint_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="27" Action="CREATE"><FB Name="UnknownNode.F_NOT_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="28" Action="CREATE"><FB Name="UnknownNode.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="29" Action="CREATE"><FB Name="UnknownNode.ClienReadUnknown" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="30" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="31" Action="CREATE"><FB Name="UnknownNode.SubscribeUnknown" Type="SUBSCRIBE_1" /></Request>
+FailingClient;<Request ID="32" Action="WRITE"><Connection Source="1" Destination="UnknownNode.SubscribeUnknown.QI" /></Request>
+FailingClient;<Request ID="33" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/NotExisting,1:i=61499]" Destination="UnknownNode.SubscribeUnknown.ID" /></Request>
+FailingClient;<Request ID="34" Action="CREATE"><FB Name="UnknownNode.dint_2_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="35" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="36" Action="CREATE"><FB Name="UnknownNode.ClienRead3_1Unknown" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="37" Action="CREATE"><FB Name="UnknownNode.dint_3" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="38" Action="CREATE"><FB Name="UnknownNode.Read3_1Unknown" Type="CLIENT_0_3" /></Request>
+FailingClient;<Request ID="39" Action="WRITE"><Connection Source="1" Destination="UnknownNode.Read3_1Unknown.QI" /></Request>
+FailingClient;<Request ID="40" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello;opcuaFolderTestWithNodeIdByteString1]" Destination="UnknownNode.Read3_1Unknown.ID" /></Request>
+FailingClient;<Request ID="41" Action="CREATE"><FB Name="UnknownNode.dint_3_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="42" Action="CREATE"><FB Name="UnknownNode.dint_3_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="43" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3" Type="F_NOT" /></Request>
+FailingClient;<Request ID="44" Action="CREATE"><FB Name="UnknownNode.ClientWriteUnknown" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="45" Action="CREATE"><FB Name="UnknownNode.ClienWrite3_1Unknown" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="46" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="47" Action="CREATE"><FB Name="UnknownNode.dint_3_1_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="48" Action="CREATE"><FB Name="UnknownNode.dint_3_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="49" Action="CREATE"><FB Name="UnknownNode.dint_3_1_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="50" Action="CREATE"><FB Name="UnknownNode.CLIENT_0" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="51" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0.QI" /></Request>
+FailingClient;<Request ID="52" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="UnknownNode.CLIENT_0.ID" /></Request>
+FailingClient;<Request ID="53" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="54" Action="CREATE"><FB Name="UnknownNode.ClientCallTimeoutMethod" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="55" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="56" Action="CREATE"><FB Name="UnknownNode.ClientWrongMethodNodeId" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="57" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_1" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="58" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_1.QI" /></Request>
+FailingClient;<Request ID="59" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=61499]" Destination="UnknownNode.CLIENT_0_1.ID" /></Request>
+FailingClient;<Request ID="60" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="61" Action="CREATE"><FB Name="UnknownNode.ClientWrongReadNodeId" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="62" Action="CREATE"><FB Name="UnknownNode.ClientWrongWriteNodeId" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="63" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_1_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="64" Action="CREATE"><FB Name="UnknownNode.Subscribe3_1Unknown" Type="SUBSCRIBE_3" /></Request>
+FailingClient;<Request ID="65" Action="WRITE"><Connection Source="1" Destination="UnknownNode.Subscribe3_1Unknown.QI" /></Request>
+FailingClient;<Request ID="66" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello;opcuaFolderTestWithNodeIdByteString1]" Destination="UnknownNode.Subscribe3_1Unknown.ID" /></Request>
+FailingClient;<Request ID="67" Action="CREATE"><FB Name="UnknownNode.dint_3_1_2_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="68" Action="CREATE"><FB Name="UnknownNode.dint_3_1_1_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="69" Action="CREATE"><FB Name="UnknownNode.dint_3_2_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="70" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_1_1" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="71" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_1_1.QI" /></Request>
+FailingClient;<Request ID="72" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=61499]" Destination="UnknownNode.CLIENT_0_1_1.ID" /></Request>
+FailingClient;<Request ID="73" Action="CREATE"><FB Name="UnknownNode.DINT2DINT" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="74" Action="CREATE"><FB Name="UnknownNode.DINT2DINT_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="75" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_1_1_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="76" Action="CREATE"><FB Name="UnknownNode.DINT2DINT_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="77" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_1_1_2" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="78" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_1_1_2.QI" /></Request>
+FailingClient;<Request ID="79" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;,1:i=61499]" Destination="UnknownNode.CLIENT_0_1_1_2.ID" /></Request>
+FailingClient;<Request ID="80" Action="CREATE"><FB Name="UnknownNode.ClientWrongReadNodeId_NBN" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="81" Action="CREATE"><FB Name="UnknownNode.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="82" Action="CREATE"><FB Name="UnknownNode.dint_2_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="83" Action="CREATE"><FB Name="UnknownNode.Write1" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="84" Action="WRITE"><Connection Source="1" Destination="UnknownNode.Write1.QI" /></Request>
+FailingClient;<Request ID="85" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="UnknownNode.Write1.ID" /></Request>
+FailingClient;<Request ID="86" Action="CREATE"><FB Name="UnknownNode.Write3_1Unknown" Type="CLIENT_3_0" /></Request>
+FailingClient;<Request ID="87" Action="WRITE"><Connection Source="1" Destination="UnknownNode.Write3_1Unknown.QI" /></Request>
+FailingClient;<Request ID="88" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello;opcuaFolderTestWithNodeIdByteString1]" Destination="UnknownNode.Write3_1Unknown.ID" /></Request>
+FailingClient;<Request ID="89" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_1_1_1" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="90" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_1_1_1.QI" /></Request>
+FailingClient;<Request ID="91" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=61499]" Destination="UnknownNode.CLIENT_0_1_1_1.ID" /></Request>
+FailingClient;<Request ID="92" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_1_1_1_1" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="93" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_1_1_1_1.QI" /></Request>
+FailingClient;<Request ID="94" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;,1:i=61499]" Destination="UnknownNode.CLIENT_0_1_1_1_1.ID" /></Request>
+FailingClient;<Request ID="95" Action="CREATE"><FB Name="UnknownNode.ClientWrongWriteNodeId_NBN" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="96" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_1_1_2_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="97" Action="CREATE"><FB Name="UnknownNode.CLIENT_0_2" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="98" Action="WRITE"><Connection Source="1" Destination="UnknownNode.CLIENT_0_2.QI" /></Request>
+FailingClient;<Request ID="99" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/]" Destination="UnknownNode.CLIENT_0_2.ID" /></Request>
+FailingClient;<Request ID="100" Action="CREATE"><FB Name="UnknownNode.remoteEmptyBrowsename" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="101" Action="CREATE"><FB Name="UnknownNode.F_NOT_2_1_3_1_1_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="102" Action="CREATE"><FB Name="UnknownNode.SubscribeUnknown_Second" Type="SUBSCRIBE_2" /></Request>
+FailingClient;<Request ID="103" Action="WRITE"><Connection Source="1" Destination="UnknownNode.SubscribeUnknown_Second.QI" /></Request>
+FailingClient;<Request ID="104" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345;,1:i=61499]" Destination="UnknownNode.SubscribeUnknown_Second.ID" /></Request>
+FailingClient;<Request ID="105" Action="CREATE"><FB Name="UnknownNode.dint_2_1_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="106" Action="CREATE"><FB Name="WrongNoOfArguments.ClientWrongInputOutput" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="107" Action="CREATE"><FB Name="WrongNoOfArguments.ClientWrongInput" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="108" Action="CREATE"><FB Name="WrongNoOfArguments.F_NOT_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="109" Action="CREATE"><FB Name="WrongNoOfArguments.ClientWrongOutput" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="110" Action="CREATE"><FB Name="WrongNoOfArguments.F_NOT_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="111" Action="CREATE"><FB Name="WrongNoOfArguments.F_NOT" Type="F_NOT" /></Request>
+FailingClient;<Request ID="112" Action="CREATE"><FB Name="WrongNoOfArguments.WrongOutput" Type="CLIENT_1_4" /></Request>
+FailingClient;<Request ID="113" Action="WRITE"><Connection Source="1" Destination="WrongNoOfArguments.WrongOutput.QI" /></Request>
+FailingClient;<Request ID="114" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="WrongNoOfArguments.WrongOutput.ID" /></Request>
+FailingClient;<Request ID="115" Action="CREATE"><FB Name="WrongNoOfArguments.UDINT2UDINT_2_1" Type="UDINT2UDINT" /></Request>
+FailingClient;<Request ID="116" Action="CREATE"><FB Name="WrongNoOfArguments.WrongInput" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="117" Action="WRITE"><Connection Source="1" Destination="WrongNoOfArguments.WrongInput.QI" /></Request>
+FailingClient;<Request ID="118" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WrongNoOfArguments.WrongInput.ID" /></Request>
+FailingClient;<Request ID="119" Action="CREATE"><FB Name="WrongNoOfArguments.WrongInputOutput" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="120" Action="WRITE"><Connection Source="1" Destination="WrongNoOfArguments.WrongInputOutput.QI" /></Request>
+FailingClient;<Request ID="121" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="WrongNoOfArguments.WrongInputOutput.ID" /></Request>
+FailingClient;<Request ID="122" Action="CREATE"><FB Name="WrongNoOfArguments.UDINT2UDINT" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="123" Action="CREATE"><FB Name="WrongNoOfArguments.UDINT2UDINT_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="124" Action="CREATE"><FB Name="WrongNoOfArguments.UDINT2UDINT_2_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="125" Action="CREATE"><FB Name="WrongNoOfArguments.UDINT2UDINT_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="126" Action="CREATE"><FB Name="WrongType.STRING2STRING" Type="STRING2STRING" /></Request>
+FailingClient;<Request ID="127" Action="CREATE"><FB Name="WrongType.ReadWrongType" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="128" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="WrongType.ReadWrongType.ID" /></Request>
+FailingClient;<Request ID="129" Action="CREATE"><FB Name="WrongType.ReadWrongTypeTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="130" Action="CREATE"><FB Name="WrongType.F_NOT" Type="F_NOT" /></Request>
+FailingClient;<Request ID="131" Action="CREATE"><FB Name="WrongType.WrongOutput" Type="CLIENT_1" /></Request>
+FailingClient;<Request ID="132" Action="WRITE"><Connection Source="1" Destination="WrongType.WrongOutput.QI" /></Request>
+FailingClient;<Request ID="133" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="WrongType.WrongOutput.ID" /></Request>
+FailingClient;<Request ID="134" Action="CREATE"><FB Name="WrongType.DINT2DINT" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="135" Action="CREATE"><FB Name="WrongType.STRING2STRING_1" Type="STRING2STRING" /></Request>
+FailingClient;<Request ID="136" Action="CREATE"><FB Name="WrongType.F_NOT_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="137" Action="CREATE"><FB Name="WrongType.CallWrongOutputType" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="138" Action="CREATE"><FB Name="WrongType.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+FailingClient;<Request ID="139" Action="CREATE"><FB Name="WrongType.DINT2DINT_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="140" Action="CREATE"><FB Name="WrongType.CallWrongIInputTypeTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="141" Action="CREATE"><FB Name="WrongType.F_NOT_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="142" Action="CREATE"><FB Name="WrongType.WrongInput" Type="CLIENT_1" /></Request>
+FailingClient;<Request ID="143" Action="WRITE"><Connection Source="1" Destination="WrongType.WrongInput.QI" /></Request>
+FailingClient;<Request ID="144" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WrongType.WrongInput.ID" /></Request>
+FailingClient;<Request ID="145" Action="CREATE"><FB Name="WrongType.STRING2STRING_1_1_1" Type="STRING2STRING" /></Request>
+FailingClient;<Request ID="146" Action="CREATE"><FB Name="WrongType.F_NOT_1_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="147" Action="CREATE"><FB Name="WrongType.CallWrongInOutType" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="148" Action="CREATE"><FB Name="WrongType.WrongInputOutput" Type="CLIENT_1" /></Request>
+FailingClient;<Request ID="149" Action="WRITE"><Connection Source="1" Destination="WrongType.WrongInputOutput.QI" /></Request>
+FailingClient;<Request ID="150" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WrongType.WrongInputOutput.ID" /></Request>
+FailingClient;<Request ID="151" Action="CREATE"><FB Name="WrongType.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="152" Action="WRITE"><Connection Source="DINT#123" Destination="WrongType.DINT2DINT_1_1.IN" /></Request>
+FailingClient;<Request ID="153" Action="CREATE"><FB Name="WrongType.F_NOT_3" Type="F_NOT" /></Request>
+FailingClient;<Request ID="154" Action="CREATE"><FB Name="WrongType.ReadMethod" Type="CLIENT_0_1" /></Request>
+FailingClient;<Request ID="155" Action="WRITE"><Connection Source="1" Destination="WrongType.ReadMethod.QI" /></Request>
+FailingClient;<Request ID="156" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WrongType.ReadMethod.ID" /></Request>
+FailingClient;<Request ID="157" Action="CREATE"><FB Name="WrongType.ReadMethodTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="158" Action="CREATE"><FB Name="WrongType.CallVariable" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="159" Action="WRITE"><Connection Source="1" Destination="WrongType.CallVariable.QI" /></Request>
+FailingClient;<Request ID="160" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="WrongType.CallVariable.ID" /></Request>
+FailingClient;<Request ID="161" Action="CREATE"><FB Name="WrongType.F_NOT_3_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="162" Action="CREATE"><FB Name="WrongType.ReadMethodTest_1" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="163" Action="CREATE"><FB Name="WrongType.WriteWrongType" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="164" Action="WRITE"><Connection Source="1" Destination="WrongType.WriteWrongType.QI" /></Request>
+FailingClient;<Request ID="165" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="WrongType.WriteWrongType.ID" /></Request>
+FailingClient;<Request ID="166" Action="CREATE"><FB Name="WrongType.F_NOT_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="167" Action="CREATE"><FB Name="WrongType.WriteWrongTypeTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="168" Action="CREATE"><FB Name="WrongType.WriteFirstSameNode" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="169" Action="WRITE"><Connection Source="1" Destination="WrongType.WriteFirstSameNode.QI" /></Request>
+FailingClient;<Request ID="170" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/StringNodeId/folderTests/WithId]" Destination="WrongType.WriteFirstSameNode.ID" /></Request>
+FailingClient;<Request ID="171" Action="CREATE"><FB Name="WrongType.CallWrongInOutType_1" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="172" Action="CREATE"><FB Name="WrongType.WriteMethod" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="173" Action="WRITE"><Connection Source="1" Destination="WrongType.WriteMethod.QI" /></Request>
+FailingClient;<Request ID="174" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="WrongType.WriteMethod.ID" /></Request>
+FailingClient;<Request ID="175" Action="CREATE"><FB Name="WrongType.WriteNonWrittable" Type="CLIENT_1_0" /></Request>
+FailingClient;<Request ID="176" Action="WRITE"><Connection Source="1" Destination="WrongType.WriteNonWrittable.QI" /></Request>
+FailingClient;<Request ID="177" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/IsolatedTests/WRITEVariable]" Destination="WrongType.WriteNonWrittable.ID" /></Request>
+FailingClient;<Request ID="178" Action="CREATE"><FB Name="WrongType.F_NOT_3_2" Type="F_NOT" /></Request>
+FailingClient;<Request ID="179" Action="CREATE"><FB Name="WrongType.WriteMethodTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="180" Action="CREATE"><FB Name="WrongType.WriteNonWrittableTest" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="181" Action="CREATE"><FB Name="WrongType.F_NOT_3_2_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="182" Action="CREATE"><FB Name="WrongType.DINT2DINT_2" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="183" Action="CREATE"><FB Name="WrongInputOutput" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="184" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://192.168.0.100:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="WrongInputOutput.ID" /></Request>
+FailingClient;<Request ID="185" Action="CREATE"><FB Name="WrongInputOutput_1" Type="CLIENT_0" /></Request>
+FailingClient;<Request ID="186" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://192.168.0.100:4840#;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="WrongInputOutput_1.ID" /></Request>
+FailingClient;<Request ID="187" Action="CREATE"><FB Name="remoteInvalidActions.F_NOT" Type="F_NOT" /></Request>
+FailingClient;<Request ID="188" Action="CREATE"><FB Name="remoteInvalidActions.ccreateMethodRemotely" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="189" Action="CREATE"><FB Name="remoteInvalidActions.createObjectRemotely" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="190" Action="CREATE"><FB Name="remoteInvalidActions.deleteObjectRemotely" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="191" Action="CREATE"><FB Name="remoteInvalidActions.F_NOT_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="192" Action="CREATE"><FB Name="remoteInvalidActions.F_NOT_1_1" Type="F_NOT" /></Request>
+FailingClient;<Request ID="193" Action="CREATE"><FB Name="remoteInvalidActions.CLIENT_0" Type="SERVER_0" /></Request>
+FailingClient;<Request ID="194" Action="WRITE"><Connection Source="1" Destination="remoteInvalidActions.CLIENT_0.QI" /></Request>
+FailingClient;<Request ID="195" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;opc.tcp://localhost:4840#;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="remoteInvalidActions.CLIENT_0.ID" /></Request>
+FailingClient;<Request ID="196" Action="CREATE"><FB Name="remoteInvalidActions.CLIENT_0_1" Type="PUBLISH_0" /></Request>
+FailingClient;<Request ID="197" Action="WRITE"><Connection Source="1" Destination="remoteInvalidActions.CLIENT_0_1.QI" /></Request>
+FailingClient;<Request ID="198" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;opc.tcp://localhost:4840#;,0:i=61;/Objects/created1]" Destination="remoteInvalidActions.CLIENT_0_1.ID" /></Request>
+FailingClient;<Request ID="199" Action="CREATE"><FB Name="remoteInvalidActions.CLIENT_1_0" Type="PUBLISH_0" /></Request>
+FailingClient;<Request ID="200" Action="WRITE"><Connection Source="1" Destination="remoteInvalidActions.CLIENT_1_0.QI" /></Request>
+FailingClient;<Request ID="201" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;opc.tcp://localhost:4840#;/Objects/created1]" Destination="remoteInvalidActions.CLIENT_1_0.ID" /></Request>
+FailingClient;<Request ID="202" Action="CREATE"><FB Name="CLIENT_1" Type="CLIENT_1" /></Request>
+FailingClient;<Request ID="203" Action="WRITE"><Connection Source="1" Destination="CLIENT_1.QI" /></Request>
+FailingClient;<Request ID="204" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/testObject1/2:TestMethod2]" Destination="CLIENT_1.ID" /></Request>
+FailingClient;<Request ID="205" Action="CREATE"><FB Name="nonFBMethod" Type="TEST_CONDITION" /></Request>
+FailingClient;<Request ID="206" Action="CREATE"><FB Name="F_NOT_4" Type="F_NOT" /></Request>
+FailingClient;<Request ID="207" Action="CREATE"><FB Name="DINT2DINT_4" Type="DINT2DINT" /></Request>
+FailingClient;<Request ID="208" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.CNF" Destination="HandleInit.E_DEMUX_2_1.EI" /></Request>
+FailingClient;<Request ID="209" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO1" Destination="HandleInit.PUBLISH_0_1.INIT" /></Request>
+FailingClient;<Request ID="210" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.INITO" Destination="HandleInit.PUBLISH_0_1.REQ" /></Request>
+FailingClient;<Request ID="211" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO2" Destination="E_DELAY.START" /></Request>
+FailingClient;<Request ID="212" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.CNF" Destination="HandleInit.STEST_END_1.REQ" /></Request>
+FailingClient;<Request ID="213" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.OUT" Destination="HandleInit.E_DEMUX_2_1.K" /></Request>
+FailingClient;<Request ID="214" Action="CREATE"><Connection Source="UnknownNode.CallUnknown.INITO" Destination="UnknownNode.Read1.INIT" /></Request>
+FailingClient;<Request ID="215" Action="CREATE"><Connection Source="UnknownNode.CallUnknown.CNF" Destination="UnknownNode.F_NOT_2.REQ" /></Request>
+FailingClient;<Request ID="216" Action="CREATE"><Connection Source="UnknownNode.ClientCallUnknown.CNF" Destination="UnknownNode.Read1.REQ" /></Request>
+FailingClient;<Request ID="217" Action="CREATE"><Connection Source="UnknownNode.Read1.CNF" Destination="UnknownNode.F_NOT_2_1.REQ" /></Request>
+FailingClient;<Request ID="218" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2.CNF" Destination="UnknownNode.ClientCallUnknown.REQ" /></Request>
+FailingClient;<Request ID="219" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1.CNF" Destination="UnknownNode.ClienReadUnknown.REQ" /></Request>
+FailingClient;<Request ID="220" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_2.CNF" Destination="UnknownNode.ClienRead3_1Unknown.REQ" /></Request>
+FailingClient;<Request ID="221" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.CNF" Destination="UnknownNode.F_NOT_2_1_2.REQ" /></Request>
+FailingClient;<Request ID="222" Action="CREATE"><Connection Source="UnknownNode.SubscribeUnknown.INITO" Destination="UnknownNode.Read3_1Unknown.INIT" /></Request>
+FailingClient;<Request ID="223" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3.CNF" Destination="UnknownNode.ClientWriteUnknown.REQ" /></Request>
+FailingClient;<Request ID="224" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1.CNF" Destination="UnknownNode.ClienWrite3_1Unknown.REQ" /></Request>
+FailingClient;<Request ID="225" Action="CREATE"><Connection Source="UnknownNode.ClienWrite3_1Unknown.CNF" Destination="UnknownNode.CLIENT_0.REQ" /></Request>
+FailingClient;<Request ID="226" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1.REQ" /></Request>
+FailingClient;<Request ID="227" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1.CNF" Destination="UnknownNode.ClientCallTimeoutMethod.REQ" /></Request>
+FailingClient;<Request ID="228" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0.INITO" Destination="UnknownNode.CLIENT_0_1.INIT" /></Request>
+FailingClient;<Request ID="229" Action="CREATE"><Connection Source="UnknownNode.ClientCallTimeoutMethod.CNF" Destination="UnknownNode.CLIENT_0_1.REQ" /></Request>
+FailingClient;<Request ID="230" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="231" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1.CNF" Destination="UnknownNode.ClientWrongMethodNodeId.REQ" /></Request>
+FailingClient;<Request ID="232" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1.CNF" Destination="UnknownNode.ClientWrongReadNodeId.REQ" /></Request>
+FailingClient;<Request ID="233" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_1.CNF" Destination="UnknownNode.ClientWrongWriteNodeId.REQ" /></Request>
+FailingClient;<Request ID="234" Action="CREATE"><Connection Source="UnknownNode.ClientWriteUnknown.CNF" Destination="UnknownNode.Read3_1Unknown.REQ" /></Request>
+FailingClient;<Request ID="235" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1.INITO" Destination="UnknownNode.CLIENT_0_1_1.INIT" /></Request>
+FailingClient;<Request ID="236" Action="CREATE"><Connection Source="UnknownNode.ClientWrongMethodNodeId.CNF" Destination="UnknownNode.CLIENT_0_1_1.REQ" /></Request>
+FailingClient;<Request ID="237" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="238" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_2.CNF" Destination="UnknownNode.ClientWrongReadNodeId_NBN.REQ" /></Request>
+FailingClient;<Request ID="239" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_2.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_2.REQ" /></Request>
+FailingClient;<Request ID="240" Action="CREATE"><Connection Source="UnknownNode.ClientWrongWriteNodeId.CNF" Destination="UnknownNode.CLIENT_0_1_1_2.REQ" /></Request>
+FailingClient;<Request ID="241" Action="CREATE"><Connection Source="UnknownNode.Subscribe3_1Unknown.INITO" Destination="UnknownNode.CLIENT_0_1_1_2.INIT" /></Request>
+FailingClient;<Request ID="242" Action="CREATE"><Connection Source="UnknownNode.Read1.INITO" Destination="UnknownNode.Write1.INIT" /></Request>
+FailingClient;<Request ID="243" Action="CREATE"><Connection Source="UnknownNode.ClienReadUnknown.CNF" Destination="UnknownNode.Write1.REQ" /></Request>
+FailingClient;<Request ID="244" Action="CREATE"><Connection Source="UnknownNode.Write1.INITO" Destination="UnknownNode.SubscribeUnknown.INIT" /></Request>
+FailingClient;<Request ID="245" Action="CREATE"><Connection Source="UnknownNode.Write1.CNF" Destination="UnknownNode.F_NOT_2_1_3.REQ" /></Request>
+FailingClient;<Request ID="246" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.INITO" Destination="UnknownNode.Write3_1Unknown.INIT" /></Request>
+FailingClient;<Request ID="247" Action="CREATE"><Connection Source="UnknownNode.ClienRead3_1Unknown.CNF" Destination="UnknownNode.Write3_1Unknown.REQ" /></Request>
+FailingClient;<Request ID="248" Action="CREATE"><Connection Source="UnknownNode.Write3_1Unknown.INITO" Destination="UnknownNode.CLIENT_0.INIT" /></Request>
+FailingClient;<Request ID="249" Action="CREATE"><Connection Source="UnknownNode.Write3_1Unknown.CNF" Destination="UnknownNode.F_NOT_2_1_3_1.REQ" /></Request>
+FailingClient;<Request ID="250" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1.INITO" Destination="UnknownNode.CLIENT_0_1_1_1.INIT" /></Request>
+FailingClient;<Request ID="251" Action="CREATE"><Connection Source="UnknownNode.ClientWrongReadNodeId.CNF" Destination="UnknownNode.CLIENT_0_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="252" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1.INITO" Destination="UnknownNode.Subscribe3_1Unknown.INIT" /></Request>
+FailingClient;<Request ID="253" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="254" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_2.INITO" Destination="UnknownNode.CLIENT_0_1_1_1_1.INIT" /></Request>
+FailingClient;<Request ID="255" Action="CREATE"><Connection Source="UnknownNode.ClientWrongReadNodeId_NBN.CNF" Destination="UnknownNode.CLIENT_0_1_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="256" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_2_1.CNF" Destination="UnknownNode.ClientWrongWriteNodeId_NBN.REQ" /></Request>
+FailingClient;<Request ID="257" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1_1.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_2_1.REQ" /></Request>
+FailingClient;<Request ID="258" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_2.CNF" Destination="UnknownNode.remoteEmptyBrowsename.REQ" /></Request>
+FailingClient;<Request ID="259" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_2.CNF" Destination="UnknownNode.F_NOT_2_1_3_1_1_2.REQ" /></Request>
+FailingClient;<Request ID="260" Action="CREATE"><Connection Source="UnknownNode.remoteEmptyBrowsename.CNF" Destination="WrongType.STRING2STRING.REQ" /></Request>
+FailingClient;<Request ID="261" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_2.INITO" Destination="WrongType.WriteWrongType.INIT" /></Request>
+FailingClient;<Request ID="262" Action="CREATE"><Connection Source="UnknownNode.ClientWrongWriteNodeId_NBN.CNF" Destination="UnknownNode.CLIENT_0_2.REQ" /></Request>
+FailingClient;<Request ID="263" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1_1.INITO" Destination="UnknownNode.SubscribeUnknown_Second.INIT" /></Request>
+FailingClient;<Request ID="264" Action="CREATE"><Connection Source="UnknownNode.SubscribeUnknown_Second.INITO" Destination="UnknownNode.CLIENT_0_2.INIT" /></Request>
+FailingClient;<Request ID="265" Action="CREATE"><Connection Source="UnknownNode.Read1.RD_1" Destination="UnknownNode.dint.IN" /></Request>
+FailingClient;<Request ID="266" Action="CREATE"><Connection Source="UnknownNode.CallUnknown.QO" Destination="UnknownNode.F_NOT_2.IN" /></Request>
+FailingClient;<Request ID="267" Action="CREATE"><Connection Source="UnknownNode.CallUnknown.RD_1" Destination="UnknownNode.dint_1.IN" /></Request>
+FailingClient;<Request ID="268" Action="CREATE"><Connection Source="UnknownNode.Read1.QO" Destination="UnknownNode.F_NOT_2_1.IN" /></Request>
+FailingClient;<Request ID="269" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2.OUT" Destination="UnknownNode.ClientCallUnknown.check" /></Request>
+FailingClient;<Request ID="270" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1.OUT" Destination="UnknownNode.ClienReadUnknown.check" /></Request>
+FailingClient;<Request ID="271" Action="CREATE"><Connection Source="UnknownNode.SubscribeUnknown.RD_1" Destination="UnknownNode.dint_2_1.IN" /></Request>
+FailingClient;<Request ID="272" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_2.OUT" Destination="UnknownNode.ClienRead3_1Unknown.check" /></Request>
+FailingClient;<Request ID="273" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.RD_1" Destination="UnknownNode.dint_3.IN" /></Request>
+FailingClient;<Request ID="274" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.RD_2" Destination="UnknownNode.dint_3_1.IN" /></Request>
+FailingClient;<Request ID="275" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.RD_3" Destination="UnknownNode.dint_3_1_1.IN" /></Request>
+FailingClient;<Request ID="276" Action="CREATE"><Connection Source="UnknownNode.Read3_1Unknown.QO" Destination="UnknownNode.F_NOT_2_1_2.IN" /></Request>
+FailingClient;<Request ID="277" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3.OUT" Destination="UnknownNode.ClientWriteUnknown.check" /></Request>
+FailingClient;<Request ID="278" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1.OUT" Destination="UnknownNode.ClienWrite3_1Unknown.check" /></Request>
+FailingClient;<Request ID="279" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1.IN" /></Request>
+FailingClient;<Request ID="280" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1.OUT" Destination="UnknownNode.ClientCallTimeoutMethod.check" /></Request>
+FailingClient;<Request ID="281" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_1.IN" /></Request>
+FailingClient;<Request ID="282" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1.OUT" Destination="UnknownNode.ClientWrongMethodNodeId.check" /></Request>
+FailingClient;<Request ID="283" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1.OUT" Destination="UnknownNode.ClientWrongReadNodeId.check" /></Request>
+FailingClient;<Request ID="284" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_1.OUT" Destination="UnknownNode.ClientWrongWriteNodeId.check" /></Request>
+FailingClient;<Request ID="285" Action="CREATE"><Connection Source="UnknownNode.Subscribe3_1Unknown.RD_1" Destination="UnknownNode.dint_3_2_1.IN" /></Request>
+FailingClient;<Request ID="286" Action="CREATE"><Connection Source="UnknownNode.Subscribe3_1Unknown.RD_2" Destination="UnknownNode.dint_3_1_2_1.IN" /></Request>
+FailingClient;<Request ID="287" Action="CREATE"><Connection Source="UnknownNode.Subscribe3_1Unknown.RD_3" Destination="UnknownNode.dint_3_1_1_1_1.IN" /></Request>
+FailingClient;<Request ID="288" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1.IN" /></Request>
+FailingClient;<Request ID="289" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1.RD_1" Destination="UnknownNode.DINT2DINT.IN" /></Request>
+FailingClient;<Request ID="290" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_2.OUT" Destination="UnknownNode.ClientWrongReadNodeId_NBN.check" /></Request>
+FailingClient;<Request ID="291" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_2.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_2.IN" /></Request>
+FailingClient;<Request ID="292" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_2.RD_1" Destination="UnknownNode.DINT2DINT_2.IN" /></Request>
+FailingClient;<Request ID="293" Action="CREATE"><Connection Source="UnknownNode.BOOL2BOOL_2.OUT" Destination="UnknownNode.Write1.SD_1" /></Request>
+FailingClient;<Request ID="294" Action="CREATE"><Connection Source="UnknownNode.Write1.QO" Destination="UnknownNode.F_NOT_2_1_3.IN" /></Request>
+FailingClient;<Request ID="295" Action="CREATE"><Connection Source="UnknownNode.dint_3_2.OUT" Destination="UnknownNode.Write3_1Unknown.SD_1" /></Request>
+FailingClient;<Request ID="296" Action="CREATE"><Connection Source="UnknownNode.dint_3_1_2.OUT" Destination="UnknownNode.Write3_1Unknown.SD_2" /></Request>
+FailingClient;<Request ID="297" Action="CREATE"><Connection Source="UnknownNode.dint_3_1_1_1.OUT" Destination="UnknownNode.Write3_1Unknown.SD_3" /></Request>
+FailingClient;<Request ID="298" Action="CREATE"><Connection Source="UnknownNode.Write3_1Unknown.QO" Destination="UnknownNode.F_NOT_2_1_3_1.IN" /></Request>
+FailingClient;<Request ID="299" Action="CREATE"><Connection Source="UnknownNode.DINT2DINT_1.OUT" Destination="UnknownNode.CLIENT_0_1_1_1.SD_1" /></Request>
+FailingClient;<Request ID="300" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_1.IN" /></Request>
+FailingClient;<Request ID="301" Action="CREATE"><Connection Source="UnknownNode.DINT2DINT_1_1.OUT" Destination="UnknownNode.CLIENT_0_1_1_1_1.SD_1" /></Request>
+FailingClient;<Request ID="302" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_1_1_2_1.OUT" Destination="UnknownNode.ClientWrongWriteNodeId_NBN.check" /></Request>
+FailingClient;<Request ID="303" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_1_1_1_1.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_1_1_2_1.IN" /></Request>
+FailingClient;<Request ID="304" Action="CREATE"><Connection Source="UnknownNode.CLIENT_0_2.QO" Destination="UnknownNode.F_NOT_2_1_3_1_1_2.IN" /></Request>
+FailingClient;<Request ID="305" Action="CREATE"><Connection Source="UnknownNode.F_NOT_2_1_3_1_1_2.OUT" Destination="UnknownNode.remoteEmptyBrowsename.check" /></Request>
+FailingClient;<Request ID="306" Action="CREATE"><Connection Source="UnknownNode.SubscribeUnknown_Second.RD_1" Destination="UnknownNode.dint_2_1_1.IN" /></Request>
+FailingClient;<Request ID="307" Action="CREATE"><Connection Source="UnknownNode.SubscribeUnknown_Second.RD_2" Destination="UnknownNode.dint_2_1_1_1.IN" /></Request>
+FailingClient;<Request ID="308" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT_1_1.CNF" Destination="WrongNoOfArguments.ClientWrongInputOutput.REQ" /></Request>
+FailingClient;<Request ID="309" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT_1.CNF" Destination="WrongNoOfArguments.ClientWrongInput.REQ" /></Request>
+FailingClient;<Request ID="310" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT.CNF" Destination="WrongNoOfArguments.ClientWrongOutput.REQ" /></Request>
+FailingClient;<Request ID="311" Action="CREATE"><Connection Source="WrongNoOfArguments.ClientWrongInputOutput.CNF" Destination="UnknownNode.CallUnknown.REQ" /></Request>
+FailingClient;<Request ID="312" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.CNF" Destination="WrongNoOfArguments.F_NOT.REQ" /></Request>
+FailingClient;<Request ID="313" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.INITO" Destination="WrongNoOfArguments.WrongInput.INIT" /></Request>
+FailingClient;<Request ID="314" Action="CREATE"><Connection Source="WrongNoOfArguments.ClientWrongOutput.CNF" Destination="WrongNoOfArguments.WrongInput.REQ" /></Request>
+FailingClient;<Request ID="315" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInput.CNF" Destination="WrongNoOfArguments.F_NOT_1.REQ" /></Request>
+FailingClient;<Request ID="316" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInput.INITO" Destination="WrongNoOfArguments.WrongInputOutput.INIT" /></Request>
+FailingClient;<Request ID="317" Action="CREATE"><Connection Source="WrongNoOfArguments.ClientWrongInput.CNF" Destination="WrongNoOfArguments.WrongInputOutput.REQ" /></Request>
+FailingClient;<Request ID="318" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInputOutput.INITO" Destination="UnknownNode.CallUnknown.INIT" /></Request>
+FailingClient;<Request ID="319" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInputOutput.CNF" Destination="WrongNoOfArguments.F_NOT_1_1.REQ" /></Request>
+FailingClient;<Request ID="320" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT_1_1.OUT" Destination="WrongNoOfArguments.ClientWrongInputOutput.check" /></Request>
+FailingClient;<Request ID="321" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT_1.OUT" Destination="WrongNoOfArguments.ClientWrongInput.check" /></Request>
+FailingClient;<Request ID="322" Action="CREATE"><Connection Source="WrongNoOfArguments.F_NOT.OUT" Destination="WrongNoOfArguments.ClientWrongOutput.check" /></Request>
+FailingClient;<Request ID="323" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.QO" Destination="WrongNoOfArguments.F_NOT.IN" /></Request>
+FailingClient;<Request ID="324" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.RD_3" Destination="WrongNoOfArguments.UDINT2UDINT_2_1.IN" /></Request>
+FailingClient;<Request ID="325" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInput.QO" Destination="WrongNoOfArguments.F_NOT_1.IN" /></Request>
+FailingClient;<Request ID="326" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInputOutput.QO" Destination="WrongNoOfArguments.F_NOT_1_1.IN" /></Request>
+FailingClient;<Request ID="327" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.RD_1" Destination="WrongNoOfArguments.UDINT2UDINT.IN" /></Request>
+FailingClient;<Request ID="328" Action="CREATE"><Connection Source="WrongNoOfArguments.UDINT2UDINT.OUT" Destination="WrongNoOfArguments.WrongOutput.SD_1" /></Request>
+FailingClient;<Request ID="329" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.RD_2" Destination="WrongNoOfArguments.UDINT2UDINT_2.IN" /></Request>
+FailingClient;<Request ID="330" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongOutput.RD_4" Destination="WrongNoOfArguments.UDINT2UDINT_2_1_1.IN" /></Request>
+FailingClient;<Request ID="331" Action="CREATE"><Connection Source="WrongNoOfArguments.WrongInput.RD_1" Destination="WrongNoOfArguments.UDINT2UDINT_1.IN" /></Request>
+FailingClient;<Request ID="332" Action="CREATE"><Connection Source="WrongType.ReadWrongType.CNF" Destination="WrongType.F_NOT.REQ" /></Request>
+FailingClient;<Request ID="333" Action="CREATE"><Connection Source="WrongType.F_NOT.CNF" Destination="WrongType.ReadWrongTypeTest.REQ" /></Request>
+FailingClient;<Request ID="334" Action="CREATE"><Connection Source="WrongType.WrongOutput.CNF" Destination="WrongType.F_NOT_1.REQ" /></Request>
+FailingClient;<Request ID="335" Action="CREATE"><Connection Source="WrongType.F_NOT_1.CNF" Destination="WrongType.CallWrongOutputType.REQ" /></Request>
+FailingClient;<Request ID="336" Action="CREATE"><Connection Source="WrongType.F_NOT_1_1.CNF" Destination="WrongType.CallWrongIInputTypeTest.REQ" /></Request>
+FailingClient;<Request ID="337" Action="CREATE"><Connection Source="WrongType.WrongInput.CNF" Destination="WrongType.F_NOT_1_1.REQ" /></Request>
+FailingClient;<Request ID="338" Action="CREATE"><Connection Source="WrongType.CallWrongOutputType.CNF" Destination="WrongType.WrongInput.REQ" /></Request>
+FailingClient;<Request ID="339" Action="CREATE"><Connection Source="WrongType.WrongInputOutput.CNF" Destination="WrongType.F_NOT_1_1_1.REQ" /></Request>
+FailingClient;<Request ID="340" Action="CREATE"><Connection Source="WrongType.F_NOT_1_1_1.CNF" Destination="WrongType.CallWrongInOutType.REQ" /></Request>
+FailingClient;<Request ID="341" Action="CREATE"><Connection Source="WrongType.CallWrongIInputTypeTest.CNF" Destination="WrongType.WrongInputOutput.REQ" /></Request>
+FailingClient;<Request ID="342" Action="CREATE"><Connection Source="WrongType.ReadWrongTypeTest.CNF" Destination="WrongType.WrongOutput.REQ" /></Request>
+FailingClient;<Request ID="343" Action="CREATE"><Connection Source="WrongType.ReadWrongType.INITO" Destination="WrongType.WrongOutput.INIT" /></Request>
+FailingClient;<Request ID="344" Action="CREATE"><Connection Source="WrongType.WrongOutput.INITO" Destination="WrongType.WrongInput.INIT" /></Request>
+FailingClient;<Request ID="345" Action="CREATE"><Connection Source="WrongType.WrongInput.INITO" Destination="WrongType.WrongInputOutput.INIT" /></Request>
+FailingClient;<Request ID="346" Action="CREATE"><Connection Source="WrongType.CallWrongInOutType.CNF" Destination="WrongType.DINT2DINT_1_1.REQ" /></Request>
+FailingClient;<Request ID="347" Action="CREATE"><Connection Source="WrongType.ReadMethod.CNF" Destination="WrongType.F_NOT_3.REQ" /></Request>
+FailingClient;<Request ID="348" Action="CREATE"><Connection Source="WrongType.F_NOT_3.CNF" Destination="WrongType.ReadMethodTest.REQ" /></Request>
+FailingClient;<Request ID="349" Action="CREATE"><Connection Source="WrongType.ReadMethod.INITO" Destination="WrongType.CallVariable.INIT" /></Request>
+FailingClient;<Request ID="350" Action="CREATE"><Connection Source="WrongType.CallVariable.CNF" Destination="WrongType.F_NOT_3_1.REQ" /></Request>
+FailingClient;<Request ID="351" Action="CREATE"><Connection Source="WrongType.F_NOT_3_1.CNF" Destination="WrongType.ReadMethodTest_1.REQ" /></Request>
+FailingClient;<Request ID="352" Action="CREATE"><Connection Source="WrongType.ReadMethodTest.CNF" Destination="WrongType.CallVariable.REQ" /></Request>
+FailingClient;<Request ID="353" Action="CREATE"><Connection Source="WrongType.CallVariable.INITO" Destination="remoteInvalidActions.CLIENT_0.INIT" /></Request>
+FailingClient;<Request ID="354" Action="CREATE"><Connection Source="WrongType.ReadMethodTest_1.CNF" Destination="CLIENT_1.REQ" /></Request>
+FailingClient;<Request ID="355" Action="CREATE"><Connection Source="WrongType.STRING2STRING.CNF" Destination="WrongType.WriteWrongType.REQ" /></Request>
+FailingClient;<Request ID="356" Action="CREATE"><Connection Source="WrongType.WriteWrongType.INITO" Destination="WrongType.ReadWrongType.INIT" /></Request>
+FailingClient;<Request ID="357" Action="CREATE"><Connection Source="WrongType.WriteWrongTypeTest.CNF" Destination="WrongType.ReadWrongType.REQ" /></Request>
+FailingClient;<Request ID="358" Action="CREATE"><Connection Source="WrongType.F_NOT_2.CNF" Destination="WrongType.WriteWrongTypeTest.REQ" /></Request>
+FailingClient;<Request ID="359" Action="CREATE"><Connection Source="WrongType.WriteWrongType.CNF" Destination="WrongType.F_NOT_2.REQ" /></Request>
+FailingClient;<Request ID="360" Action="CREATE"><Connection Source="WrongType.WrongInputOutput.INITO" Destination="WrongType.WriteFirstSameNode.INIT" /></Request>
+FailingClient;<Request ID="361" Action="CREATE"><Connection Source="WrongType.DINT2DINT_1_1.CNF" Destination="WrongType.WriteFirstSameNode.REQ" /></Request>
+FailingClient;<Request ID="362" Action="CREATE"><Connection Source="WrongType.WriteFirstSameNode.CNF" Destination="WrongType.CallWrongInOutType_1.REQ" /></Request>
+FailingClient;<Request ID="363" Action="CREATE"><Connection Source="WrongType.WriteMethod.INITO" Destination="WrongType.ReadMethod.INIT" /></Request>
+FailingClient;<Request ID="364" Action="CREATE"><Connection Source="WrongType.WriteFirstSameNode.INITO" Destination="WrongType.WriteNonWrittable.INIT" /></Request>
+FailingClient;<Request ID="365" Action="CREATE"><Connection Source="WrongType.CallWrongInOutType_1.CNF" Destination="WrongType.WriteNonWrittable.REQ" /></Request>
+FailingClient;<Request ID="366" Action="CREATE"><Connection Source="WrongType.WriteNonWrittable.INITO" Destination="WrongType.WriteMethod.INIT" /></Request>
+FailingClient;<Request ID="367" Action="CREATE"><Connection Source="WrongType.F_NOT_3_2_1.CNF" Destination="WrongType.WriteNonWrittableTest.REQ" /></Request>
+FailingClient;<Request ID="368" Action="CREATE"><Connection Source="WrongType.WriteNonWrittableTest.CNF" Destination="WrongType.WriteMethod.REQ" /></Request>
+FailingClient;<Request ID="369" Action="CREATE"><Connection Source="WrongType.WriteNonWrittable.CNF" Destination="WrongType.F_NOT_3_2_1.REQ" /></Request>
+FailingClient;<Request ID="370" Action="CREATE"><Connection Source="WrongType.WriteMethodTest.CNF" Destination="WrongType.ReadMethod.REQ" /></Request>
+FailingClient;<Request ID="371" Action="CREATE"><Connection Source="WrongType.F_NOT_3_2.CNF" Destination="WrongType.WriteMethodTest.REQ" /></Request>
+FailingClient;<Request ID="372" Action="CREATE"><Connection Source="WrongType.WriteMethod.CNF" Destination="WrongType.F_NOT_3_2.REQ" /></Request>
+FailingClient;<Request ID="373" Action="CREATE"><Connection Source="WrongType.ReadWrongType.RD_1" Destination="WrongType.STRING2STRING.IN" /></Request>
+FailingClient;<Request ID="374" Action="CREATE"><Connection Source="WrongType.F_NOT.OUT" Destination="WrongType.ReadWrongTypeTest.check" /></Request>
+FailingClient;<Request ID="375" Action="CREATE"><Connection Source="WrongType.ReadWrongType.QO" Destination="WrongType.F_NOT.IN" /></Request>
+FailingClient;<Request ID="376" Action="CREATE"><Connection Source="WrongType.DINT2DINT.OUT" Destination="WrongType.WrongOutput.SD_1" /></Request>
+FailingClient;<Request ID="377" Action="CREATE"><Connection Source="WrongType.WrongOutput.RD_1" Destination="WrongType.STRING2STRING_1.IN" /></Request>
+FailingClient;<Request ID="378" Action="CREATE"><Connection Source="WrongType.WrongOutput.QO" Destination="WrongType.F_NOT_1.IN" /></Request>
+FailingClient;<Request ID="379" Action="CREATE"><Connection Source="WrongType.F_NOT_1.OUT" Destination="WrongType.CallWrongOutputType.check" /></Request>
+FailingClient;<Request ID="380" Action="CREATE"><Connection Source="WrongType.WrongInput.QO" Destination="WrongType.F_NOT_1_1.IN" /></Request>
+FailingClient;<Request ID="381" Action="CREATE"><Connection Source="WrongType.F_NOT_1_1.OUT" Destination="WrongType.CallWrongIInputTypeTest.check" /></Request>
+FailingClient;<Request ID="382" Action="CREATE"><Connection Source="WrongType.STRING2STRING_1_1.OUT" Destination="WrongType.WrongInput.SD_1" /></Request>
+FailingClient;<Request ID="383" Action="CREATE"><Connection Source="WrongType.WrongInput.RD_1" Destination="WrongType.DINT2DINT_1.IN" /></Request>
+FailingClient;<Request ID="384" Action="CREATE"><Connection Source="WrongType.WrongInputOutput.QO" Destination="WrongType.F_NOT_1_1_1.IN" /></Request>
+FailingClient;<Request ID="385" Action="CREATE"><Connection Source="WrongType.STRING2STRING_1_1_1.OUT" Destination="WrongType.WrongInputOutput.SD_1" /></Request>
+FailingClient;<Request ID="386" Action="CREATE"><Connection Source="WrongType.F_NOT_1_1_1.OUT" Destination="WrongType.CallWrongInOutType.check" /></Request>
+FailingClient;<Request ID="387" Action="CREATE"><Connection Source="WrongType.WrongInputOutput.RD_1" Destination="WrongType.STRING2STRING_1_1_1.IN" /></Request>
+FailingClient;<Request ID="388" Action="CREATE"><Connection Source="WrongType.ReadMethod.QO" Destination="WrongType.F_NOT_3.IN" /></Request>
+FailingClient;<Request ID="389" Action="CREATE"><Connection Source="WrongType.F_NOT_3.OUT" Destination="WrongType.ReadMethodTest.check" /></Request>
+FailingClient;<Request ID="390" Action="CREATE"><Connection Source="WrongType.CallVariable.QO" Destination="WrongType.F_NOT_3_1.IN" /></Request>
+FailingClient;<Request ID="391" Action="CREATE"><Connection Source="WrongType.F_NOT_3_1.OUT" Destination="WrongType.ReadMethodTest_1.check" /></Request>
+FailingClient;<Request ID="392" Action="CREATE"><Connection Source="WrongType.STRING2STRING.OUT" Destination="WrongType.WriteWrongType.SD_1" /></Request>
+FailingClient;<Request ID="393" Action="CREATE"><Connection Source="WrongType.F_NOT_2.OUT" Destination="WrongType.WriteWrongTypeTest.check" /></Request>
+FailingClient;<Request ID="394" Action="CREATE"><Connection Source="WrongType.WriteWrongType.QO" Destination="WrongType.F_NOT_2.IN" /></Request>
+FailingClient;<Request ID="395" Action="CREATE"><Connection Source="WrongType.DINT2DINT_1_1.OUT" Destination="WrongType.WriteFirstSameNode.SD_1" /></Request>
+FailingClient;<Request ID="396" Action="CREATE"><Connection Source="WrongType.WriteFirstSameNode.QO" Destination="WrongType.CallWrongInOutType_1.check" /></Request>
+FailingClient;<Request ID="397" Action="CREATE"><Connection Source="WrongType.DINT2DINT_1_1.OUT" Destination="WrongType.WriteMethod.SD_1" /></Request>
+FailingClient;<Request ID="398" Action="CREATE"><Connection Source="WrongType.DINT2DINT_1_1.OUT" Destination="WrongType.WriteNonWrittable.SD_1" /></Request>
+FailingClient;<Request ID="399" Action="CREATE"><Connection Source="WrongType.F_NOT_3_2_1.OUT" Destination="WrongType.WriteNonWrittableTest.check" /></Request>
+FailingClient;<Request ID="400" Action="CREATE"><Connection Source="WrongType.WriteNonWrittable.QO" Destination="WrongType.F_NOT_3_2_1.IN" /></Request>
+FailingClient;<Request ID="401" Action="CREATE"><Connection Source="WrongType.F_NOT_3_2.OUT" Destination="WrongType.WriteMethodTest.check" /></Request>
+FailingClient;<Request ID="402" Action="CREATE"><Connection Source="WrongType.WriteMethod.QO" Destination="WrongType.F_NOT_3_2.IN" /></Request>
+FailingClient;<Request ID="403" Action="CREATE"><Connection Source="WrongType.ReadMethod.RD_1" Destination="WrongType.DINT2DINT_2.IN" /></Request>
+FailingClient;<Request ID="404" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT.CNF" Destination="remoteInvalidActions.ccreateMethodRemotely.REQ" /></Request>
+FailingClient;<Request ID="405" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT_1.CNF" Destination="remoteInvalidActions.createObjectRemotely.REQ" /></Request>
+FailingClient;<Request ID="406" Action="CREATE"><Connection Source="remoteInvalidActions.deleteObjectRemotely.CNF" Destination="CLIENT_1.INIT" /></Request>
+FailingClient;<Request ID="407" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT_1_1.CNF" Destination="remoteInvalidActions.deleteObjectRemotely.REQ" /></Request>
+FailingClient;<Request ID="408" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_0.INITO" Destination="remoteInvalidActions.F_NOT.REQ" /></Request>
+FailingClient;<Request ID="409" Action="CREATE"><Connection Source="remoteInvalidActions.ccreateMethodRemotely.CNF" Destination="remoteInvalidActions.CLIENT_0_1.INIT" /></Request>
+FailingClient;<Request ID="410" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_0_1.INITO" Destination="remoteInvalidActions.F_NOT_1.REQ" /></Request>
+FailingClient;<Request ID="411" Action="CREATE"><Connection Source="remoteInvalidActions.createObjectRemotely.CNF" Destination="remoteInvalidActions.CLIENT_1_0.INIT" /></Request>
+FailingClient;<Request ID="412" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_1_0.INITO" Destination="remoteInvalidActions.F_NOT_1_1.REQ" /></Request>
+FailingClient;<Request ID="413" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT.OUT" Destination="remoteInvalidActions.ccreateMethodRemotely.check" /></Request>
+FailingClient;<Request ID="414" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT_1.OUT" Destination="remoteInvalidActions.createObjectRemotely.check" /></Request>
+FailingClient;<Request ID="415" Action="CREATE"><Connection Source="remoteInvalidActions.F_NOT_1_1.OUT" Destination="remoteInvalidActions.deleteObjectRemotely.check" /></Request>
+FailingClient;<Request ID="416" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_0.QO" Destination="remoteInvalidActions.F_NOT.IN" /></Request>
+FailingClient;<Request ID="417" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_0_1.QO" Destination="remoteInvalidActions.F_NOT_1.IN" /></Request>
+FailingClient;<Request ID="418" Action="CREATE"><Connection Source="remoteInvalidActions.CLIENT_1_0.QO" Destination="remoteInvalidActions.F_NOT_1_1.IN" /></Request>
+FailingClient;<Request ID="419" Action="CREATE"><Connection Source="E_SWITCH_1.EO0" Destination="HandleInit.F_BOOL_TO_UINT_1.REQ" /></Request>
+FailingClient;<Request ID="420" Action="CREATE"><Connection Source="InitFinishedSignal.INITO" Destination="PUBLISH_0.INIT" /></Request>
+FailingClient;<Request ID="421" Action="CREATE"><Connection Source="InitFinishedSignal.IND" Destination="PUBLISH_0.REQ" /></Request>
+FailingClient;<Request ID="422" Action="CREATE"><Connection Source="PUBLISH_0.CNF" Destination="E_SR_2.S" /></Request>
+FailingClient;<Request ID="423" Action="CREATE"><Connection Source="START.COLD" Destination="InitFinishedSignal.INIT" /></Request>
+FailingClient;<Request ID="424" Action="CREATE"><Connection Source="START.WARM" Destination="InitFinishedSignal.INIT" /></Request>
+FailingClient;<Request ID="425" Action="CREATE"><Connection Source="E_DELAY.EO" Destination="WrongNoOfArguments.WrongOutput.REQ" /></Request>
+FailingClient;<Request ID="426" Action="CREATE"><Connection Source="WrongInputOutput.INITO" Destination="WrongInputOutput_1.INIT" /></Request>
+FailingClient;<Request ID="427" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="WrongInputOutput.INIT" /></Request>
+FailingClient;<Request ID="428" Action="CREATE"><Connection Source="E_SWITCH_1.EO1" Destination="WrongNoOfArguments.WrongOutput.INIT" /></Request>
+FailingClient;<Request ID="429" Action="CREATE"><Connection Source="WrongInputOutput_1.INITO" Destination="E_SWITCH_1.EI" /></Request>
+FailingClient;<Request ID="430" Action="CREATE"><Connection Source="CLIENT_1.CNF" Destination="F_NOT_4.REQ" /></Request>
+FailingClient;<Request ID="431" Action="CREATE"><Connection Source="F_NOT_4.CNF" Destination="nonFBMethod.REQ" /></Request>
+FailingClient;<Request ID="432" Action="CREATE"><Connection Source="CLIENT_1.INITO" Destination="HandleInit.F_BOOL_TO_UINT_1.REQ" /></Request>
+FailingClient;<Request ID="433" Action="CREATE"><Connection Source="nonFBMethod.CNF" Destination="E_SR_2.R" /></Request>
+FailingClient;<Request ID="434" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="HandleInit.F_BOOL_TO_UINT_1.IN" /></Request>
+FailingClient;<Request ID="435" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="E_SWITCH_1.G" /></Request>
+FailingClient;<Request ID="436" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="WrongInputOutput.QI" /></Request>
+FailingClient;<Request ID="437" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="WrongInputOutput_1.QI" /></Request>
+FailingClient;<Request ID="438" Action="CREATE"><Connection Source="CLIENT_1.QO" Destination="F_NOT_4.IN" /></Request>
+FailingClient;<Request ID="439" Action="CREATE"><Connection Source="F_NOT_4.OUT" Destination="nonFBMethod.check" /></Request>
+FailingClient;<Request ID="440" Action="CREATE"><Connection Source="CLIENT_1.RD_1" Destination="DINT2DINT_4.IN" /></Request>
+FailingClient;<Request ID="441" Action="CREATE"><Connection Source="DINT2DINT_4.OUT" Destination="CLIENT_1.SD_1" /></Request>
+FailingClient;<Request ID="442" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/failingServer.fboot b/systemtests/src/modules/opc_ua/failingServer.fboot
new file mode 100644
index 0000000..3704978
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/failingServer.fboot
@@ -0,0 +1,532 @@
+;<Request ID="1" Action="CREATE"><FB Name="FailingServer" Type="EMB_RES" /></Request>
+FailingServer;<Request ID="2" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+FailingServer;<Request ID="3" Action="CREATE"><FB Name="WorngInputs" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="4" Action="WRITE"><Connection Source="0" Destination="WorngInputs.check" /></Request>
+FailingServer;<Request ID="5" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+FailingServer;<Request ID="6" Action="CREATE"><FB Name="GoodInputs" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="7" Action="CREATE"><FB Name="SUBSCRIBE_0_1" Type="SUBSCRIBE_0" /></Request>
+FailingServer;<Request ID="8" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_0_1.QI" /></Request>
+FailingServer;<Request ID="9" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="SUBSCRIBE_0_1.ID" /></Request>
+FailingServer;<Request ID="10" Action="CREATE"><FB Name="WorngInputsOutputs" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="11" Action="WRITE"><Connection Source="0" Destination="WorngInputsOutputs.check" /></Request>
+FailingServer;<Request ID="12" Action="CREATE"><FB Name="HandleInitLocal.InitFinished" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="13" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="HandleInitLocal.InitFinished.ID" /></Request>
+FailingServer;<Request ID="14" Action="CREATE"><FB Name="HandleInitLocal.SUBSCRIBE_0" Type="SUBSCRIBE_0" /></Request>
+FailingServer;<Request ID="15" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="HandleInitLocal.SUBSCRIBE_0.ID" /></Request>
+FailingServer;<Request ID="16" Action="CREATE"><FB Name="HandleInitLocal.E_CYCLE" Type="E_CYCLE" /></Request>
+FailingServer;<Request ID="17" Action="WRITE"><Connection Source="T#1000ms" Destination="HandleInitLocal.E_CYCLE.DT" /></Request>
+FailingServer;<Request ID="18" Action="CREATE"><FB Name="HandleInitLocal.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+FailingServer;<Request ID="19" Action="CREATE"><FB Name="HandleInitLocal.STEST_END" Type="STEST_END" /></Request>
+FailingServer;<Request ID="20" Action="CREATE"><FB Name="HandleInitLocal.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+FailingServer;<Request ID="21" Action="CREATE"><FB Name="Writable1" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="22" Action="WRITE"><Connection Source="1" Destination="Writable1.QI" /></Request>
+FailingServer;<Request ID="23" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345/]" Destination="Writable1.ID" /></Request>
+FailingServer;<Request ID="24" Action="CREATE"><FB Name="WorngInputsType" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="25" Action="WRITE"><Connection Source="0" Destination="WorngInputsType.check" /></Request>
+FailingServer;<Request ID="26" Action="CREATE"><FB Name="BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="27" Action="WRITE"><Connection Source="DINT#123" Destination="BOOL2BOOL_2_1.IN" /></Request>
+FailingServer;<Request ID="28" Action="CREATE"><FB Name="SERVER_0" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="29" Action="WRITE"><Connection Source="1" Destination="SERVER_0.QI" /></Request>
+FailingServer;<Request ID="30" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="SERVER_0.ID" /></Request>
+FailingServer;<Request ID="31" Action="CREATE"><FB Name="SERVER_0_1" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="32" Action="WRITE"><Connection Source="1" Destination="SERVER_0_1.QI" /></Request>
+FailingServer;<Request ID="33" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="SERVER_0_1.ID" /></Request>
+FailingServer;<Request ID="34" Action="CREATE"><FB Name="SERVER_0_1_1" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="35" Action="WRITE"><Connection Source="1" Destination="SERVER_0_1_1.QI" /></Request>
+FailingServer;<Request ID="36" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="SERVER_0_1_1.ID" /></Request>
+FailingServer;<Request ID="37" Action="CREATE"><FB Name="DINT2DINT" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="38" Action="CREATE"><FB Name="DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="39" Action="CREATE"><FB Name="DINT2DINT_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="40" Action="CREATE"><FB Name="SameNodeIdWrite" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="41" Action="CREATE"><FB Name="BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="42" Action="WRITE"><Connection Source="DINT#123" Destination="BOOL2BOOL_2_1_1.IN" /></Request>
+FailingServer;<Request ID="43" Action="CREATE"><FB Name="Writable1_1" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="44" Action="WRITE"><Connection Source="1" Destination="Writable1_1.QI" /></Request>
+FailingServer;<Request ID="45" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/WithId1,1:i=12345]" Destination="Writable1_1.ID" /></Request>
+FailingServer;<Request ID="46" Action="CREATE"><FB Name="BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="47" Action="WRITE"><Connection Source="DINT#123" Destination="BOOL2BOOL_2_1_1_1.IN" /></Request>
+FailingServer;<Request ID="48" Action="CREATE"><FB Name="SameNameDifferentNodeIdW" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="49" Action="CREATE"><FB Name="Writable1_1_1" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="50" Action="WRITE"><Connection Source="1" Destination="Writable1_1_1.QI" /></Request>
+FailingServer;<Request ID="51" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=helloWrite]" Destination="Writable1_1_1.ID" /></Request>
+FailingServer;<Request ID="52" Action="CREATE"><FB Name="SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="53" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1_1.QI" /></Request>
+FailingServer;<Request ID="54" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="SUBSCRIBE_1_1.ID" /></Request>
+FailingServer;<Request ID="55" Action="CREATE"><FB Name="BOOL2BOOL_3_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="56" Action="CREATE"><FB Name="SUBSCRIBE_1_1_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="57" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1_1_1.QI" /></Request>
+FailingServer;<Request ID="58" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="SUBSCRIBE_1_1_1.ID" /></Request>
+FailingServer;<Request ID="59" Action="CREATE"><FB Name="BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="60" Action="CREATE"><FB Name="SameNodeSecondRead" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="61" Action="CREATE"><FB Name="ReadExistingWritable" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="62" Action="CREATE"><FB Name="F_NOT_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="63" Action="CREATE"><FB Name="F_NOT" Type="F_NOT" /></Request>
+FailingServer;<Request ID="64" Action="CREATE"><FB Name="SUBSCRIBE_1_1_1_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="65" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1_1_1_1.QI" /></Request>
+FailingServer;<Request ID="66" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="SUBSCRIBE_1_1_1_1.ID" /></Request>
+FailingServer;<Request ID="67" Action="CREATE"><FB Name="SUBSCRIBE_wrongPath" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="68" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_wrongPath.QI" /></Request>
+FailingServer;<Request ID="69" Action="WRITE"><Connection Source="opc_ua[READ;///]" Destination="SUBSCRIBE_wrongPath.ID" /></Request>
+FailingServer;<Request ID="70" Action="CREATE"><FB Name="F_NOT_1_2_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="71" Action="CREATE"><FB Name="SERVER_0_2" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="72" Action="WRITE"><Connection Source="1" Destination="SERVER_0_2.QI" /></Request>
+FailingServer;<Request ID="73" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="SERVER_0_2.ID" /></Request>
+FailingServer;<Request ID="74" Action="CREATE"><FB Name="DoubleMethod" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="75" Action="CREATE"><FB Name="BOOL2BOOL_3_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="76" Action="CREATE"><FB Name="BOOL2BOOL_3_1_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="77" Action="CREATE"><FB Name="F_NOT_1_2_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="78" Action="CREATE"><FB Name="ValidNode" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="79" Action="CREATE"><FB Name="WrongPath" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="80" Action="CREATE"><FB Name="BOOL2BOOL_3_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="81" Action="CREATE"><FB Name="BOOL2BOOL_3_2_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="82" Action="CREATE"><FB Name="F_NOT_1_2_1_1_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="83" Action="CREATE"><FB Name="SUBSCRIBE_150" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="84" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_150.QI" /></Request>
+FailingServer;<Request ID="85" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="SUBSCRIBE_150.ID" /></Request>
+FailingServer;<Request ID="86" Action="CREATE"><FB Name="UnconnectedRD" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="87" Action="CREATE"><FB Name="UnconnectedSD" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="88" Action="CREATE"><FB Name="BOOL2BOOL_3_2_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="89" Action="CREATE"><FB Name="STRING2STRING_1" Type="STRING2STRING" /></Request>
+FailingServer;<Request ID="90" Action="CREATE"><FB Name="F_NOT_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="91" Action="CREATE"><FB Name="F_NOT_1_2_1_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="92" Action="CREATE"><FB Name="DifferentTypesOutput" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="93" Action="CREATE"><FB Name="SUBSCRIBE_140" Type="SUBSCRIBE_2" /></Request>
+FailingServer;<Request ID="94" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_140.QI" /></Request>
+FailingServer;<Request ID="95" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="SUBSCRIBE_140.ID" /></Request>
+FailingServer;<Request ID="96" Action="CREATE"><FB Name="Writable1_1_2" Type="PUBLISH_2" /></Request>
+FailingServer;<Request ID="97" Action="WRITE"><Connection Source="1" Destination="Writable1_1_2.QI" /></Request>
+FailingServer;<Request ID="98" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="Writable1_1_2.ID" /></Request>
+FailingServer;<Request ID="99" Action="CREATE"><FB Name="SameNodeIdRead" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="100" Action="CREATE"><FB Name="SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="101" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_1.QI" /></Request>
+FailingServer;<Request ID="102" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId1,1:i=12345]" Destination="SUBSCRIBE_1.ID" /></Request>
+FailingServer;<Request ID="103" Action="CREATE"><FB Name="BOOL2BOOL_2_1_1_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="104" Action="CREATE"><FB Name="F_NOT_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="105" Action="CREATE"><FB Name="F_EQ" Type="F_EQ" /></Request>
+FailingServer;<Request ID="106" Action="WRITE"><Connection Source="DINT#123" Destination="F_EQ.IN2" /></Request>
+FailingServer;<Request ID="107" Action="CREATE"><FB Name="SameNameDifferentNodeIdR" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="108" Action="CREATE"><FB Name="Writable1_2" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="109" Action="WRITE"><Connection Source="1" Destination="Writable1_2.QI" /></Request>
+FailingServer;<Request ID="110" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=helloRead]" Destination="Writable1_2.ID" /></Request>
+FailingServer;<Request ID="111" Action="CREATE"><FB Name="BOOL2BOOL_3_3" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="112" Action="CREATE"><FB Name="STRING2STRING" Type="INT2INT" /></Request>
+FailingServer;<Request ID="113" Action="CREATE"><FB Name="BOOL2BOOL_3_2_1_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="114" Action="CREATE"><FB Name="SameTypesOutput" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="115" Action="CREATE"><FB Name="SUBSCRIBE_150_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="116" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_150_1.QI" /></Request>
+FailingServer;<Request ID="117" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello2]" Destination="SUBSCRIBE_150_1.ID" /></Request>
+FailingServer;<Request ID="118" Action="CREATE"><FB Name="F_NOT_1_2_1_2_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="119" Action="CREATE"><FB Name="SUBSCRIBE_NoObject_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="120" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_NoObject_1.QI" /></Request>
+FailingServer;<Request ID="121" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/Methods/1:1:byteStringNodeId/noOParameters]" Destination="SUBSCRIBE_NoObject_1.ID" /></Request>
+FailingServer;<Request ID="122" Action="CREATE"><FB Name="BOOL2BOOL_3_1_1_1_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="123" Action="CREATE"><FB Name="wrongNamespace1" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="124" Action="CREATE"><FB Name="STRING2STRING_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="125" Action="CREATE"><FB Name="Timeoutmethod" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="126" Action="WRITE"><Connection Source="1" Destination="Timeoutmethod.QI" /></Request>
+FailingServer;<Request ID="127" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="Timeoutmethod.ID" /></Request>
+FailingServer;<Request ID="128" Action="CREATE"><FB Name="E_DELAY_1" Type="E_DELAY" /></Request>
+FailingServer;<Request ID="129" Action="WRITE"><Connection Source="T#500ms" Destination="E_DELAY_1.DT" /></Request>
+FailingServer;<Request ID="130" Action="CREATE"><FB Name="DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="131" Action="WRITE"><Connection Source="DINT#456" Destination="DINT2DINT_1_2.IN" /></Request>
+FailingServer;<Request ID="132" Action="CREATE"><FB Name="PUBLISH_1" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="133" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1.QI" /></Request>
+FailingServer;<Request ID="134" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/IsolatedTests/WRITEVariable]" Destination="PUBLISH_1.ID" /></Request>
+FailingServer;<Request ID="135" Action="CREATE"><FB Name="SERVER_0_3" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="136" Action="WRITE"><Connection Source="1" Destination="SERVER_0_3.QI" /></Request>
+FailingServer;<Request ID="137" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects]" Destination="SERVER_0_3.ID" /></Request>
+FailingServer;<Request ID="138" Action="CREATE"><FB Name="ObjectsFolder" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="139" Action="CREATE"><FB Name="F_NOT_1_2_1_2_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="140" Action="CREATE"><FB Name="SERVER_0_4" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="141" Action="WRITE"><Connection Source="1" Destination="SERVER_0_4.QI" /></Request>
+FailingServer;<Request ID="142" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/notCalledMethod]" Destination="SERVER_0_4.ID" /></Request>
+FailingServer;<Request ID="143" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="144" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1.QI" /></Request>
+FailingServer;<Request ID="145" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/nonExistingFolder;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1.ID" /></Request>
+FailingServer;<Request ID="146" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT" Type="F_NOT" /></Request>
+FailingServer;<Request ID="147" Action="CREATE"><FB Name="CreateDeleteObjects.createTypeNoBN" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="148" Action="CREATE"><FB Name="CreateDeleteObjects.createTypeNoNodeID" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="149" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="150" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_1.QI" /></Request>
+FailingServer;<Request ID="151" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,10:i=1;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1_1.ID" /></Request>
+FailingServer;<Request ID="152" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="153" Action="CREATE"><FB Name="CreateDeleteObjects.createTypeUnmatchNodeId" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="154" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_2" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="155" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_2.QI" /></Request>
+FailingServer;<Request ID="156" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/0:Types/0:ObjectTypes/0:BaseObjectType/0:FolderType,0:i=60;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1_2.ID" /></Request>
+FailingServer;<Request ID="157" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="158" Action="CREATE"><FB Name="CreateDeleteObjects.createTypeNotAType" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="159" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="160" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3.QI" /></Request>
+FailingServer;<Request ID="161" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/0:Types/;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1_3.ID" /></Request>
+FailingServer;<Request ID="162" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3" Type="F_NOT" /></Request>
+FailingServer;<Request ID="163" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="164" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1.QI" /></Request>
+FailingServer;<Request ID="165" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=61;/Objects/nonExistingObject,1:i=246]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1.ID" /></Request>
+FailingServer;<Request ID="166" Action="CREATE"><FB Name="CreateDeleteObjects.createSameObject" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="167" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="168" Action="CREATE"><FB Name="CreateDeleteObjects.E_CTU" Type="E_CTU" /></Request>
+FailingServer;<Request ID="169" Action="WRITE"><Connection Source="UINT#2" Destination="CreateDeleteObjects.E_CTU.PV" /></Request>
+FailingServer;<Request ID="170" Action="CREATE"><FB Name="CreateDeleteObjects.E_SWITCH" Type="E_SWITCH" /></Request>
+FailingServer;<Request ID="171" Action="CREATE"><FB Name="CreateDeleteObjects.createFirstTime" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="172" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_2" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="173" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2.QI" /></Request>
+FailingServer;<Request ID="174" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/0:Types/;///]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2.ID" /></Request>
+FailingServer;<Request ID="175" Action="CREATE"><FB Name="CreateDeleteObjects.createInstanceBadName" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="176" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="177" Action="CREATE"><FB Name="CreateDeleteObjects.deleteNonExistingInstance" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="178" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_2_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="179" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1.QI" /></Request>
+FailingServer;<Request ID="180" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1.ID" /></Request>
+FailingServer;<Request ID="181" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_2_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="182" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_2_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="183" Action="CREATE"><FB Name="CreateDeleteObjects.deleteBadName" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="184" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="185" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.QI" /></Request>
+FailingServer;<Request ID="186" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;////]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.ID" /></Request>
+FailingServer;<Request ID="187" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="188" Action="CREATE"><FB Name="CreateDeleteObjects.createWOBrowsename" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="189" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_1_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="190" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_1_1.QI" /></Request>
+FailingServer;<Request ID="191" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,10:i=1;,1:i=1234]" Destination="CreateDeleteObjects.PUBLISH_0_1_1_1.ID" /></Request>
+FailingServer;<Request ID="192" Action="CREATE"><FB Name="CreateDeleteObjects.createBadTypeName" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="193" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_2_2" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="194" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_2.QI" /></Request>
+FailingServer;<Request ID="195" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;///;/Objects/nonExistingObject]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_2.ID" /></Request>
+FailingServer;<Request ID="196" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_2_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="197" Action="CREATE"><FB Name="CreateDeleteObjects.PUBLISH_0_1_3_1_1" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="198" Action="WRITE"><Connection Source="1" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1_1.QI" /></Request>
+FailingServer;<Request ID="199" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=61;/Objects/nonExistingObject2,1:i=246]" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1_1.ID" /></Request>
+FailingServer;<Request ID="200" Action="CREATE"><FB Name="CreateDeleteObjects.createObjectSameNodeId" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="201" Action="CREATE"><FB Name="CreateDeleteObjects.F_NOT_3_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="202" Action="CREATE"><FB Name="PUBLISH_1_1" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="203" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1_1.QI" /></Request>
+FailingServer;<Request ID="204" Action="WRITE"><Connection Source="opc_ua[WRITE;,1:i=4455]" Destination="PUBLISH_1_1.ID" /></Request>
+FailingServer;<Request ID="205" Action="CREATE"><FB Name="readUnknownNodeId" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="206" Action="CREATE"><FB Name="F_NOT_1_2_1_2_1_1_2_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="207" Action="CREATE"><FB Name="writeUnknownNodeId" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="208" Action="CREATE"><FB Name="F_NOT_1_2_1_2_1_1_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="209" Action="CREATE"><FB Name="F_NOT_1_2_1_2_1_1_2_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="210" Action="CREATE"><FB Name="methodUnknownNodeId" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="211" Action="CREATE"><FB Name="PUBLISH_1_1_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="212" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1_1_1.QI" /></Request>
+FailingServer;<Request ID="213" Action="WRITE"><Connection Source="opc_ua[READ;,1:i=4455]" Destination="PUBLISH_1_1_1.ID" /></Request>
+FailingServer;<Request ID="214" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+FailingServer;<Request ID="215" Action="CREATE"><FB Name="BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+FailingServer;<Request ID="216" Action="CREATE"><FB Name="PUBLISH_1_1_1_1" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="217" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1_1_1_1.QI" /></Request>
+FailingServer;<Request ID="218" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;,1:i=4455]" Destination="PUBLISH_1_1_1_1.ID" /></Request>
+FailingServer;<Request ID="219" Action="CREATE"><FB Name="testObject1Test" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="220" Action="CREATE"><FB Name="DINT2DINT_2" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="221" Action="CREATE"><FB Name="F_NOT_3" Type="F_NOT" /></Request>
+FailingServer;<Request ID="222" Action="CREATE"><FB Name="sameCreatedMethod" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="223" Action="CREATE"><FB Name="testMethod1" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="224" Action="WRITE"><Connection Source="1" Destination="testMethod1.QI" /></Request>
+FailingServer;<Request ID="225" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod]" Destination="testMethod1.ID" /></Request>
+FailingServer;<Request ID="226" Action="CREATE"><FB Name="DINT2DINT_3" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="227" Action="CREATE"><FB Name="testObject" Type="PUBLISH_0" /></Request>
+FailingServer;<Request ID="228" Action="WRITE"><Connection Source="1" Destination="testObject.QI" /></Request>
+FailingServer;<Request ID="229" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,2:i=15001;/Objects/testObject1]" Destination="testObject.ID" /></Request>
+FailingServer;<Request ID="230" Action="CREATE"><FB Name="objectMethod1" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="231" Action="CREATE"><FB Name="testMethod2" Type="SERVER_1" /></Request>
+FailingServer;<Request ID="232" Action="WRITE"><Connection Source="1" Destination="testMethod2.QI" /></Request>
+FailingServer;<Request ID="233" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod]" Destination="testMethod2.ID" /></Request>
+FailingServer;<Request ID="234" Action="CREATE"><FB Name="DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="235" Action="CREATE"><FB Name="DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="236" Action="CREATE"><FB Name="F_NOT_3_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="237" Action="CREATE"><FB Name="SERVER_0_5_1" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="238" Action="WRITE"><Connection Source="1" Destination="SERVER_0_5_1.QI" /></Request>
+FailingServer;<Request ID="239" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/]" Destination="SERVER_0_5_1.ID" /></Request>
+FailingServer;<Request ID="240" Action="CREATE"><FB Name="noSlashAtStart" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="241" Action="CREATE"><FB Name="F_NOT_3_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="242" Action="CREATE"><FB Name="SERVER_0_5" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="243" Action="WRITE"><Connection Source="1" Destination="SERVER_0_5.QI" /></Request>
+FailingServer;<Request ID="244" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;Objects/testObject1/2:TestMethod]" Destination="SERVER_0_5.ID" /></Request>
+FailingServer;<Request ID="245" Action="CREATE"><FB Name="onlySlash" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="246" Action="CREATE"><FB Name="badNamespaceNameVar" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="247" Action="CREATE"><FB Name="F_NOT_3_1_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="248" Action="CREATE"><FB Name="PUBLISH_1_2" Type="PUBLISH_1" /></Request>
+FailingServer;<Request ID="249" Action="WRITE"><Connection Source="1" Destination="PUBLISH_1_2.QI" /></Request>
+FailingServer;<Request ID="250" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/1:2:badNamespace]" Destination="PUBLISH_1_2.ID" /></Request>
+FailingServer;<Request ID="251" Action="CREATE"><FB Name="F_NOT_3_1_1_1_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="252" Action="CREATE"><FB Name="badNamespaceNameMethod" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="253" Action="CREATE"><FB Name="SERVER_0_5_1_1" Type="SERVER_0" /></Request>
+FailingServer;<Request ID="254" Action="WRITE"><Connection Source="1" Destination="SERVER_0_5_1_1.QI" /></Request>
+FailingServer;<Request ID="255" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/1:2:badNamespace]" Destination="SERVER_0_5_1_1.ID" /></Request>
+FailingServer;<Request ID="256" Action="CREATE"><FB Name="DINT2DINT_2_1" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="257" Action="CREATE"><FB Name="subscribeLocal" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="258" Action="CREATE"><FB Name="localCallMethod" Type="TEST_CONDITION" /></Request>
+FailingServer;<Request ID="259" Action="CREATE"><FB Name="F_NOT_3_1_1_1_2_1" Type="F_NOT" /></Request>
+FailingServer;<Request ID="260" Action="CREATE"><FB Name="F_NOT_3_1_1_1_2" Type="F_NOT" /></Request>
+FailingServer;<Request ID="261" Action="CREATE"><FB Name="CLIENT_0_1" Type="SUBSCRIBE_1" /></Request>
+FailingServer;<Request ID="262" Action="WRITE"><Connection Source="1" Destination="CLIENT_0_1.QI" /></Request>
+FailingServer;<Request ID="263" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;/Objects/1:2:badNamespace]" Destination="CLIENT_0_1.ID" /></Request>
+FailingServer;<Request ID="264" Action="CREATE"><FB Name="CLIENT_0" Type="CLIENT_0" /></Request>
+FailingServer;<Request ID="265" Action="WRITE"><Connection Source="1" Destination="CLIENT_0.QI" /></Request>
+FailingServer;<Request ID="266" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;/Objects/1:2:badNamespace]" Destination="CLIENT_0.ID" /></Request>
+FailingServer;<Request ID="267" Action="CREATE"><FB Name="DINT2DINT_5" Type="DINT2DINT" /></Request>
+FailingServer;<Request ID="268" Action="CREATE"><Connection Source="HandleInitLocal.E_CYCLE.EO" Destination="HandleInitLocal.InitFinished.REQ" /></Request>
+FailingServer;<Request ID="269" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.IND" Destination="HandleInitLocal.E_CYCLE.STOP" /></Request>
+FailingServer;<Request ID="270" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.CNF" Destination="HandleInitLocal.E_DEMUX_2.EI" /></Request>
+FailingServer;<Request ID="271" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO1" Destination="HandleInitLocal.STEST_END.REQ" /></Request>
+FailingServer;<Request ID="272" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.INITO" Destination="HandleInitLocal.InitFinished.INIT" /></Request>
+FailingServer;<Request ID="273" Action="CREATE"><Connection Source="HandleInitLocal.InitFinished.INITO" Destination="HandleInitLocal.F_BOOL_TO_UINT.REQ" /></Request>
+FailingServer;<Request ID="274" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO2" Destination="HandleInitLocal.E_CYCLE.START" /></Request>
+FailingServer;<Request ID="275" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.OUT" Destination="HandleInitLocal.E_DEMUX_2.K" /></Request>
+FailingServer;<Request ID="276" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1.CNF" Destination="CreateDeleteObjects.F_NOT.REQ" /></Request>
+FailingServer;<Request ID="277" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT.CNF" Destination="CreateDeleteObjects.createTypeNoBN.REQ" /></Request>
+FailingServer;<Request ID="278" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_1.CNF" Destination="CreateDeleteObjects.createTypeNoNodeID.REQ" /></Request>
+FailingServer;<Request ID="279" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_1.CNF" Destination="CreateDeleteObjects.F_NOT_1.REQ" /></Request>
+FailingServer;<Request ID="280" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_2.CNF" Destination="CreateDeleteObjects.createTypeUnmatchNodeId.REQ" /></Request>
+FailingServer;<Request ID="281" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_2.CNF" Destination="CreateDeleteObjects.F_NOT_2.REQ" /></Request>
+FailingServer;<Request ID="282" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3.CNF" Destination="CreateDeleteObjects.createTypeNotAType.REQ" /></Request>
+FailingServer;<Request ID="283" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3.CNF" Destination="CreateDeleteObjects.F_NOT_3.REQ" /></Request>
+FailingServer;<Request ID="284" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_1.CNF" Destination="CreateDeleteObjects.createSameObject.REQ" /></Request>
+FailingServer;<Request ID="285" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1.CNF" Destination="CreateDeleteObjects.E_CTU.CU" /></Request>
+FailingServer;<Request ID="286" Action="CREATE"><Connection Source="CreateDeleteObjects.E_CTU.CUO" Destination="CreateDeleteObjects.E_SWITCH.EI" /></Request>
+FailingServer;<Request ID="287" Action="CREATE"><Connection Source="CreateDeleteObjects.E_SWITCH.EO0" Destination="CreateDeleteObjects.createFirstTime.REQ" /></Request>
+FailingServer;<Request ID="288" Action="CREATE"><Connection Source="CreateDeleteObjects.E_SWITCH.EO1" Destination="CreateDeleteObjects.F_NOT_3_1.REQ" /></Request>
+FailingServer;<Request ID="289" Action="CREATE"><Connection Source="CreateDeleteObjects.createFirstTime.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1.REQ" /></Request>
+FailingServer;<Request ID="290" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2.CNF" Destination="CreateDeleteObjects.F_NOT_3_2.REQ" /></Request>
+FailingServer;<Request ID="291" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2.CNF" Destination="CreateDeleteObjects.createInstanceBadName.REQ" /></Request>
+FailingServer;<Request ID="292" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1.CNF" Destination="CreateDeleteObjects.F_NOT_3_2_1.REQ" /></Request>
+FailingServer;<Request ID="293" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_1.CNF" Destination="CreateDeleteObjects.deleteNonExistingInstance.REQ" /></Request>
+FailingServer;<Request ID="294" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1.REQ" /></Request>
+FailingServer;<Request ID="295" Action="CREATE"><Connection Source="CreateDeleteObjects.createTypeNoBN.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_1.INIT" /></Request>
+FailingServer;<Request ID="296" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_1.REQ" /></Request>
+FailingServer;<Request ID="297" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_2.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_2.REQ" /></Request>
+FailingServer;<Request ID="298" Action="CREATE"><Connection Source="CreateDeleteObjects.createTypeUnmatchNodeId.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3.INIT" /></Request>
+FailingServer;<Request ID="299" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3.REQ" /></Request>
+FailingServer;<Request ID="300" Action="CREATE"><Connection Source="CreateDeleteObjects.createTypeNotAType.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1.INIT" /></Request>
+FailingServer;<Request ID="301" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1.REQ" /></Request>
+FailingServer;<Request ID="302" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2.REQ" /></Request>
+FailingServer;<Request ID="303" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1.REQ" /></Request>
+FailingServer;<Request ID="304" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.REQ" /></Request>
+FailingServer;<Request ID="305" Action="CREATE"><Connection Source="CreateDeleteObjects.deleteBadName.CNF" Destination="PUBLISH_1_1.INIT" /></Request>
+FailingServer;<Request ID="306" Action="CREATE"><Connection Source="CreateDeleteObjects.deleteNonExistingInstance.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.INIT" /></Request>
+FailingServer;<Request ID="307" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.CNF" Destination="CreateDeleteObjects.F_NOT_3_2_1_1.REQ" /></Request>
+FailingServer;<Request ID="308" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_1_1.CNF" Destination="CreateDeleteObjects.deleteBadName.REQ" /></Request>
+FailingServer;<Request ID="309" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_1_1.CNF" Destination="CreateDeleteObjects.createWOBrowsename.REQ" /></Request>
+FailingServer;<Request ID="310" Action="CREATE"><Connection Source="CreateDeleteObjects.createTypeNoNodeID.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_1_1.INIT" /></Request>
+FailingServer;<Request ID="311" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_1_1.INITO" Destination="CreateDeleteObjects.F_NOT_1_1.REQ" /></Request>
+FailingServer;<Request ID="312" Action="CREATE"><Connection Source="CreateDeleteObjects.createWOBrowsename.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_2.INIT" /></Request>
+FailingServer;<Request ID="313" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_2.CNF" Destination="CreateDeleteObjects.F_NOT_3_2_2.REQ" /></Request>
+FailingServer;<Request ID="314" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_2.CNF" Destination="CreateDeleteObjects.createBadTypeName.REQ" /></Request>
+FailingServer;<Request ID="315" Action="CREATE"><Connection Source="CreateDeleteObjects.createInstanceBadName.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_2.INIT" /></Request>
+FailingServer;<Request ID="316" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_2.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_2.REQ" /></Request>
+FailingServer;<Request ID="317" Action="CREATE"><Connection Source="CreateDeleteObjects.createBadTypeName.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2_1.INIT" /></Request>
+FailingServer;<Request ID="318" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1_1.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1_1.REQ" /></Request>
+FailingServer;<Request ID="319" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_1_1.CNF" Destination="CreateDeleteObjects.createObjectSameNodeId.REQ" /></Request>
+FailingServer;<Request ID="320" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1_1.CNF" Destination="CreateDeleteObjects.F_NOT_3_1_1.REQ" /></Request>
+FailingServer;<Request ID="321" Action="CREATE"><Connection Source="CreateDeleteObjects.createSameObject.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_1_1.INIT" /></Request>
+FailingServer;<Request ID="322" Action="CREATE"><Connection Source="CreateDeleteObjects.createObjectSameNodeId.CNF" Destination="CreateDeleteObjects.PUBLISH_0_1_3_2.INIT" /></Request>
+FailingServer;<Request ID="323" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT.OUT" Destination="CreateDeleteObjects.createTypeNoBN.check" /></Request>
+FailingServer;<Request ID="324" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1.QO" Destination="CreateDeleteObjects.F_NOT.IN" /></Request>
+FailingServer;<Request ID="325" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_1.OUT" Destination="CreateDeleteObjects.createTypeNoNodeID.check" /></Request>
+FailingServer;<Request ID="326" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_1.QO" Destination="CreateDeleteObjects.F_NOT_1.IN" /></Request>
+FailingServer;<Request ID="327" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_2.OUT" Destination="CreateDeleteObjects.createTypeUnmatchNodeId.check" /></Request>
+FailingServer;<Request ID="328" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_2.QO" Destination="CreateDeleteObjects.F_NOT_2.IN" /></Request>
+FailingServer;<Request ID="329" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3.OUT" Destination="CreateDeleteObjects.createTypeNotAType.check" /></Request>
+FailingServer;<Request ID="330" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3.QO" Destination="CreateDeleteObjects.F_NOT_3.IN" /></Request>
+FailingServer;<Request ID="331" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_1.OUT" Destination="CreateDeleteObjects.createSameObject.check" /></Request>
+FailingServer;<Request ID="332" Action="CREATE"><Connection Source="CreateDeleteObjects.E_CTU.Q" Destination="CreateDeleteObjects.E_SWITCH.G" /></Request>
+FailingServer;<Request ID="333" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1.QO" Destination="CreateDeleteObjects.createFirstTime.check" /></Request>
+FailingServer;<Request ID="334" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_1.QO" Destination="CreateDeleteObjects.F_NOT_3_1.IN" /></Request>
+FailingServer;<Request ID="335" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2.OUT" Destination="CreateDeleteObjects.createInstanceBadName.check" /></Request>
+FailingServer;<Request ID="336" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2.QO" Destination="CreateDeleteObjects.F_NOT_3_2.IN" /></Request>
+FailingServer;<Request ID="337" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1.QO" Destination="CreateDeleteObjects.F_NOT_3_2_1.IN" /></Request>
+FailingServer;<Request ID="338" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_1.OUT" Destination="CreateDeleteObjects.deleteNonExistingInstance.check" /></Request>
+FailingServer;<Request ID="339" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_1_1.QO" Destination="CreateDeleteObjects.F_NOT_3_2_1_1.IN" /></Request>
+FailingServer;<Request ID="340" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_1_1.OUT" Destination="CreateDeleteObjects.deleteBadName.check" /></Request>
+FailingServer;<Request ID="341" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_1_1.QO" Destination="CreateDeleteObjects.F_NOT_1_1.IN" /></Request>
+FailingServer;<Request ID="342" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_1_1.OUT" Destination="CreateDeleteObjects.createWOBrowsename.check" /></Request>
+FailingServer;<Request ID="343" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_2_2.OUT" Destination="CreateDeleteObjects.createBadTypeName.check" /></Request>
+FailingServer;<Request ID="344" Action="CREATE"><Connection Source="CreateDeleteObjects.PUBLISH_0_1_3_2_2.QO" Destination="CreateDeleteObjects.F_NOT_3_2_2.IN" /></Request>
+FailingServer;<Request ID="345" Action="CREATE"><Connection Source="CreateDeleteObjects.F_NOT_3_1_1.OUT" Destination="CreateDeleteObjects.createObjectSameNodeId.check" /></Request>
+FailingServer;<Request ID="346" Action="CREATE"><Connection Source="E_SR.EO" Destination="E_SWITCH.EI" /></Request>
+FailingServer;<Request ID="347" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.INITO" Destination="E_SR.S" /></Request>
+FailingServer;<Request ID="348" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.IND" Destination="E_SR.R" /></Request>
+FailingServer;<Request ID="349" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+FailingServer;<Request ID="350" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+FailingServer;<Request ID="351" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+FailingServer;<Request ID="352" Action="CREATE"><Connection Source="Writable1.CNF" Destination="WorngInputsType.REQ" /></Request>
+FailingServer;<Request ID="353" Action="CREATE"><Connection Source="GoodInputs.CNF" Destination="SERVER_0.RSP" /></Request>
+FailingServer;<Request ID="354" Action="CREATE"><Connection Source="SERVER_0.INITO" Destination="SERVER_0_1.INIT" /></Request>
+FailingServer;<Request ID="355" Action="CREATE"><Connection Source="WorngInputs.CNF" Destination="SERVER_0_1.RSP" /></Request>
+FailingServer;<Request ID="356" Action="CREATE"><Connection Source="SERVER_0_1.IND" Destination="WorngInputs.REQ" /></Request>
+FailingServer;<Request ID="357" Action="CREATE"><Connection Source="SERVER_0_1.INITO" Destination="SERVER_0_1_1.INIT" /></Request>
+FailingServer;<Request ID="358" Action="CREATE"><Connection Source="WorngInputsOutputs.CNF" Destination="SERVER_0_1_1.RSP" /></Request>
+FailingServer;<Request ID="359" Action="CREATE"><Connection Source="SERVER_0_1_1.IND" Destination="WorngInputsOutputs.REQ" /></Request>
+FailingServer;<Request ID="360" Action="CREATE"><Connection Source="SUBSCRIBE_1_1.INITO" Destination="ReadExistingWritable.REQ" /></Request>
+FailingServer;<Request ID="361" Action="CREATE"><Connection Source="ReadExistingWritable.CNF" Destination="SUBSCRIBE_1_1_1.INIT" /></Request>
+FailingServer;<Request ID="362" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1.INITO" Destination="F_NOT_1_1.REQ" /></Request>
+FailingServer;<Request ID="363" Action="CREATE"><Connection Source="F_NOT_1_1.CNF" Destination="SameNodeSecondRead.REQ" /></Request>
+FailingServer;<Request ID="364" Action="CREATE"><Connection Source="Writable1_1.INITO" Destination="F_NOT.REQ" /></Request>
+FailingServer;<Request ID="365" Action="CREATE"><Connection Source="F_NOT.CNF" Destination="SameNodeIdWrite.REQ" /></Request>
+FailingServer;<Request ID="366" Action="CREATE"><Connection Source="SERVER_0_2.INITO" Destination="F_NOT_1_2_1_1.REQ" /></Request>
+FailingServer;<Request ID="367" Action="CREATE"><Connection Source="F_NOT_1_2_1_1.CNF" Destination="DoubleMethod.REQ" /></Request>
+FailingServer;<Request ID="368" Action="CREATE"><Connection Source="SUBSCRIBE_wrongPath.INITO" Destination="F_NOT_1_2_1.REQ" /></Request>
+FailingServer;<Request ID="369" Action="CREATE"><Connection Source="F_NOT_1_2_1.CNF" Destination="WrongPath.REQ" /></Request>
+FailingServer;<Request ID="370" Action="CREATE"><Connection Source="Writable1_1_1.INITO" Destination="SameNameDifferentNodeIdW.REQ" /></Request>
+FailingServer;<Request ID="371" Action="CREATE"><Connection Source="DoubleMethod.CNF" Destination="SUBSCRIBE_150.INIT" /></Request>
+FailingServer;<Request ID="372" Action="CREATE"><Connection Source="F_NOT_1.CNF" Destination="UnconnectedSD.REQ" /></Request>
+FailingServer;<Request ID="373" Action="CREATE"><Connection Source="SUBSCRIBE_150.INITO" Destination="F_NOT_1_2_1_1_1.REQ" /></Request>
+FailingServer;<Request ID="374" Action="CREATE"><Connection Source="F_NOT_1_2_1_1_1.CNF" Destination="DifferentTypesOutput.REQ" /></Request>
+FailingServer;<Request ID="375" Action="CREATE"><Connection Source="F_NOT_1_2_1_1_1_1.CNF" Destination="UnconnectedRD.REQ" /></Request>
+FailingServer;<Request ID="376" Action="CREATE"><Connection Source="SUBSCRIBE_140.INITO" Destination="F_NOT_1_2_1_1_1_1.REQ" /></Request>
+FailingServer;<Request ID="377" Action="CREATE"><Connection Source="UnconnectedRD.CNF" Destination="Writable1_1_2.INIT" /></Request>
+FailingServer;<Request ID="378" Action="CREATE"><Connection Source="Writable1_1_2.INITO" Destination="F_NOT_1.REQ" /></Request>
+FailingServer;<Request ID="379" Action="CREATE"><Connection Source="SameNodeIdWrite.CNF" Destination="SUBSCRIBE_1.INIT" /></Request>
+FailingServer;<Request ID="380" Action="CREATE"><Connection Source="SUBSCRIBE_1.INITO" Destination="F_NOT_2.REQ" /></Request>
+FailingServer;<Request ID="381" Action="CREATE"><Connection Source="F_NOT_2.CNF" Destination="SameNodeIdRead.REQ" /></Request>
+FailingServer;<Request ID="382" Action="CREATE"><Connection Source="Writable1.INITO" Destination="Writable1_1.INIT" /></Request>
+FailingServer;<Request ID="383" Action="CREATE"><Connection Source="SameNodeSecondRead.CNF" Destination="SERVER_0_2.INIT" /></Request>
+FailingServer;<Request ID="384" Action="CREATE"><Connection Source="UnconnectedSD.CNF" Destination="SUBSCRIBE_wrongPath.INIT" /></Request>
+FailingServer;<Request ID="385" Action="CREATE"><Connection Source="SameNodeIdRead.CNF" Destination="SUBSCRIBE_1_1_1_1.INIT" /></Request>
+FailingServer;<Request ID="386" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1_1.INITO" Destination="Writable1_2.INIT" /></Request>
+FailingServer;<Request ID="387" Action="CREATE"><Connection Source="F_EQ.CNF" Destination="ValidNode.REQ" /></Request>
+FailingServer;<Request ID="388" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1_1.IND" Destination="BOOL2BOOL_3_1_1.REQ" /></Request>
+FailingServer;<Request ID="389" Action="CREATE"><Connection Source="BOOL2BOOL_3_1_1.CNF" Destination="F_EQ.REQ" /></Request>
+FailingServer;<Request ID="390" Action="CREATE"><Connection Source="Writable1_2.INITO" Destination="SameNameDifferentNodeIdR.REQ" /></Request>
+FailingServer;<Request ID="391" Action="CREATE"><Connection Source="SameNameDifferentNodeIdR.CNF" Destination="Writable1_1_1.INIT" /></Request>
+FailingServer;<Request ID="392" Action="CREATE"><Connection Source="SameNameDifferentNodeIdW.CNF" Destination="SUBSCRIBE_1_1.INIT" /></Request>
+FailingServer;<Request ID="393" Action="CREATE"><Connection Source="SameTypesOutput.CNF" Destination="SUBSCRIBE_140.INIT" /></Request>
+FailingServer;<Request ID="394" Action="CREATE"><Connection Source="DifferentTypesOutput.CNF" Destination="SUBSCRIBE_150_1.INIT" /></Request>
+FailingServer;<Request ID="395" Action="CREATE"><Connection Source="SUBSCRIBE_150_1.INITO" Destination="SameTypesOutput.REQ" /></Request>
+FailingServer;<Request ID="396" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1.CNF" Destination="wrongNamespace1.REQ" /></Request>
+FailingServer;<Request ID="397" Action="CREATE"><Connection Source="SUBSCRIBE_NoObject_1.INITO" Destination="F_NOT_1_2_1_2_1.REQ" /></Request>
+FailingServer;<Request ID="398" Action="CREATE"><Connection Source="SERVER_0_1_1.INITO" Destination="Timeoutmethod.INIT" /></Request>
+FailingServer;<Request ID="399" Action="CREATE"><Connection Source="SERVER_0.IND" Destination="E_DELAY_1.START" /></Request>
+FailingServer;<Request ID="400" Action="CREATE"><Connection Source="E_DELAY_1.EO" Destination="GoodInputs.REQ" /></Request>
+FailingServer;<Request ID="401" Action="CREATE"><Connection Source="wrongNamespace1.CNF" Destination="PUBLISH_1.INIT" /></Request>
+FailingServer;<Request ID="402" Action="CREATE"><Connection Source="PUBLISH_1.INITO" Destination="SERVER_0_3.INIT" /></Request>
+FailingServer;<Request ID="403" Action="CREATE"><Connection Source="SERVER_0_3.INITO" Destination="F_NOT_1_2_1_2_1_1.REQ" /></Request>
+FailingServer;<Request ID="404" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1.CNF" Destination="ObjectsFolder.REQ" /></Request>
+FailingServer;<Request ID="405" Action="CREATE"><Connection Source="SERVER_0_4.INITO" Destination="SERVER_0_4.RSP" /></Request>
+FailingServer;<Request ID="406" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="SERVER_0.INIT" /></Request>
+FailingServer;<Request ID="407" Action="CREATE"><Connection Source="WrongPath.CNF" Destination="SUBSCRIBE_NoObject_1.INIT" /></Request>
+FailingServer;<Request ID="408" Action="CREATE"><Connection Source="SERVER_0_4.INITO" Destination="CreateDeleteObjects.PUBLISH_0_1.INIT" /></Request>
+FailingServer;<Request ID="409" Action="CREATE"><Connection Source="PUBLISH_1_1.INITO" Destination="F_NOT_1_2_1_2_1_1_2.REQ" /></Request>
+FailingServer;<Request ID="410" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2.CNF" Destination="writeUnknownNodeId.REQ" /></Request>
+FailingServer;<Request ID="411" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2_1.CNF" Destination="readUnknownNodeId.REQ" /></Request>
+FailingServer;<Request ID="412" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2_1_1.CNF" Destination="methodUnknownNodeId.REQ" /></Request>
+FailingServer;<Request ID="413" Action="CREATE"><Connection Source="writeUnknownNodeId.CNF" Destination="PUBLISH_1_1_1.INIT" /></Request>
+FailingServer;<Request ID="414" Action="CREATE"><Connection Source="PUBLISH_1_1_1.INITO" Destination="F_NOT_1_2_1_2_1_1_2_1.REQ" /></Request>
+FailingServer;<Request ID="415" Action="CREATE"><Connection Source="readUnknownNodeId.CNF" Destination="PUBLISH_1_1_1_1.INIT" /></Request>
+FailingServer;<Request ID="416" Action="CREATE"><Connection Source="PUBLISH_1_1_1_1.INITO" Destination="F_NOT_1_2_1_2_1_1_2_1_1.REQ" /></Request>
+FailingServer;<Request ID="417" Action="CREATE"><Connection Source="F_NOT_3.CNF" Destination="sameCreatedMethod.REQ" /></Request>
+FailingServer;<Request ID="418" Action="CREATE"><Connection Source="testObject1Test.CNF" Destination="testMethod1.INIT" /></Request>
+FailingServer;<Request ID="419" Action="CREATE"><Connection Source="testObject.INITO" Destination="testObject.REQ" /></Request>
+FailingServer;<Request ID="420" Action="CREATE"><Connection Source="testObject.CNF" Destination="testObject1Test.REQ" /></Request>
+FailingServer;<Request ID="421" Action="CREATE"><Connection Source="testMethod1.INITO" Destination="objectMethod1.REQ" /></Request>
+FailingServer;<Request ID="422" Action="CREATE"><Connection Source="objectMethod1.CNF" Destination="testMethod2.INIT" /></Request>
+FailingServer;<Request ID="423" Action="CREATE"><Connection Source="testMethod2.INITO" Destination="F_NOT_3.REQ" /></Request>
+FailingServer;<Request ID="424" Action="CREATE"><Connection Source="methodUnknownNodeId.CNF" Destination="testObject.INIT" /></Request>
+FailingServer;<Request ID="425" Action="CREATE"><Connection Source="SERVER_0_5_1.INITO" Destination="F_NOT_3_1_1.REQ" /></Request>
+FailingServer;<Request ID="426" Action="CREATE"><Connection Source="noSlashAtStart.CNF" Destination="SERVER_0_5_1.INIT" /></Request>
+FailingServer;<Request ID="427" Action="CREATE"><Connection Source="F_NOT_3_1.CNF" Destination="noSlashAtStart.REQ" /></Request>
+FailingServer;<Request ID="428" Action="CREATE"><Connection Source="F_NOT_3_1_1.CNF" Destination="onlySlash.REQ" /></Request>
+FailingServer;<Request ID="429" Action="CREATE"><Connection Source="sameCreatedMethod.CNF" Destination="SERVER_0_5.INIT" /></Request>
+FailingServer;<Request ID="430" Action="CREATE"><Connection Source="SERVER_0_5.INITO" Destination="F_NOT_3_1.REQ" /></Request>
+FailingServer;<Request ID="431" Action="CREATE"><Connection Source="SERVER_0_5_1_1.INITO" Destination="F_NOT_3_1_1_1_1.REQ" /></Request>
+FailingServer;<Request ID="432" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_1.CNF" Destination="badNamespaceNameMethod.REQ" /></Request>
+FailingServer;<Request ID="433" Action="CREATE"><Connection Source="badNamespaceNameMethod.CNF" Destination="PUBLISH_1_2.INIT" /></Request>
+FailingServer;<Request ID="434" Action="CREATE"><Connection Source="PUBLISH_1_2.INITO" Destination="F_NOT_3_1_1_1.REQ" /></Request>
+FailingServer;<Request ID="435" Action="CREATE"><Connection Source="F_NOT_3_1_1_1.CNF" Destination="badNamespaceNameVar.REQ" /></Request>
+FailingServer;<Request ID="436" Action="CREATE"><Connection Source="onlySlash.CNF" Destination="SERVER_0_5_1_1.INIT" /></Request>
+FailingServer;<Request ID="437" Action="CREATE"><Connection Source="ObjectsFolder.CNF" Destination="SERVER_0_4.INIT" /></Request>
+FailingServer;<Request ID="438" Action="CREATE"><Connection Source="Timeoutmethod.INITO" Destination="Writable1.INIT" /></Request>
+FailingServer;<Request ID="439" Action="CREATE"><Connection Source="subscribeLocal.CNF" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+FailingServer;<Request ID="440" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_2_1.CNF" Destination="subscribeLocal.REQ" /></Request>
+FailingServer;<Request ID="441" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_2.CNF" Destination="localCallMethod.REQ" /></Request>
+FailingServer;<Request ID="442" Action="CREATE"><Connection Source="localCallMethod.CNF" Destination="CLIENT_0_1.INIT" /></Request>
+FailingServer;<Request ID="443" Action="CREATE"><Connection Source="CLIENT_0_1.INITO" Destination="F_NOT_3_1_1_1_2_1.REQ" /></Request>
+FailingServer;<Request ID="444" Action="CREATE"><Connection Source="badNamespaceNameVar.CNF" Destination="CLIENT_0.INIT" /></Request>
+FailingServer;<Request ID="445" Action="CREATE"><Connection Source="CLIENT_0.INITO" Destination="F_NOT_3_1_1_1_2.REQ" /></Request>
+FailingServer;<Request ID="446" Action="CREATE"><Connection Source="E_SR.Q" Destination="E_SWITCH.G" /></Request>
+FailingServer;<Request ID="447" Action="CREATE"><Connection Source="BOOL2BOOL_2_1.OUT" Destination="Writable1.SD_1" /></Request>
+FailingServer;<Request ID="448" Action="CREATE"><Connection Source="SERVER_0.QO" Destination="GoodInputs.check" /></Request>
+FailingServer;<Request ID="449" Action="CREATE"><Connection Source="SERVER_0_1_1.RD_1" Destination="DINT2DINT.IN" /></Request>
+FailingServer;<Request ID="450" Action="CREATE"><Connection Source="DINT2DINT.OUT" Destination="SERVER_0_1_1.SD_1" /></Request>
+FailingServer;<Request ID="451" Action="CREATE"><Connection Source="SERVER_0.RD_1" Destination="DINT2DINT_1_1.IN" /></Request>
+FailingServer;<Request ID="452" Action="CREATE"><Connection Source="DINT2DINT_1_1.OUT" Destination="SERVER_0.SD_1" /></Request>
+FailingServer;<Request ID="453" Action="CREATE"><Connection Source="SERVER_0_1.RD_1" Destination="DINT2DINT_1.IN" /></Request>
+FailingServer;<Request ID="454" Action="CREATE"><Connection Source="DINT2DINT_1.OUT" Destination="SERVER_0_1.SD_1" /></Request>
+FailingServer;<Request ID="455" Action="CREATE"><Connection Source="BOOL2BOOL_2_1_1.OUT" Destination="Writable1_1.SD_1" /></Request>
+FailingServer;<Request ID="456" Action="CREATE"><Connection Source="BOOL2BOOL_2_1_1_1.OUT" Destination="Writable1_1_1.SD_1" /></Request>
+FailingServer;<Request ID="457" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1.RD_1" Destination="BOOL2BOOL_3_1.IN" /></Request>
+FailingServer;<Request ID="458" Action="CREATE"><Connection Source="SUBSCRIBE_1_1.RD_1" Destination="BOOL2BOOL_3.IN" /></Request>
+FailingServer;<Request ID="459" Action="CREATE"><Connection Source="SUBSCRIBE_1_1.QO" Destination="ReadExistingWritable.check" /></Request>
+FailingServer;<Request ID="460" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1.QO" Destination="F_NOT_1_1.IN" /></Request>
+FailingServer;<Request ID="461" Action="CREATE"><Connection Source="F_NOT_1_1.OUT" Destination="SameNodeSecondRead.check" /></Request>
+FailingServer;<Request ID="462" Action="CREATE"><Connection Source="Writable1_1.QO" Destination="F_NOT.IN" /></Request>
+FailingServer;<Request ID="463" Action="CREATE"><Connection Source="F_NOT.OUT" Destination="SameNodeIdWrite.check" /></Request>
+FailingServer;<Request ID="464" Action="CREATE"><Connection Source="SERVER_0_2.QO" Destination="F_NOT_1_2_1_1.IN" /></Request>
+FailingServer;<Request ID="465" Action="CREATE"><Connection Source="F_NOT_1_2_1_1.OUT" Destination="DoubleMethod.check" /></Request>
+FailingServer;<Request ID="466" Action="CREATE"><Connection Source="SERVER_0_2.RD_1" Destination="BOOL2BOOL_3_2.IN" /></Request>
+FailingServer;<Request ID="467" Action="CREATE"><Connection Source="BOOL2BOOL_3_2.OUT" Destination="SERVER_0_2.SD_1" /></Request>
+FailingServer;<Request ID="468" Action="CREATE"><Connection Source="SUBSCRIBE_wrongPath.RD_1" Destination="BOOL2BOOL_3_1_1_1.IN" /></Request>
+FailingServer;<Request ID="469" Action="CREATE"><Connection Source="SUBSCRIBE_wrongPath.QO" Destination="F_NOT_1_2_1.IN" /></Request>
+FailingServer;<Request ID="470" Action="CREATE"><Connection Source="F_NOT_1_2_1.OUT" Destination="WrongPath.check" /></Request>
+FailingServer;<Request ID="471" Action="CREATE"><Connection Source="SUBSCRIBE_1_1_1_1.RD_1" Destination="BOOL2BOOL_3_1_1.IN" /></Request>
+FailingServer;<Request ID="472" Action="CREATE"><Connection Source="Writable1_1_1.QO" Destination="SameNameDifferentNodeIdW.check" /></Request>
+FailingServer;<Request ID="473" Action="CREATE"><Connection Source="SUBSCRIBE_150.RD_1" Destination="BOOL2BOOL_3_2_1.IN" /></Request>
+FailingServer;<Request ID="474" Action="CREATE"><Connection Source="F_NOT_1.OUT" Destination="UnconnectedSD.check" /></Request>
+FailingServer;<Request ID="475" Action="CREATE"><Connection Source="SUBSCRIBE_150.QO" Destination="F_NOT_1_2_1_1_1.IN" /></Request>
+FailingServer;<Request ID="476" Action="CREATE"><Connection Source="F_NOT_1_2_1_1_1.OUT" Destination="DifferentTypesOutput.check" /></Request>
+FailingServer;<Request ID="477" Action="CREATE"><Connection Source="F_NOT_1_2_1_1_1_1.OUT" Destination="UnconnectedRD.check" /></Request>
+FailingServer;<Request ID="478" Action="CREATE"><Connection Source="SUBSCRIBE_140.QO" Destination="F_NOT_1_2_1_1_1_1.IN" /></Request>
+FailingServer;<Request ID="479" Action="CREATE"><Connection Source="SUBSCRIBE_140.RD_1" Destination="BOOL2BOOL_3_2_1_1.IN" /></Request>
+FailingServer;<Request ID="480" Action="CREATE"><Connection Source="STRING2STRING_1.OUT" Destination="Writable1_1_2.SD_1" /></Request>
+FailingServer;<Request ID="481" Action="CREATE"><Connection Source="Writable1_1_2.QO" Destination="F_NOT_1.IN" /></Request>
+FailingServer;<Request ID="482" Action="CREATE"><Connection Source="SUBSCRIBE_1.RD_1" Destination="BOOL2BOOL_2_1_1_2.IN" /></Request>
+FailingServer;<Request ID="483" Action="CREATE"><Connection Source="SUBSCRIBE_1.QO" Destination="F_NOT_2.IN" /></Request>
+FailingServer;<Request ID="484" Action="CREATE"><Connection Source="F_NOT_2.OUT" Destination="SameNodeIdRead.check" /></Request>
+FailingServer;<Request ID="485" Action="CREATE"><Connection Source="F_EQ.OUT" Destination="ValidNode.check" /></Request>
+FailingServer;<Request ID="486" Action="CREATE"><Connection Source="BOOL2BOOL_3_1_1.OUT" Destination="F_EQ.IN1" /></Request>
+FailingServer;<Request ID="487" Action="CREATE"><Connection Source="Writable1_2.QO" Destination="SameNameDifferentNodeIdR.check" /></Request>
+FailingServer;<Request ID="488" Action="CREATE"><Connection Source="Writable1_2.RD_1" Destination="BOOL2BOOL_3_3.IN" /></Request>
+FailingServer;<Request ID="489" Action="CREATE"><Connection Source="SUBSCRIBE_150.RD_1" Destination="STRING2STRING.IN" /></Request>
+FailingServer;<Request ID="490" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.F_BOOL_TO_UINT.IN" /></Request>
+FailingServer;<Request ID="491" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.InitFinished.QI" /></Request>
+FailingServer;<Request ID="492" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.SUBSCRIBE_0.QI" /></Request>
+FailingServer;<Request ID="493" Action="CREATE"><Connection Source="SUBSCRIBE_150_1.RD_1" Destination="BOOL2BOOL_3_2_1_2.IN" /></Request>
+FailingServer;<Request ID="494" Action="CREATE"><Connection Source="SUBSCRIBE_150_1.QO" Destination="SameTypesOutput.check" /></Request>
+FailingServer;<Request ID="495" Action="CREATE"><Connection Source="SUBSCRIBE_NoObject_1.QO" Destination="F_NOT_1_2_1_2_1.IN" /></Request>
+FailingServer;<Request ID="496" Action="CREATE"><Connection Source="SUBSCRIBE_NoObject_1.RD_1" Destination="BOOL2BOOL_3_1_1_1_1_1.IN" /></Request>
+FailingServer;<Request ID="497" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1.OUT" Destination="wrongNamespace1.check" /></Request>
+FailingServer;<Request ID="498" Action="CREATE"><Connection Source="SUBSCRIBE_150_1.RD_1" Destination="STRING2STRING_2.IN" /></Request>
+FailingServer;<Request ID="499" Action="CREATE"><Connection Source="DINT2DINT_1_2.OUT" Destination="PUBLISH_1.SD_1" /></Request>
+FailingServer;<Request ID="500" Action="CREATE"><Connection Source="SERVER_0_3.QO" Destination="F_NOT_1_2_1_2_1_1.IN" /></Request>
+FailingServer;<Request ID="501" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1.OUT" Destination="ObjectsFolder.check" /></Request>
+FailingServer;<Request ID="502" Action="CREATE"><Connection Source="PUBLISH_1_1.QO" Destination="F_NOT_1_2_1_2_1_1_2.IN" /></Request>
+FailingServer;<Request ID="503" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2.OUT" Destination="writeUnknownNodeId.check" /></Request>
+FailingServer;<Request ID="504" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2_1.OUT" Destination="readUnknownNodeId.check" /></Request>
+FailingServer;<Request ID="505" Action="CREATE"><Connection Source="F_NOT_1_2_1_2_1_1_2_1_1.OUT" Destination="methodUnknownNodeId.check" /></Request>
+FailingServer;<Request ID="506" Action="CREATE"><Connection Source="PUBLISH_1_1_1.QO" Destination="F_NOT_1_2_1_2_1_1_2_1.IN" /></Request>
+FailingServer;<Request ID="507" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="PUBLISH_1_1.SD_1" /></Request>
+FailingServer;<Request ID="508" Action="CREATE"><Connection Source="PUBLISH_1_1_1.RD_1" Destination="BOOL2BOOL_1.IN" /></Request>
+FailingServer;<Request ID="509" Action="CREATE"><Connection Source="PUBLISH_1_1_1_1.QO" Destination="F_NOT_1_2_1_2_1_1_2_1_1.IN" /></Request>
+FailingServer;<Request ID="510" Action="CREATE"><Connection Source="F_NOT_3.OUT" Destination="sameCreatedMethod.check" /></Request>
+FailingServer;<Request ID="511" Action="CREATE"><Connection Source="DINT2DINT_3.OUT" Destination="testMethod1.SD_1" /></Request>
+FailingServer;<Request ID="512" Action="CREATE"><Connection Source="testObject.QO" Destination="testObject1Test.check" /></Request>
+FailingServer;<Request ID="513" Action="CREATE"><Connection Source="testMethod1.QO" Destination="objectMethod1.check" /></Request>
+FailingServer;<Request ID="514" Action="CREATE"><Connection Source="DINT2DINT_2.OUT" Destination="testMethod2.SD_1" /></Request>
+FailingServer;<Request ID="515" Action="CREATE"><Connection Source="testMethod2.QO" Destination="F_NOT_3.IN" /></Request>
+FailingServer;<Request ID="516" Action="CREATE"><Connection Source="testMethod1.RD_1" Destination="DINT2DINT_1_3.IN" /></Request>
+FailingServer;<Request ID="517" Action="CREATE"><Connection Source="testMethod2.RD_1" Destination="DINT2DINT_1_1_1.IN" /></Request>
+FailingServer;<Request ID="518" Action="CREATE"><Connection Source="SERVER_0_5_1.QO" Destination="F_NOT_3_1_1.IN" /></Request>
+FailingServer;<Request ID="519" Action="CREATE"><Connection Source="F_NOT_3_1.OUT" Destination="noSlashAtStart.check" /></Request>
+FailingServer;<Request ID="520" Action="CREATE"><Connection Source="SERVER_0_5.QO" Destination="F_NOT_3_1.IN" /></Request>
+FailingServer;<Request ID="521" Action="CREATE"><Connection Source="F_NOT_3_1_1.OUT" Destination="onlySlash.check" /></Request>
+FailingServer;<Request ID="522" Action="CREATE"><Connection Source="DINT2DINT_2_1.OUT" Destination="PUBLISH_1_2.SD_1" /></Request>
+FailingServer;<Request ID="523" Action="CREATE"><Connection Source="SERVER_0_5_1_1.QO" Destination="F_NOT_3_1_1_1_1.IN" /></Request>
+FailingServer;<Request ID="524" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_1.OUT" Destination="badNamespaceNameMethod.check" /></Request>
+FailingServer;<Request ID="525" Action="CREATE"><Connection Source="F_NOT_3_1_1_1.OUT" Destination="badNamespaceNameVar.check" /></Request>
+FailingServer;<Request ID="526" Action="CREATE"><Connection Source="PUBLISH_1_2.QO" Destination="F_NOT_3_1_1_1.IN" /></Request>
+FailingServer;<Request ID="527" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_2_1.OUT" Destination="subscribeLocal.check" /></Request>
+FailingServer;<Request ID="528" Action="CREATE"><Connection Source="F_NOT_3_1_1_1_2.OUT" Destination="localCallMethod.check" /></Request>
+FailingServer;<Request ID="529" Action="CREATE"><Connection Source="CLIENT_0_1.QO" Destination="F_NOT_3_1_1_1_2_1.IN" /></Request>
+FailingServer;<Request ID="530" Action="CREATE"><Connection Source="CLIENT_0.QO" Destination="F_NOT_3_1_1_1_2.IN" /></Request>
+FailingServer;<Request ID="531" Action="CREATE"><Connection Source="CLIENT_0_1.RD_1" Destination="DINT2DINT_5.IN" /></Request>
+FailingServer;<Request ID="532" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/localFailAction.fboot b/systemtests/src/modules/opc_ua/localFailAction.fboot
new file mode 100644
index 0000000..d3ee1dc
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/localFailAction.fboot
@@ -0,0 +1,47 @@
+;<Request ID="1" Action="CREATE"><FB Name="FailAction" Type="EMB_RES" /></Request>
+FailAction;<Request ID="2" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+FailAction;<Request ID="3" Action="CREATE"><FB Name="ServerRead" Type="SUBSCRIBE_1" /></Request>
+FailAction;<Request ID="4" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/IsolatedTests/READVariable]" Destination="ServerRead.ID" /></Request>
+FailAction;<Request ID="5" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+FailAction;<Request ID="6" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+FailAction;<Request ID="7" Action="CREATE"><FB Name="ServerMethod" Type="SERVER_0" /></Request>
+FailAction;<Request ID="8" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="ServerMethod.ID" /></Request>
+FailAction;<Request ID="9" Action="CREATE"><FB Name="BOOL2BOOL_2" Type="BOOL2BOOL" /></Request>
+FailAction;<Request ID="10" Action="CREATE"><FB Name="ServerWrite" Type="PUBLISH_1" /></Request>
+FailAction;<Request ID="11" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/IsolatedTests/WRITEVariable]" Destination="ServerWrite.ID" /></Request>
+FailAction;<Request ID="12" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+FailAction;<Request ID="13" Action="CREATE"><FB Name="INIT" Type="CLIENT_0" /></Request>
+FailAction;<Request ID="14" Action="WRITE"><Connection Source="1" Destination="INIT.QI" /></Request>
+FailAction;<Request ID="15" Action="WRITE"><Connection Source="127.0.0.1:60100" Destination="INIT.ID" /></Request>
+FailAction;<Request ID="16" Action="CREATE"><FB Name="DEINIT" Type="CLIENT_0" /></Request>
+FailAction;<Request ID="17" Action="WRITE"><Connection Source="1" Destination="DEINIT.QI" /></Request>
+FailAction;<Request ID="18" Action="WRITE"><Connection Source="127.0.0.1:60101" Destination="DEINIT.ID" /></Request>
+FailAction;<Request ID="19" Action="CREATE"><FB Name="SERVER_0_1" Type="SERVER_0" /></Request>
+FailAction;<Request ID="20" Action="WRITE"><Connection Source="1" Destination="SERVER_0_1.QI" /></Request>
+FailAction;<Request ID="21" Action="WRITE"><Connection Source="127.0.0.1:60102" Destination="SERVER_0_1.ID" /></Request>
+FailAction;<Request ID="22" Action="CREATE"><FB Name="E_DELAY" Type="E_DELAY" /></Request>
+FailAction;<Request ID="23" Action="WRITE"><Connection Source="T#3s" Destination="E_DELAY.DT" /></Request>
+FailAction;<Request ID="24" Action="CREATE"><FB Name="E_DELAY_1" Type="E_DELAY" /></Request>
+FailAction;<Request ID="25" Action="WRITE"><Connection Source="T#2s" Destination="E_DELAY_1.DT" /></Request>
+FailAction;<Request ID="26" Action="CREATE"><Connection Source="E_SR.EO" Destination="ServerRead.INIT" /></Request>
+FailAction;<Request ID="27" Action="CREATE"><Connection Source="ServerMethod.INITO" Destination="E_SWITCH.EI" /></Request>
+FailAction;<Request ID="28" Action="CREATE"><Connection Source="ServerRead.INITO" Destination="ServerWrite.INIT" /></Request>
+FailAction;<Request ID="29" Action="CREATE"><Connection Source="ServerWrite.INITO" Destination="ServerMethod.INIT" /></Request>
+FailAction;<Request ID="30" Action="CREATE"><Connection Source="INIT.INITO" Destination="DEINIT.INIT" /></Request>
+FailAction;<Request ID="31" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="INIT.REQ" /></Request>
+FailAction;<Request ID="32" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="DEINIT.REQ" /></Request>
+FailAction;<Request ID="33" Action="CREATE"><Connection Source="SERVER_0_1.IND" Destination="SERVER_0_1.RSP" /></Request>
+FailAction;<Request ID="34" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="E_DELAY.START" /></Request>
+FailAction;<Request ID="35" Action="CREATE"><Connection Source="E_DELAY.EO" Destination="STEST_END.REQ" /></Request>
+FailAction;<Request ID="36" Action="CREATE"><Connection Source="SERVER_0_1.IND" Destination="E_SR.R" /></Request>
+FailAction;<Request ID="37" Action="CREATE"><Connection Source="START.COLD" Destination="SERVER_0_1.INIT" /></Request>
+FailAction;<Request ID="38" Action="CREATE"><Connection Source="E_DELAY_1.EO" Destination="INIT.INIT" /></Request>
+FailAction;<Request ID="39" Action="CREATE"><Connection Source="SERVER_0_1.INITO" Destination="E_DELAY_1.START" /></Request>
+FailAction;<Request ID="40" Action="CREATE"><Connection Source="DEINIT.INITO" Destination="E_SR.S" /></Request>
+FailAction;<Request ID="41" Action="CREATE"><Connection Source="E_SR.Q" Destination="ServerRead.QI" /></Request>
+FailAction;<Request ID="42" Action="CREATE"><Connection Source="E_SR.Q" Destination="E_SWITCH.G" /></Request>
+FailAction;<Request ID="43" Action="CREATE"><Connection Source="ServerRead.RD_1" Destination="BOOL2BOOL.IN" /></Request>
+FailAction;<Request ID="44" Action="CREATE"><Connection Source="E_SR.Q" Destination="ServerMethod.QI" /></Request>
+FailAction;<Request ID="45" Action="CREATE"><Connection Source="E_SR.Q" Destination="ServerWrite.QI" /></Request>
+FailAction;<Request ID="46" Action="CREATE"><Connection Source="BOOL2BOOL_2.OUT" Destination="ServerWrite.SD_1" /></Request>
+FailAction;<Request ID="47" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/localFirstRead.fboot b/systemtests/src/modules/opc_ua/localFirstRead.fboot
new file mode 100644
index 0000000..a591cfe
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/localFirstRead.fboot
@@ -0,0 +1,570 @@
+;<Request ID="1" Action="CREATE"><FB Name="foldersReadFirst" Type="EMB_RES" /></Request>
+foldersReadFirst;<Request ID="2" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+foldersReadFirst;<Request ID="3" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="4" Action="CREATE"><FB Name="FoldersNoBrowseName.SUBSCRIBE_2" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="5" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="FoldersNoBrowseName.SUBSCRIBE_2.ID" /></Request>
+foldersReadFirst;<Request ID="6" Action="CREATE"><FB Name="FoldersNoBrowseName.folderTestDirectUnderNoID" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="7" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="8" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="9" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="10" Action="WRITE"><Connection Source="DINT#654321" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="11" Action="CREATE"><FB Name="FoldersNoBrowseName.SUBSCRIBE_2_1" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="12" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="FoldersNoBrowseName.SUBSCRIBE_2_1.ID" /></Request>
+foldersReadFirst;<Request ID="13" Action="CREATE"><FB Name="FoldersNoBrowseName.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+foldersReadFirst;<Request ID="14" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="FoldersNoBrowseName.SUBSCRIBE_1.ID" /></Request>
+foldersReadFirst;<Request ID="15" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="16" Action="WRITE"><Connection Source="DINT#123456" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="17" Action="CREATE"><FB Name="FoldersNoBrowseName.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="18" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="FoldersNoBrowseName.PUBLISH_2_1.ID" /></Request>
+foldersReadFirst;<Request ID="19" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="20" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="21" Action="WRITE"><Connection Source="DINT#789" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="22" Action="CREATE"><FB Name="FoldersNoBrowseName.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersReadFirst;<Request ID="23" Action="CREATE"><FB Name="FoldersNoBrowseName.folderTest2SameFolder1NoID" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="24" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="25" Action="WRITE"><Connection Source="DINT#456" Destination="FoldersNoBrowseName.BOOL2BOOL_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="26" Action="CREATE"><FB Name="FoldersNoBrowseName.folderTest2DifferentFolder2NoID" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="27" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="28" Action="CREATE"><FB Name="FoldersNoBrowseName.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersReadFirst;<Request ID="29" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="FoldersNoBrowseName.PUBLISH_1.ID" /></Request>
+foldersReadFirst;<Request ID="30" Action="CREATE"><FB Name="FoldersNoBrowseName.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="31" Action="WRITE"><Connection Source="DINT#123" Destination="FoldersNoBrowseName.BOOL2BOOL_2.IN" /></Request>
+foldersReadFirst;<Request ID="32" Action="CREATE"><FB Name="FoldersNoBrowseName.E_CTU" Type="E_CTU" /></Request>
+foldersReadFirst;<Request ID="33" Action="WRITE"><Connection Source="UINT#5" Destination="FoldersNoBrowseName.E_CTU.PV" /></Request>
+foldersReadFirst;<Request ID="34" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="35" Action="WRITE"><Connection Source="DINT#123" Destination="FoldersNoBrowseName.F_EQ.IN2" /></Request>
+foldersReadFirst;<Request ID="36" Action="CREATE"><FB Name="FoldersNoBrowseName.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="37" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="FoldersNoBrowseName.PUBLISH_2.ID" /></Request>
+foldersReadFirst;<Request ID="38" Action="CREATE"><FB Name="FoldersNoBrowseName.folderTest2SameFolder2NoID" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="39" Action="CREATE"><FB Name="FoldersNoBrowseName.folderTest2DifferentFolder1NoID" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="40" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="41" Action="WRITE"><Connection Source="DINT#123456" Destination="FoldersNoBrowseName.F_EQ_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="42" Action="CREATE"><FB Name="FoldersNoBrowseName.F_OR_2_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="43" Action="CREATE"><FB Name="FoldersNoBrowseName.F_OR_2" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="44" Action="CREATE"><FB Name="FoldersNoBrowseName.F_OR_1_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="45" Action="CREATE"><FB Name="FoldersNoBrowseName.F_OR_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="46" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="47" Action="WRITE"><Connection Source="DINT#654321" Destination="FoldersNoBrowseName.F_EQ_2_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="48" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="49" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName.F_EQ_5_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="50" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="51" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName.F_EQ__1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="52" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="53" Action="WRITE"><Connection Source="DINT#789" Destination="FoldersNoBrowseName.F_EQ_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="54" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="55" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName.F_EQ_5_1.IN2" /></Request>
+foldersReadFirst;<Request ID="56" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ__1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="57" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName.F_EQ__1.IN2" /></Request>
+foldersReadFirst;<Request ID="58" Action="CREATE"><FB Name="FoldersNoBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="59" Action="WRITE"><Connection Source="DINT#456" Destination="FoldersNoBrowseName.F_EQ_1.IN2" /></Request>
+foldersReadFirst;<Request ID="60" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="61" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeStringId.BOOL2BOOL_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="62" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_2" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="63" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeStringId.F_EQ_2.IN2" /></Request>
+foldersReadFirst;<Request ID="64" Action="CREATE"><FB Name="foldersWithNodeStringId.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="65" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="foldersWithNodeStringId.PUBLISH_2.ID" /></Request>
+foldersReadFirst;<Request ID="66" Action="CREATE"><FB Name="foldersWithNodeStringId.folderTest2SameFolder2String" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="67" Action="CREATE"><FB Name="foldersWithNodeStringId.folderTest2DifferentFolder2String" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="68" Action="CREATE"><FB Name="foldersWithNodeStringId.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersReadFirst;<Request ID="69" Action="CREATE"><FB Name="foldersWithNodeStringId.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="70" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="foldersWithNodeStringId.PUBLISH_2_1.ID" /></Request>
+foldersReadFirst;<Request ID="71" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="72" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="73" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="74" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="75" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="76" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeStringId.BOOL2BOOL_2.IN" /></Request>
+foldersReadFirst;<Request ID="77" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="78" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="79" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="80" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="81" Action="CREATE"><FB Name="foldersWithNodeStringId.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersReadFirst;<Request ID="82" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="foldersWithNodeStringId.PUBLISH_1.ID" /></Request>
+foldersReadFirst;<Request ID="83" Action="CREATE"><FB Name="foldersWithNodeStringId.E_CTU" Type="E_CTU" /></Request>
+foldersReadFirst;<Request ID="84" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeStringId.E_CTU.PV" /></Request>
+foldersReadFirst;<Request ID="85" Action="CREATE"><FB Name="foldersWithNodeStringId.folderTest2SameFolder1String" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="86" Action="CREATE"><FB Name="foldersWithNodeStringId.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersReadFirst;<Request ID="87" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="foldersWithNodeStringId.SUBSCRIBE_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="88" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="89" Action="CREATE"><FB Name="foldersWithNodeStringId.folderTest2DifferentFolder1String" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="90" Action="CREATE"><FB Name="foldersWithNodeStringId.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="91" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="foldersWithNodeStringId.SUBSCRIBE_2_2.ID" /></Request>
+foldersReadFirst;<Request ID="92" Action="CREATE"><FB Name="foldersWithNodeStringId.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="93" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="foldersWithNodeStringId.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="94" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="95" Action="CREATE"><FB Name="foldersWithNodeStringId.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="96" Action="CREATE"><FB Name="foldersWithNodeStringId.folderTestDirectUnderString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="97" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="98" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeStringId.F_EQ_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="99" Action="CREATE"><FB Name="foldersWithNodeStringId.F_OR_2_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="100" Action="CREATE"><FB Name="foldersWithNodeStringId.F_OR_2" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="101" Action="CREATE"><FB Name="foldersWithNodeStringId.F_OR_1_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="102" Action="CREATE"><FB Name="foldersWithNodeStringId.F_OR_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="103" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="104" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeStringId.F_EQ_2_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="105" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="106" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId.F_EQ_5_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="107" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="108" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId.F_EQ__1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="109" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="110" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeStringId.F_EQ_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="111" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="112" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId.F_EQ_5_1.IN2" /></Request>
+foldersReadFirst;<Request ID="113" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ__1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="114" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId.F_EQ__1.IN2" /></Request>
+foldersReadFirst;<Request ID="115" Action="CREATE"><FB Name="foldersWithNodeStringId.F_EQ_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="116" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeStringId.F_EQ_1.IN2" /></Request>
+foldersReadFirst;<Request ID="117" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="118" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="119" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_2" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="120" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeNumericId.F_EQ_2.IN2" /></Request>
+foldersReadFirst;<Request ID="121" Action="CREATE"><FB Name="foldersWithNodeNumericId.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="122" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="foldersWithNodeNumericId.PUBLISH_2.ID" /></Request>
+foldersReadFirst;<Request ID="123" Action="CREATE"><FB Name="foldersWithNodeNumericId.folderTest2SameFolder2Numeric" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="124" Action="CREATE"><FB Name="foldersWithNodeNumericId.folderTest2DifferentFolder2Numeric" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="125" Action="CREATE"><FB Name="foldersWithNodeNumericId.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersReadFirst;<Request ID="126" Action="CREATE"><FB Name="foldersWithNodeNumericId.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="127" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="foldersWithNodeNumericId.PUBLISH_2_1.ID" /></Request>
+foldersReadFirst;<Request ID="128" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="129" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="130" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="131" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="132" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="133" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeNumericId.BOOL2BOOL_2.IN" /></Request>
+foldersReadFirst;<Request ID="134" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="135" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="136" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="137" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="138" Action="CREATE"><FB Name="foldersWithNodeNumericId.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersReadFirst;<Request ID="139" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="foldersWithNodeNumericId.PUBLISH_1.ID" /></Request>
+foldersReadFirst;<Request ID="140" Action="CREATE"><FB Name="foldersWithNodeNumericId.E_CTU" Type="E_CTU" /></Request>
+foldersReadFirst;<Request ID="141" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeNumericId.E_CTU.PV" /></Request>
+foldersReadFirst;<Request ID="142" Action="CREATE"><FB Name="foldersWithNodeNumericId.folderTest2SameFolder1Numeric" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="143" Action="CREATE"><FB Name="foldersWithNodeNumericId.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersReadFirst;<Request ID="144" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="foldersWithNodeNumericId.SUBSCRIBE_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="145" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="146" Action="CREATE"><FB Name="foldersWithNodeNumericId.folderTest2DifferentFolder1Numeric" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="147" Action="CREATE"><FB Name="foldersWithNodeNumericId.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="148" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_2.ID" /></Request>
+foldersReadFirst;<Request ID="149" Action="CREATE"><FB Name="foldersWithNodeNumericId.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="150" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="151" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="152" Action="CREATE"><FB Name="foldersWithNodeNumericId.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="153" Action="CREATE"><FB Name="foldersWithNodeNumericId.folderTestDirectUnderNumeric" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="154" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="155" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeNumericId.F_EQ_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="156" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_OR_2_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="157" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_OR_2" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="158" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_OR_1_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="159" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_OR_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="160" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="161" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeNumericId.F_EQ_2_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="162" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="163" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId.F_EQ_5_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="164" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="165" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId.F_EQ__1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="166" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="167" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeNumericId.F_EQ_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="168" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="169" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId.F_EQ_5_1.IN2" /></Request>
+foldersReadFirst;<Request ID="170" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ__1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="171" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId.F_EQ__1.IN2" /></Request>
+foldersReadFirst;<Request ID="172" Action="CREATE"><FB Name="foldersWithNodeNumericId.F_EQ_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="173" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeNumericId.F_EQ_1.IN2" /></Request>
+foldersReadFirst;<Request ID="174" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="175" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="176" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_2" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="177" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeByteStringId.F_EQ_2.IN2" /></Request>
+foldersReadFirst;<Request ID="178" Action="CREATE"><FB Name="foldersWithNodeByteStringId.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="179" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="foldersWithNodeByteStringId.PUBLISH_2.ID" /></Request>
+foldersReadFirst;<Request ID="180" Action="CREATE"><FB Name="foldersWithNodeByteStringId.folderTest2SameFolder2ByteString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="181" Action="CREATE"><FB Name="foldersWithNodeByteStringId.folderTest2DifferentFolder2ByteString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="182" Action="CREATE"><FB Name="foldersWithNodeByteStringId.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersReadFirst;<Request ID="183" Action="CREATE"><FB Name="foldersWithNodeByteStringId.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersReadFirst;<Request ID="184" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.ID" /></Request>
+foldersReadFirst;<Request ID="185" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="186" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="187" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="188" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="189" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="190" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeByteStringId.BOOL2BOOL_2.IN" /></Request>
+foldersReadFirst;<Request ID="191" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="192" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="193" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="194" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="195" Action="CREATE"><FB Name="foldersWithNodeByteStringId.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersReadFirst;<Request ID="196" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="foldersWithNodeByteStringId.PUBLISH_1.ID" /></Request>
+foldersReadFirst;<Request ID="197" Action="CREATE"><FB Name="foldersWithNodeByteStringId.E_CTU" Type="E_CTU" /></Request>
+foldersReadFirst;<Request ID="198" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeByteStringId.E_CTU.PV" /></Request>
+foldersReadFirst;<Request ID="199" Action="CREATE"><FB Name="foldersWithNodeByteStringId.folderTest2SameFolder1ByteString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="200" Action="CREATE"><FB Name="foldersWithNodeByteStringId.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersReadFirst;<Request ID="201" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="foldersWithNodeByteStringId.SUBSCRIBE_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="202" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="203" Action="CREATE"><FB Name="foldersWithNodeByteStringId.folderTest2DifferentFolder1ByteString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="204" Action="CREATE"><FB Name="foldersWithNodeByteStringId.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="205" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_2.ID" /></Request>
+foldersReadFirst;<Request ID="206" Action="CREATE"><FB Name="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersReadFirst;<Request ID="207" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersReadFirst;<Request ID="208" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="209" Action="CREATE"><FB Name="foldersWithNodeByteStringId.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersReadFirst;<Request ID="210" Action="CREATE"><FB Name="foldersWithNodeByteStringId.folderTestDirectUnderByteString" Type="TEST_CONDITION" /></Request>
+foldersReadFirst;<Request ID="211" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ__1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="212" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId.F_EQ__1.IN2" /></Request>
+foldersReadFirst;<Request ID="213" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="214" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeByteStringId.F_EQ_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="215" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_OR_2_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="216" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="217" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId.F_EQ_5_1.IN2" /></Request>
+foldersReadFirst;<Request ID="218" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="219" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeByteStringId.F_EQ_2_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="220" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="221" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId.F_EQ_5_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="222" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="223" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeByteStringId.F_EQ_1.IN2" /></Request>
+foldersReadFirst;<Request ID="224" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="225" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId.F_EQ__1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="226" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_OR_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="227" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_OR_1_1" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="228" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_OR_2" Type="F_OR" /></Request>
+foldersReadFirst;<Request ID="229" Action="CREATE"><FB Name="foldersWithNodeByteStringId.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersReadFirst;<Request ID="230" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeByteStringId.F_EQ_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="231" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+foldersReadFirst;<Request ID="232" Action="CREATE"><FB Name="E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+foldersReadFirst;<Request ID="233" Action="CREATE"><FB Name="F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+foldersReadFirst;<Request ID="234" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2.IND" Destination="FoldersNoBrowseName.BOOL2BOOL_1.REQ" /></Request>
+foldersReadFirst;<Request ID="235" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ.CNF" Destination="FoldersNoBrowseName.folderTestDirectUnderNoID.REQ" /></Request>
+foldersReadFirst;<Request ID="236" Action="CREATE"><Connection Source="FoldersNoBrowseName.folderTestDirectUnderNoID.CNF" Destination="FoldersNoBrowseName.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="237" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2_1.IND" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="238" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_2.CNF" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="239" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_1.IND" Destination="FoldersNoBrowseName.BOOL2BOOL.REQ" /></Request>
+foldersReadFirst;<Request ID="240" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_2.CNF" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="241" Action="CREATE"><Connection Source="FoldersNoBrowseName.PUBLISH_2_1.INITO" Destination="FoldersNoBrowseName.PUBLISH_2.INIT" /></Request>
+foldersReadFirst;<Request ID="242" Action="CREATE"><Connection Source="FoldersNoBrowseName.PUBLISH_2_1.CNF" Destination="FoldersNoBrowseName.PUBLISH_2.REQ" /></Request>
+foldersReadFirst;<Request ID="243" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL.CNF" Destination="FoldersNoBrowseName.F_EQ.REQ" /></Request>
+foldersReadFirst;<Request ID="244" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_2.CNF" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="245" Action="CREATE"><Connection Source="FoldersNoBrowseName.E_CTU.CUO" Destination="FoldersNoBrowseName.E_PERMIT.EI" /></Request>
+foldersReadFirst;<Request ID="246" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_2.CNF" Destination="FoldersNoBrowseName.BOOL2BOOL_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="247" Action="CREATE"><Connection Source="FoldersNoBrowseName.folderTest2DifferentFolder2NoID.CNF" Destination="FoldersNoBrowseName.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="248" Action="CREATE"><Connection Source="FoldersNoBrowseName.PUBLISH_2.INITO" Destination="FoldersNoBrowseName.PUBLISH_1.INIT" /></Request>
+foldersReadFirst;<Request ID="249" Action="CREATE"><Connection Source="FoldersNoBrowseName.PUBLISH_2.CNF" Destination="FoldersNoBrowseName.PUBLISH_1.REQ" /></Request>
+foldersReadFirst;<Request ID="250" Action="CREATE"><Connection Source="FoldersNoBrowseName.folderTest2SameFolder2NoID.CNF" Destination="FoldersNoBrowseName.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="251" Action="CREATE"><Connection Source="FoldersNoBrowseName.PUBLISH_1.INITO" Destination="foldersWithNodeNumericId.SUBSCRIBE_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="252" Action="CREATE"><Connection Source="FoldersNoBrowseName.E_PERMIT.EO" Destination="foldersWithNodeNumericId.BOOL2BOOL_2.REQ" /></Request>
+foldersReadFirst;<Request ID="253" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1_1.CNF" Destination="FoldersNoBrowseName.PUBLISH_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="254" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_1.INITO" Destination="FoldersNoBrowseName.SUBSCRIBE_2.INIT" /></Request>
+foldersReadFirst;<Request ID="255" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2.INITO" Destination="FoldersNoBrowseName.SUBSCRIBE_2_1.INIT" /></Request>
+foldersReadFirst;<Request ID="256" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2_1.INITO" Destination="FoldersNoBrowseName.PUBLISH_2_1.INIT" /></Request>
+foldersReadFirst;<Request ID="257" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_5_1.CNF" Destination="FoldersNoBrowseName.F_OR_2.REQ" /></Request>
+foldersReadFirst;<Request ID="258" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_2_1.CNF" Destination="FoldersNoBrowseName.F_EQ_5_1.REQ" /></Request>
+foldersReadFirst;<Request ID="259" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_5_1_1.CNF" Destination="FoldersNoBrowseName.F_OR_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="260" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ__1_1.CNF" Destination="FoldersNoBrowseName.F_OR_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="261" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_1_1.CNF" Destination="FoldersNoBrowseName.F_EQ__1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="262" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ__1.CNF" Destination="FoldersNoBrowseName.F_OR_1.REQ" /></Request>
+foldersReadFirst;<Request ID="263" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_2_1_1.CNF" Destination="FoldersNoBrowseName.F_EQ_5_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="264" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_1.CNF" Destination="FoldersNoBrowseName.F_EQ__1.REQ" /></Request>
+foldersReadFirst;<Request ID="265" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2.IND" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="266" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1.CNF" Destination="FoldersNoBrowseName.F_EQ_1.REQ" /></Request>
+foldersReadFirst;<Request ID="267" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1.CNF" Destination="FoldersNoBrowseName.F_EQ_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="268" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_1.CNF" Destination="FoldersNoBrowseName.folderTest2SameFolder1NoID.REQ" /></Request>
+foldersReadFirst;<Request ID="269" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_2.CNF" Destination="FoldersNoBrowseName.folderTest2SameFolder2NoID.REQ" /></Request>
+foldersReadFirst;<Request ID="270" Action="CREATE"><Connection Source="FoldersNoBrowseName.folderTest2SameFolder1NoID.CNF" Destination="FoldersNoBrowseName.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="271" Action="CREATE"><Connection Source="FoldersNoBrowseName.folderTest2DifferentFolder1NoID.CNF" Destination="FoldersNoBrowseName.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="272" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_1_1.CNF" Destination="FoldersNoBrowseName.folderTest2DifferentFolder1NoID.REQ" /></Request>
+foldersReadFirst;<Request ID="273" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_2_1.CNF" Destination="FoldersNoBrowseName.folderTest2DifferentFolder2NoID.REQ" /></Request>
+foldersReadFirst;<Request ID="274" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1.CNF" Destination="FoldersNoBrowseName.F_EQ_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="275" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2_1.IND" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="276" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1.CNF" Destination="FoldersNoBrowseName.F_EQ_2_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="277" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2.RD_2" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="278" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2.RD_1" Destination="FoldersNoBrowseName.BOOL2BOOL_1.IN" /></Request>
+foldersReadFirst;<Request ID="279" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ.OUT" Destination="FoldersNoBrowseName.folderTestDirectUnderNoID.check" /></Request>
+foldersReadFirst;<Request ID="280" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2_1.RD_1" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="281" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1_1.OUT" Destination="FoldersNoBrowseName.PUBLISH_2_1.SD_2" /></Request>
+foldersReadFirst;<Request ID="282" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_2_1.RD_2" Destination="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1.IN" /></Request>
+foldersReadFirst;<Request ID="283" Action="CREATE"><Connection Source="FoldersNoBrowseName.SUBSCRIBE_1.RD_1" Destination="FoldersNoBrowseName.BOOL2BOOL.IN" /></Request>
+foldersReadFirst;<Request ID="284" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_2.OUT" Destination="FoldersNoBrowseName.PUBLISH_2_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="285" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL.OUT" Destination="FoldersNoBrowseName.F_EQ.IN1" /></Request>
+foldersReadFirst;<Request ID="286" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_2.OUT" Destination="FoldersNoBrowseName.PUBLISH_2.SD_2" /></Request>
+foldersReadFirst;<Request ID="287" Action="CREATE"><Connection Source="FoldersNoBrowseName.E_CTU.Q" Destination="FoldersNoBrowseName.E_PERMIT.PERMIT" /></Request>
+foldersReadFirst;<Request ID="288" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_2.OUT" Destination="FoldersNoBrowseName.PUBLISH_2.SD_1" /></Request>
+foldersReadFirst;<Request ID="289" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_2.OUT" Destination="FoldersNoBrowseName.PUBLISH_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="290" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ__1_1.OUT" Destination="FoldersNoBrowseName.F_OR_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="291" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_1_1.OUT" Destination="FoldersNoBrowseName.F_OR_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="292" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_2_1.OUT" Destination="FoldersNoBrowseName.F_OR_2.IN1" /></Request>
+foldersReadFirst;<Request ID="293" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_5_1.OUT" Destination="FoldersNoBrowseName.F_OR_2.IN2" /></Request>
+foldersReadFirst;<Request ID="294" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_1.OUT" Destination="FoldersNoBrowseName.F_OR_1.IN1" /></Request>
+foldersReadFirst;<Request ID="295" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_2_1_1.OUT" Destination="FoldersNoBrowseName.F_OR_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="296" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ_5_1_1.OUT" Destination="FoldersNoBrowseName.F_OR_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="297" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_EQ__1.OUT" Destination="FoldersNoBrowseName.F_OR_1.IN2" /></Request>
+foldersReadFirst;<Request ID="298" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1.OUT" Destination="FoldersNoBrowseName.F_EQ_1.IN1" /></Request>
+foldersReadFirst;<Request ID="299" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1.OUT" Destination="FoldersNoBrowseName.F_EQ__1.IN1" /></Request>
+foldersReadFirst;<Request ID="300" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="301" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ_5_1.IN1" /></Request>
+foldersReadFirst;<Request ID="302" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_1.OUT" Destination="FoldersNoBrowseName.folderTest2SameFolder1NoID.check" /></Request>
+foldersReadFirst;<Request ID="303" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_2.OUT" Destination="FoldersNoBrowseName.folderTest2SameFolder2NoID.check" /></Request>
+foldersReadFirst;<Request ID="304" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_1_1.OUT" Destination="FoldersNoBrowseName.folderTest2DifferentFolder1NoID.check" /></Request>
+foldersReadFirst;<Request ID="305" Action="CREATE"><Connection Source="FoldersNoBrowseName.F_OR_2_1.OUT" Destination="FoldersNoBrowseName.folderTest2DifferentFolder2NoID.check" /></Request>
+foldersReadFirst;<Request ID="306" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="307" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ__1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="308" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ_2_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="309" Action="CREATE"><Connection Source="FoldersNoBrowseName.BOOL2BOOL_1_1_1_1.OUT" Destination="FoldersNoBrowseName.F_EQ_5_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="310" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_2.CNF" Destination="foldersWithNodeStringId.BOOL2BOOL_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="311" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="312" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_3.CNF" Destination="foldersWithNodeStringId.F_EQ_2.REQ" /></Request>
+foldersReadFirst;<Request ID="313" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2.CNF" Destination="foldersWithNodeStringId.folderTestDirectUnderString.REQ" /></Request>
+foldersReadFirst;<Request ID="314" Action="CREATE"><Connection Source="foldersWithNodeStringId.PUBLISH_2_1.INITO" Destination="foldersWithNodeStringId.PUBLISH_2.INIT" /></Request>
+foldersReadFirst;<Request ID="315" Action="CREATE"><Connection Source="foldersWithNodeStringId.PUBLISH_2_1.CNF" Destination="foldersWithNodeStringId.PUBLISH_2.REQ" /></Request>
+foldersReadFirst;<Request ID="316" Action="CREATE"><Connection Source="foldersWithNodeStringId.PUBLISH_2.INITO" Destination="foldersWithNodeStringId.PUBLISH_1.INIT" /></Request>
+foldersReadFirst;<Request ID="317" Action="CREATE"><Connection Source="foldersWithNodeStringId.PUBLISH_2.CNF" Destination="foldersWithNodeStringId.PUBLISH_1.REQ" /></Request>
+foldersReadFirst;<Request ID="318" Action="CREATE"><Connection Source="foldersWithNodeStringId.E_CTU.CUO" Destination="foldersWithNodeStringId.E_PERMIT.EI" /></Request>
+foldersReadFirst;<Request ID="319" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeStringId.PUBLISH_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="320" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="321" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="322" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="323" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeStringId.SUBSCRIBE_2_2.INIT" /></Request>
+foldersReadFirst;<Request ID="324" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeStringId.BOOL2BOOL_3.REQ" /></Request>
+foldersReadFirst;<Request ID="325" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeStringId.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="326" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeStringId.BOOL2BOOL_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="327" Action="CREATE"><Connection Source="foldersWithNodeStringId.PUBLISH_1.INITO" Destination="foldersWithNodeByteStringId.SUBSCRIBE_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="328" Action="CREATE"><Connection Source="foldersWithNodeStringId.folderTestDirectUnderString.CNF" Destination="foldersWithNodeStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="329" Action="CREATE"><Connection Source="foldersWithNodeStringId.folderTest2SameFolder2String.CNF" Destination="foldersWithNodeStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="330" Action="CREATE"><Connection Source="foldersWithNodeStringId.folderTest2DifferentFolder2String.CNF" Destination="foldersWithNodeStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="331" Action="CREATE"><Connection Source="foldersWithNodeStringId.E_PERMIT.EO" Destination="foldersWithNodeByteStringId.BOOL2BOOL_2.REQ" /></Request>
+foldersReadFirst;<Request ID="332" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_1_1.INITO" Destination="foldersWithNodeStringId.PUBLISH_2_1.INIT" /></Request>
+foldersReadFirst;<Request ID="333" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_5_1.CNF" Destination="foldersWithNodeStringId.F_OR_2.REQ" /></Request>
+foldersReadFirst;<Request ID="334" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2_1.CNF" Destination="foldersWithNodeStringId.F_EQ_5_1.REQ" /></Request>
+foldersReadFirst;<Request ID="335" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_5_1_1.CNF" Destination="foldersWithNodeStringId.F_OR_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="336" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ__1_1.CNF" Destination="foldersWithNodeStringId.F_OR_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="337" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_1_1.CNF" Destination="foldersWithNodeStringId.F_EQ__1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="338" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ__1.CNF" Destination="foldersWithNodeStringId.F_OR_1.REQ" /></Request>
+foldersReadFirst;<Request ID="339" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2_1_1.CNF" Destination="foldersWithNodeStringId.F_EQ_5_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="340" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_1.CNF" Destination="foldersWithNodeStringId.F_EQ__1.REQ" /></Request>
+foldersReadFirst;<Request ID="341" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="342" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeStringId.F_EQ_1.REQ" /></Request>
+foldersReadFirst;<Request ID="343" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeStringId.F_EQ_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="344" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_2.CNF" Destination="foldersWithNodeStringId.folderTest2SameFolder2String.REQ" /></Request>
+foldersReadFirst;<Request ID="345" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_1.CNF" Destination="foldersWithNodeStringId.folderTest2SameFolder1String.REQ" /></Request>
+foldersReadFirst;<Request ID="346" Action="CREATE"><Connection Source="foldersWithNodeStringId.folderTest2SameFolder1String.CNF" Destination="foldersWithNodeStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="347" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="348" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeStringId.F_EQ_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="349" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeStringId.F_EQ_2_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="350" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_2_1.CNF" Destination="foldersWithNodeStringId.folderTest2DifferentFolder2String.REQ" /></Request>
+foldersReadFirst;<Request ID="351" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_1_1.CNF" Destination="foldersWithNodeStringId.folderTest2DifferentFolder1String.REQ" /></Request>
+foldersReadFirst;<Request ID="352" Action="CREATE"><Connection Source="foldersWithNodeStringId.folderTest2DifferentFolder1String.CNF" Destination="foldersWithNodeStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="353" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeStringId.PUBLISH_2.SD_1" /></Request>
+foldersReadFirst;<Request ID="354" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_3.OUT" Destination="foldersWithNodeStringId.F_EQ_2.IN1" /></Request>
+foldersReadFirst;<Request ID="355" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2.OUT" Destination="foldersWithNodeStringId.folderTestDirectUnderString.check" /></Request>
+foldersReadFirst;<Request ID="356" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeStringId.PUBLISH_2.SD_2" /></Request>
+foldersReadFirst;<Request ID="357" Action="CREATE"><Connection Source="foldersWithNodeStringId.E_CTU.Q" Destination="foldersWithNodeStringId.E_PERMIT.PERMIT" /></Request>
+foldersReadFirst;<Request ID="358" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeStringId.PUBLISH_2_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="359" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeStringId.PUBLISH_2_1.SD_2" /></Request>
+foldersReadFirst;<Request ID="360" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_2.OUT" Destination="foldersWithNodeStringId.PUBLISH_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="361" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="362" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="363" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeStringId.BOOL2BOOL_3.IN" /></Request>
+foldersReadFirst;<Request ID="364" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="365" Action="CREATE"><Connection Source="foldersWithNodeStringId.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeStringId.BOOL2BOOL_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="366" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ__1_1.OUT" Destination="foldersWithNodeStringId.F_OR_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="367" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_1_1.OUT" Destination="foldersWithNodeStringId.F_OR_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="368" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2_1.OUT" Destination="foldersWithNodeStringId.F_OR_2.IN1" /></Request>
+foldersReadFirst;<Request ID="369" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_5_1.OUT" Destination="foldersWithNodeStringId.F_OR_2.IN2" /></Request>
+foldersReadFirst;<Request ID="370" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_1.OUT" Destination="foldersWithNodeStringId.F_OR_1.IN1" /></Request>
+foldersReadFirst;<Request ID="371" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_2_1_1.OUT" Destination="foldersWithNodeStringId.F_OR_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="372" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ_5_1_1.OUT" Destination="foldersWithNodeStringId.F_OR_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="373" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_EQ__1.OUT" Destination="foldersWithNodeStringId.F_OR_1.IN2" /></Request>
+foldersReadFirst;<Request ID="374" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ_1.IN1" /></Request>
+foldersReadFirst;<Request ID="375" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ__1.IN1" /></Request>
+foldersReadFirst;<Request ID="376" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="377" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ_5_1.IN1" /></Request>
+foldersReadFirst;<Request ID="378" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_2.OUT" Destination="foldersWithNodeStringId.folderTest2SameFolder2String.check" /></Request>
+foldersReadFirst;<Request ID="379" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_1.OUT" Destination="foldersWithNodeStringId.folderTest2SameFolder1String.check" /></Request>
+foldersReadFirst;<Request ID="380" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeStringId.F_EQ_5_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="381" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeStringId.F_EQ_2_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="382" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ__1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="383" Action="CREATE"><Connection Source="foldersWithNodeStringId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeStringId.F_EQ_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="384" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_2_1.OUT" Destination="foldersWithNodeStringId.folderTest2DifferentFolder2String.check" /></Request>
+foldersReadFirst;<Request ID="385" Action="CREATE"><Connection Source="foldersWithNodeStringId.F_OR_1_1.OUT" Destination="foldersWithNodeStringId.folderTest2DifferentFolder1String.check" /></Request>
+foldersReadFirst;<Request ID="386" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_2.CNF" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="387" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="388" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_3.CNF" Destination="foldersWithNodeNumericId.F_EQ_2.REQ" /></Request>
+foldersReadFirst;<Request ID="389" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2.CNF" Destination="foldersWithNodeNumericId.folderTestDirectUnderNumeric.REQ" /></Request>
+foldersReadFirst;<Request ID="390" Action="CREATE"><Connection Source="foldersWithNodeNumericId.PUBLISH_2_1.INITO" Destination="foldersWithNodeNumericId.PUBLISH_2.INIT" /></Request>
+foldersReadFirst;<Request ID="391" Action="CREATE"><Connection Source="foldersWithNodeNumericId.PUBLISH_2_1.CNF" Destination="foldersWithNodeNumericId.PUBLISH_2.REQ" /></Request>
+foldersReadFirst;<Request ID="392" Action="CREATE"><Connection Source="foldersWithNodeNumericId.PUBLISH_2.INITO" Destination="foldersWithNodeNumericId.PUBLISH_1.INIT" /></Request>
+foldersReadFirst;<Request ID="393" Action="CREATE"><Connection Source="foldersWithNodeNumericId.PUBLISH_2.CNF" Destination="foldersWithNodeNumericId.PUBLISH_1.REQ" /></Request>
+foldersReadFirst;<Request ID="394" Action="CREATE"><Connection Source="foldersWithNodeNumericId.E_CTU.CUO" Destination="foldersWithNodeNumericId.E_PERMIT.EI" /></Request>
+foldersReadFirst;<Request ID="395" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeNumericId.PUBLISH_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="396" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="397" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="398" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="399" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_2.INIT" /></Request>
+foldersReadFirst;<Request ID="400" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeNumericId.BOOL2BOOL_3.REQ" /></Request>
+foldersReadFirst;<Request ID="401" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="402" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="403" Action="CREATE"><Connection Source="foldersWithNodeNumericId.PUBLISH_1.INITO" Destination="foldersWithNodeStringId.SUBSCRIBE_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="404" Action="CREATE"><Connection Source="foldersWithNodeNumericId.folderTestDirectUnderNumeric.CNF" Destination="foldersWithNodeNumericId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="405" Action="CREATE"><Connection Source="foldersWithNodeNumericId.folderTest2SameFolder2Numeric.CNF" Destination="foldersWithNodeNumericId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="406" Action="CREATE"><Connection Source="foldersWithNodeNumericId.folderTest2DifferentFolder2Numeric.CNF" Destination="foldersWithNodeNumericId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="407" Action="CREATE"><Connection Source="foldersWithNodeNumericId.E_PERMIT.EO" Destination="foldersWithNodeStringId.BOOL2BOOL_2.REQ" /></Request>
+foldersReadFirst;<Request ID="408" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.INITO" Destination="foldersWithNodeNumericId.PUBLISH_2_1.INIT" /></Request>
+foldersReadFirst;<Request ID="409" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_5_1.CNF" Destination="foldersWithNodeNumericId.F_OR_2.REQ" /></Request>
+foldersReadFirst;<Request ID="410" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2_1.CNF" Destination="foldersWithNodeNumericId.F_EQ_5_1.REQ" /></Request>
+foldersReadFirst;<Request ID="411" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_5_1_1.CNF" Destination="foldersWithNodeNumericId.F_OR_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="412" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ__1_1.CNF" Destination="foldersWithNodeNumericId.F_OR_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="413" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_1_1.CNF" Destination="foldersWithNodeNumericId.F_EQ__1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="414" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ__1.CNF" Destination="foldersWithNodeNumericId.F_OR_1.REQ" /></Request>
+foldersReadFirst;<Request ID="415" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2_1_1.CNF" Destination="foldersWithNodeNumericId.F_EQ_5_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="416" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_1.CNF" Destination="foldersWithNodeNumericId.F_EQ__1.REQ" /></Request>
+foldersReadFirst;<Request ID="417" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeNumericId.F_EQ_1.REQ" /></Request>
+foldersReadFirst;<Request ID="418" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="419" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeNumericId.F_EQ_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="420" Action="CREATE"><Connection Source="foldersWithNodeNumericId.folderTest2SameFolder1Numeric.CNF" Destination="foldersWithNodeNumericId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="421" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_1.CNF" Destination="foldersWithNodeNumericId.folderTest2SameFolder1Numeric.REQ" /></Request>
+foldersReadFirst;<Request ID="422" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_2.CNF" Destination="foldersWithNodeNumericId.folderTest2SameFolder2Numeric.REQ" /></Request>
+foldersReadFirst;<Request ID="423" Action="CREATE"><Connection Source="foldersWithNodeNumericId.folderTest2DifferentFolder1Numeric.CNF" Destination="foldersWithNodeNumericId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="424" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeNumericId.F_EQ_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="425" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="426" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeNumericId.F_EQ_2_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="427" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_2_1.CNF" Destination="foldersWithNodeNumericId.folderTest2DifferentFolder2Numeric.REQ" /></Request>
+foldersReadFirst;<Request ID="428" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_1_1.CNF" Destination="foldersWithNodeNumericId.folderTest2DifferentFolder1Numeric.REQ" /></Request>
+foldersReadFirst;<Request ID="429" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeNumericId.PUBLISH_2.SD_1" /></Request>
+foldersReadFirst;<Request ID="430" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_3.OUT" Destination="foldersWithNodeNumericId.F_EQ_2.IN1" /></Request>
+foldersReadFirst;<Request ID="431" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2.OUT" Destination="foldersWithNodeNumericId.folderTestDirectUnderNumeric.check" /></Request>
+foldersReadFirst;<Request ID="432" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeNumericId.PUBLISH_2.SD_2" /></Request>
+foldersReadFirst;<Request ID="433" Action="CREATE"><Connection Source="foldersWithNodeNumericId.E_CTU.Q" Destination="foldersWithNodeNumericId.E_PERMIT.PERMIT" /></Request>
+foldersReadFirst;<Request ID="434" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeNumericId.PUBLISH_2_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="435" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeNumericId.PUBLISH_2_1.SD_2" /></Request>
+foldersReadFirst;<Request ID="436" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_2.OUT" Destination="foldersWithNodeNumericId.PUBLISH_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="437" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="438" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="439" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeNumericId.BOOL2BOOL_3.IN" /></Request>
+foldersReadFirst;<Request ID="440" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="441" Action="CREATE"><Connection Source="foldersWithNodeNumericId.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeNumericId.BOOL2BOOL_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="442" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ__1_1.OUT" Destination="foldersWithNodeNumericId.F_OR_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="443" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_1_1.OUT" Destination="foldersWithNodeNumericId.F_OR_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="444" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2_1.OUT" Destination="foldersWithNodeNumericId.F_OR_2.IN1" /></Request>
+foldersReadFirst;<Request ID="445" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_5_1.OUT" Destination="foldersWithNodeNumericId.F_OR_2.IN2" /></Request>
+foldersReadFirst;<Request ID="446" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_1.OUT" Destination="foldersWithNodeNumericId.F_OR_1.IN1" /></Request>
+foldersReadFirst;<Request ID="447" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_2_1_1.OUT" Destination="foldersWithNodeNumericId.F_OR_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="448" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ_5_1_1.OUT" Destination="foldersWithNodeNumericId.F_OR_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="449" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_EQ__1.OUT" Destination="foldersWithNodeNumericId.F_OR_1.IN2" /></Request>
+foldersReadFirst;<Request ID="450" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ_1.IN1" /></Request>
+foldersReadFirst;<Request ID="451" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ__1.IN1" /></Request>
+foldersReadFirst;<Request ID="452" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="453" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ_5_1.IN1" /></Request>
+foldersReadFirst;<Request ID="454" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_1.OUT" Destination="foldersWithNodeNumericId.folderTest2SameFolder1Numeric.check" /></Request>
+foldersReadFirst;<Request ID="455" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_2.OUT" Destination="foldersWithNodeNumericId.folderTest2SameFolder2Numeric.check" /></Request>
+foldersReadFirst;<Request ID="456" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="457" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeNumericId.F_EQ__1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="458" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeNumericId.F_EQ_5_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="459" Action="CREATE"><Connection Source="foldersWithNodeNumericId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeNumericId.F_EQ_2_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="460" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_2_1.OUT" Destination="foldersWithNodeNumericId.folderTest2DifferentFolder2Numeric.check" /></Request>
+foldersReadFirst;<Request ID="461" Action="CREATE"><Connection Source="foldersWithNodeNumericId.F_OR_1_1.OUT" Destination="foldersWithNodeNumericId.folderTest2DifferentFolder1Numeric.check" /></Request>
+foldersReadFirst;<Request ID="462" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_2.CNF" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="463" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="464" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_3.CNF" Destination="foldersWithNodeByteStringId.F_EQ_2.REQ" /></Request>
+foldersReadFirst;<Request ID="465" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2.CNF" Destination="foldersWithNodeByteStringId.folderTestDirectUnderByteString.REQ" /></Request>
+foldersReadFirst;<Request ID="466" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.PUBLISH_2_1.INITO" Destination="foldersWithNodeByteStringId.PUBLISH_2.INIT" /></Request>
+foldersReadFirst;<Request ID="467" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.PUBLISH_2_1.CNF" Destination="foldersWithNodeByteStringId.PUBLISH_2.REQ" /></Request>
+foldersReadFirst;<Request ID="468" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.PUBLISH_2.INITO" Destination="foldersWithNodeByteStringId.PUBLISH_1.INIT" /></Request>
+foldersReadFirst;<Request ID="469" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.PUBLISH_2.CNF" Destination="foldersWithNodeByteStringId.PUBLISH_1.REQ" /></Request>
+foldersReadFirst;<Request ID="470" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.E_CTU.CUO" Destination="foldersWithNodeByteStringId.E_PERMIT.EI" /></Request>
+foldersReadFirst;<Request ID="471" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="472" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="473" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="474" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="475" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_2.INIT" /></Request>
+foldersReadFirst;<Request ID="476" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeByteStringId.BOOL2BOOL_3.REQ" /></Request>
+foldersReadFirst;<Request ID="477" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersReadFirst;<Request ID="478" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="479" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.PUBLISH_1.INITO" Destination="F_BOOL_TO_UINT.REQ" /></Request>
+foldersReadFirst;<Request ID="480" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.folderTestDirectUnderByteString.CNF" Destination="foldersWithNodeByteStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="481" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.folderTest2SameFolder2ByteString.CNF" Destination="foldersWithNodeByteStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="482" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.folderTest2DifferentFolder2ByteString.CNF" Destination="foldersWithNodeByteStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="483" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.E_PERMIT.EO" Destination="E_SR.R" /></Request>
+foldersReadFirst;<Request ID="484" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.INITO" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.INIT" /></Request>
+foldersReadFirst;<Request ID="485" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2_1_1.CNF" Destination="foldersWithNodeByteStringId.F_EQ_5_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="486" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ__1.CNF" Destination="foldersWithNodeByteStringId.F_OR_1.REQ" /></Request>
+foldersReadFirst;<Request ID="487" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_5_1.CNF" Destination="foldersWithNodeByteStringId.F_OR_2.REQ" /></Request>
+foldersReadFirst;<Request ID="488" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ__1_1.CNF" Destination="foldersWithNodeByteStringId.F_OR_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="489" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_5_1_1.CNF" Destination="foldersWithNodeByteStringId.F_OR_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="490" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_1_1.CNF" Destination="foldersWithNodeByteStringId.F_EQ__1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="491" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_1.CNF" Destination="foldersWithNodeByteStringId.F_EQ__1.REQ" /></Request>
+foldersReadFirst;<Request ID="492" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2_1.CNF" Destination="foldersWithNodeByteStringId.F_EQ_5_1.REQ" /></Request>
+foldersReadFirst;<Request ID="493" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersReadFirst;<Request ID="494" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeByteStringId.F_EQ_1.REQ" /></Request>
+foldersReadFirst;<Request ID="495" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeByteStringId.F_EQ_2_1.REQ" /></Request>
+foldersReadFirst;<Request ID="496" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_1.CNF" Destination="foldersWithNodeByteStringId.folderTest2SameFolder1ByteString.REQ" /></Request>
+foldersReadFirst;<Request ID="497" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_2.CNF" Destination="foldersWithNodeByteStringId.folderTest2SameFolder2ByteString.REQ" /></Request>
+foldersReadFirst;<Request ID="498" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.folderTest2SameFolder1ByteString.CNF" Destination="foldersWithNodeByteStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="499" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeByteStringId.F_EQ_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="500" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeByteStringId.F_EQ_2_1_1.REQ" /></Request>
+foldersReadFirst;<Request ID="501" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersReadFirst;<Request ID="502" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_1_1.CNF" Destination="foldersWithNodeByteStringId.folderTest2DifferentFolder1ByteString.REQ" /></Request>
+foldersReadFirst;<Request ID="503" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_2_1.CNF" Destination="foldersWithNodeByteStringId.folderTest2DifferentFolder2ByteString.REQ" /></Request>
+foldersReadFirst;<Request ID="504" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.folderTest2DifferentFolder1ByteString.CNF" Destination="foldersWithNodeByteStringId.E_CTU.CU" /></Request>
+foldersReadFirst;<Request ID="505" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeByteStringId.PUBLISH_2.SD_1" /></Request>
+foldersReadFirst;<Request ID="506" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ_2.IN1" /></Request>
+foldersReadFirst;<Request ID="507" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2.OUT" Destination="foldersWithNodeByteStringId.folderTestDirectUnderByteString.check" /></Request>
+foldersReadFirst;<Request ID="508" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeByteStringId.PUBLISH_2.SD_2" /></Request>
+foldersReadFirst;<Request ID="509" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.E_CTU.Q" Destination="foldersWithNodeByteStringId.E_PERMIT.PERMIT" /></Request>
+foldersReadFirst;<Request ID="510" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="511" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.SD_2" /></Request>
+foldersReadFirst;<Request ID="512" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_2.OUT" Destination="foldersWithNodeByteStringId.PUBLISH_1.SD_1" /></Request>
+foldersReadFirst;<Request ID="513" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="514" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="515" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeByteStringId.BOOL2BOOL_3.IN" /></Request>
+foldersReadFirst;<Request ID="516" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersReadFirst;<Request ID="517" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeByteStringId.BOOL2BOOL_1_3.IN" /></Request>
+foldersReadFirst;<Request ID="518" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_5_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_2.IN2" /></Request>
+foldersReadFirst;<Request ID="519" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_1_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="520" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ__1_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_1_1.IN2" /></Request>
+foldersReadFirst;<Request ID="521" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_2.IN1" /></Request>
+foldersReadFirst;<Request ID="522" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_5_1_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_2_1.IN2" /></Request>
+foldersReadFirst;<Request ID="523" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_1.IN1" /></Request>
+foldersReadFirst;<Request ID="524" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ__1.OUT" Destination="foldersWithNodeByteStringId.F_OR_1.IN2" /></Request>
+foldersReadFirst;<Request ID="525" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_EQ_2_1_1.OUT" Destination="foldersWithNodeByteStringId.F_OR_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="526" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ_1.IN1" /></Request>
+foldersReadFirst;<Request ID="527" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ__1.IN1" /></Request>
+foldersReadFirst;<Request ID="528" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ_5_1.IN1" /></Request>
+foldersReadFirst;<Request ID="529" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ_2_1.IN1" /></Request>
+foldersReadFirst;<Request ID="530" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_1.OUT" Destination="foldersWithNodeByteStringId.folderTest2SameFolder1ByteString.check" /></Request>
+foldersReadFirst;<Request ID="531" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_2.OUT" Destination="foldersWithNodeByteStringId.folderTest2SameFolder2ByteString.check" /></Request>
+foldersReadFirst;<Request ID="532" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="533" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeByteStringId.F_EQ__1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="534" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId.F_EQ_2_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="535" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId.F_EQ_5_1_1.IN1" /></Request>
+foldersReadFirst;<Request ID="536" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_2_1.OUT" Destination="foldersWithNodeByteStringId.folderTest2DifferentFolder2ByteString.check" /></Request>
+foldersReadFirst;<Request ID="537" Action="CREATE"><Connection Source="foldersWithNodeByteStringId.F_OR_1_1.OUT" Destination="foldersWithNodeByteStringId.folderTest2DifferentFolder1ByteString.check" /></Request>
+foldersReadFirst;<Request ID="538" Action="CREATE"><Connection Source="START.WARM" Destination="E_SR.S" /></Request>
+foldersReadFirst;<Request ID="539" Action="CREATE"><Connection Source="START.COLD" Destination="E_SR.S" /></Request>
+foldersReadFirst;<Request ID="540" Action="CREATE"><Connection Source="E_SR.EO" Destination="FoldersNoBrowseName.SUBSCRIBE_1.INIT" /></Request>
+foldersReadFirst;<Request ID="541" Action="CREATE"><Connection Source="E_DEMUX_2.EO2" Destination="FoldersNoBrowseName.BOOL2BOOL_2.REQ" /></Request>
+foldersReadFirst;<Request ID="542" Action="CREATE"><Connection Source="F_BOOL_TO_UINT.CNF" Destination="E_DEMUX_2.EI" /></Request>
+foldersReadFirst;<Request ID="543" Action="CREATE"><Connection Source="E_DEMUX_2.EO1" Destination="STEST_END.REQ" /></Request>
+foldersReadFirst;<Request ID="544" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.SUBSCRIBE_2.QI" /></Request>
+foldersReadFirst;<Request ID="545" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.SUBSCRIBE_2_1.QI" /></Request>
+foldersReadFirst;<Request ID="546" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.SUBSCRIBE_1.QI" /></Request>
+foldersReadFirst;<Request ID="547" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.PUBLISH_2_1.QI" /></Request>
+foldersReadFirst;<Request ID="548" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.PUBLISH_1.QI" /></Request>
+foldersReadFirst;<Request ID="549" Action="CREATE"><Connection Source="E_SR.Q" Destination="FoldersNoBrowseName.PUBLISH_2.QI" /></Request>
+foldersReadFirst;<Request ID="550" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.SUBSCRIBE_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="551" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.SUBSCRIBE_2_2.QI" /></Request>
+foldersReadFirst;<Request ID="552" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="553" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.PUBLISH_1.QI" /></Request>
+foldersReadFirst;<Request ID="554" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.PUBLISH_2.QI" /></Request>
+foldersReadFirst;<Request ID="555" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeStringId.PUBLISH_2_1.QI" /></Request>
+foldersReadFirst;<Request ID="556" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.SUBSCRIBE_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="557" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_2.QI" /></Request>
+foldersReadFirst;<Request ID="558" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="559" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.PUBLISH_1.QI" /></Request>
+foldersReadFirst;<Request ID="560" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.PUBLISH_2.QI" /></Request>
+foldersReadFirst;<Request ID="561" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeNumericId.PUBLISH_2_1.QI" /></Request>
+foldersReadFirst;<Request ID="562" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.SUBSCRIBE_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="563" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_2.QI" /></Request>
+foldersReadFirst;<Request ID="564" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersReadFirst;<Request ID="565" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.PUBLISH_1.QI" /></Request>
+foldersReadFirst;<Request ID="566" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.PUBLISH_2.QI" /></Request>
+foldersReadFirst;<Request ID="567" Action="CREATE"><Connection Source="E_SR.Q" Destination="foldersWithNodeByteStringId.PUBLISH_2_1.QI" /></Request>
+foldersReadFirst;<Request ID="568" Action="CREATE"><Connection Source="E_SR.Q" Destination="F_BOOL_TO_UINT.IN" /></Request>
+foldersReadFirst;<Request ID="569" Action="CREATE"><Connection Source="F_BOOL_TO_UINT.OUT" Destination="E_DEMUX_2.K" /></Request>
+foldersReadFirst;<Request ID="570" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/localFirstWrite.fboot b/systemtests/src/modules/opc_ua/localFirstWrite.fboot
new file mode 100644
index 0000000..fc9ad98
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/localFirstWrite.fboot
@@ -0,0 +1,570 @@
+;<Request ID="1" Action="CREATE"><FB Name="foldersWriteFirst" Type="EMB_RES" /></Request>
+foldersWriteFirst;<Request ID="2" Action="CREATE"><FB Name="STEST_END_1" Type="STEST_END" /></Request>
+foldersWriteFirst;<Request ID="3" Action="CREATE"><FB Name="F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+foldersWriteFirst;<Request ID="4" Action="CREATE"><FB Name="E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+foldersWriteFirst;<Request ID="5" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+foldersWriteFirst;<Request ID="6" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="7" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="8" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_2" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="9" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeStringId_2.F_EQ_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="10" Action="CREATE"><FB Name="foldersWithNodeStringId_2.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="11" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="foldersWithNodeStringId_2.PUBLISH_2.ID" /></Request>
+foldersWriteFirst;<Request ID="12" Action="CREATE"><FB Name="foldersWithNodeStringId_2.folderTest2SameFolder2String" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="13" Action="CREATE"><FB Name="foldersWithNodeStringId_2.folderTest2DifferentFolder2String" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="14" Action="CREATE"><FB Name="foldersWithNodeStringId_2.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersWriteFirst;<Request ID="15" Action="CREATE"><FB Name="foldersWithNodeStringId_2.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="16" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.ID" /></Request>
+foldersWriteFirst;<Request ID="17" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="18" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="19" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="20" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="21" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="22" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeStringId_2.BOOL2BOOL_2.IN" /></Request>
+foldersWriteFirst;<Request ID="23" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="24" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="25" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="26" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="27" Action="CREATE"><FB Name="foldersWithNodeStringId_2.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersWriteFirst;<Request ID="28" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="foldersWithNodeStringId_2.PUBLISH_1.ID" /></Request>
+foldersWriteFirst;<Request ID="29" Action="CREATE"><FB Name="foldersWithNodeStringId_2.E_CTU" Type="E_CTU" /></Request>
+foldersWriteFirst;<Request ID="30" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeStringId_2.E_CTU.PV" /></Request>
+foldersWriteFirst;<Request ID="31" Action="CREATE"><FB Name="foldersWithNodeStringId_2.folderTest2SameFolder1String" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="32" Action="CREATE"><FB Name="foldersWithNodeStringId_2.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersWriteFirst;<Request ID="33" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="foldersWithNodeStringId_2.SUBSCRIBE_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="34" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="35" Action="CREATE"><FB Name="foldersWithNodeStringId_2.folderTest2DifferentFolder1String" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="36" Action="CREATE"><FB Name="foldersWithNodeStringId_2.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="37" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_2.ID" /></Request>
+foldersWriteFirst;<Request ID="38" Action="CREATE"><FB Name="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="39" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="40" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="41" Action="CREATE"><FB Name="foldersWithNodeStringId_2.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="42" Action="CREATE"><FB Name="foldersWithNodeStringId_2.folderTestDirectUnderString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="43" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="44" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeStringId_2.F_EQ_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="45" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_OR_2_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="46" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_OR_2" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="47" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_OR_1_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="48" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_OR_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="49" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="50" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeStringId_2.F_EQ_2_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="51" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="52" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId_2.F_EQ_5_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="53" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="54" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId_2.F_EQ__1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="55" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="56" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeStringId_2.F_EQ_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="57" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="58" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId_2.F_EQ_5_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="59" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ__1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="60" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeStringId_2.F_EQ__1.IN2" /></Request>
+foldersWriteFirst;<Request ID="61" Action="CREATE"><FB Name="foldersWithNodeStringId_2.F_EQ_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="62" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeStringId_2.F_EQ_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="63" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="64" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="65" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_2" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="66" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeByteStringId_2.F_EQ_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="67" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="68" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.ID" /></Request>
+foldersWriteFirst;<Request ID="69" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.folderTest2SameFolder2ByteString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="70" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.folderTest2DifferentFolder2ByteString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="71" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersWriteFirst;<Request ID="72" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="73" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.ID" /></Request>
+foldersWriteFirst;<Request ID="74" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="75" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="76" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="77" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="78" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="79" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_2.IN" /></Request>
+foldersWriteFirst;<Request ID="80" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="81" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="82" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="83" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="84" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersWriteFirst;<Request ID="85" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="foldersWithNodeByteStringId_2.PUBLISH_1.ID" /></Request>
+foldersWriteFirst;<Request ID="86" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.E_CTU" Type="E_CTU" /></Request>
+foldersWriteFirst;<Request ID="87" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeByteStringId_2.E_CTU.PV" /></Request>
+foldersWriteFirst;<Request ID="88" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.folderTest2SameFolder1ByteString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="89" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersWriteFirst;<Request ID="90" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="91" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="92" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.folderTest2DifferentFolder1ByteString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="93" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="94" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.ID" /></Request>
+foldersWriteFirst;<Request ID="95" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="96" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="97" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="98" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="99" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.folderTestDirectUnderByteString" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="100" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ__1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="101" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId_2.F_EQ__1.IN2" /></Request>
+foldersWriteFirst;<Request ID="102" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="103" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="104" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_OR_2_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="105" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="106" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="107" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="108" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="109" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="110" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="111" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="112" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeByteStringId_2.F_EQ_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="113" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="114" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeByteStringId_2.F_EQ__1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="115" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_OR_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="116" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_OR_1_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="117" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_OR_2" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="118" Action="CREATE"><FB Name="foldersWithNodeByteStringId_2.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="119" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeByteStringId_2.F_EQ_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="120" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="121" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="122" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_2" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="123" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeNumericId_2.F_EQ_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="124" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="125" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="foldersWithNodeNumericId_2.PUBLISH_2.ID" /></Request>
+foldersWriteFirst;<Request ID="126" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.folderTest2SameFolder2Numeric" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="127" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.folderTest2DifferentFolder2Numeric" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="128" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersWriteFirst;<Request ID="129" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="130" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.ID" /></Request>
+foldersWriteFirst;<Request ID="131" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="132" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="133" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="134" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="135" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="136" Action="WRITE"><Connection Source="DINT#123" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_2.IN" /></Request>
+foldersWriteFirst;<Request ID="137" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="138" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="139" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="140" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="141" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersWriteFirst;<Request ID="142" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="foldersWithNodeNumericId_2.PUBLISH_1.ID" /></Request>
+foldersWriteFirst;<Request ID="143" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.E_CTU" Type="E_CTU" /></Request>
+foldersWriteFirst;<Request ID="144" Action="WRITE"><Connection Source="UINT#5" Destination="foldersWithNodeNumericId_2.E_CTU.PV" /></Request>
+foldersWriteFirst;<Request ID="145" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.folderTest2SameFolder1Numeric" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="146" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+foldersWriteFirst;<Request ID="147" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="148" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="149" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.folderTest2DifferentFolder1Numeric" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="150" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.SUBSCRIBE_2_2" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="151" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.ID" /></Request>
+foldersWriteFirst;<Request ID="152" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="153" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.ID" /></Request>
+foldersWriteFirst;<Request ID="154" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_1_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="155" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.BOOL2BOOL_3" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="156" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.folderTestDirectUnderNumeric" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="157" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="158" Action="WRITE"><Connection Source="DINT#123456" Destination="foldersWithNodeNumericId_2.F_EQ_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="159" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_OR_2_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="160" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_OR_2" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="161" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_OR_1_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="162" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_OR_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="163" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="164" Action="WRITE"><Connection Source="DINT#654321" Destination="foldersWithNodeNumericId_2.F_EQ_2_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="165" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="166" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId_2.F_EQ_5_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="167" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="168" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId_2.F_EQ__1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="169" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="170" Action="WRITE"><Connection Source="DINT#789" Destination="foldersWithNodeNumericId_2.F_EQ_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="171" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="172" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId_2.F_EQ_5_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="173" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ__1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="174" Action="WRITE"><Connection Source="DINT#0" Destination="foldersWithNodeNumericId_2.F_EQ__1.IN2" /></Request>
+foldersWriteFirst;<Request ID="175" Action="CREATE"><FB Name="foldersWithNodeNumericId_2.F_EQ_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="176" Action="WRITE"><Connection Source="DINT#456" Destination="foldersWithNodeNumericId_2.F_EQ_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="177" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="178" Action="CREATE"><FB Name="FoldersNoBrowseName_2.SUBSCRIBE_2" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="179" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2.ID" /></Request>
+foldersWriteFirst;<Request ID="180" Action="CREATE"><FB Name="FoldersNoBrowseName_2.folderTestDirectUnderNoID" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="181" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="182" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="183" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="184" Action="WRITE"><Connection Source="DINT#654321" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="185" Action="CREATE"><FB Name="FoldersNoBrowseName_2.SUBSCRIBE_2_1" Type="SUBSCRIBE_2" /></Request>
+foldersWriteFirst;<Request ID="186" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2_1.ID" /></Request>
+foldersWriteFirst;<Request ID="187" Action="CREATE"><FB Name="FoldersNoBrowseName_2.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+foldersWriteFirst;<Request ID="188" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="FoldersNoBrowseName_2.SUBSCRIBE_1.ID" /></Request>
+foldersWriteFirst;<Request ID="189" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="190" Action="WRITE"><Connection Source="DINT#123456" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="191" Action="CREATE"><FB Name="FoldersNoBrowseName_2.PUBLISH_2_1" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="192" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.ID" /></Request>
+foldersWriteFirst;<Request ID="193" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="194" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="195" Action="WRITE"><Connection Source="DINT#789" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="196" Action="CREATE"><FB Name="FoldersNoBrowseName_2.E_PERMIT" Type="E_PERMIT" /></Request>
+foldersWriteFirst;<Request ID="197" Action="CREATE"><FB Name="FoldersNoBrowseName_2.folderTest2SameFolder1NoID" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="198" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="199" Action="WRITE"><Connection Source="DINT#456" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="200" Action="CREATE"><FB Name="FoldersNoBrowseName_2.folderTest2DifferentFolder2NoID" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="201" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="202" Action="CREATE"><FB Name="FoldersNoBrowseName_2.PUBLISH_1" Type="PUBLISH_1" /></Request>
+foldersWriteFirst;<Request ID="203" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="FoldersNoBrowseName_2.PUBLISH_1.ID" /></Request>
+foldersWriteFirst;<Request ID="204" Action="CREATE"><FB Name="FoldersNoBrowseName_2.BOOL2BOOL_2" Type="DINT2DINT" /></Request>
+foldersWriteFirst;<Request ID="205" Action="WRITE"><Connection Source="DINT#123" Destination="FoldersNoBrowseName_2.BOOL2BOOL_2.IN" /></Request>
+foldersWriteFirst;<Request ID="206" Action="CREATE"><FB Name="FoldersNoBrowseName_2.E_CTU" Type="E_CTU" /></Request>
+foldersWriteFirst;<Request ID="207" Action="WRITE"><Connection Source="UINT#5" Destination="FoldersNoBrowseName_2.E_CTU.PV" /></Request>
+foldersWriteFirst;<Request ID="208" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="209" Action="WRITE"><Connection Source="DINT#123" Destination="FoldersNoBrowseName_2.F_EQ.IN2" /></Request>
+foldersWriteFirst;<Request ID="210" Action="CREATE"><FB Name="FoldersNoBrowseName_2.PUBLISH_2" Type="PUBLISH_2" /></Request>
+foldersWriteFirst;<Request ID="211" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="FoldersNoBrowseName_2.PUBLISH_2.ID" /></Request>
+foldersWriteFirst;<Request ID="212" Action="CREATE"><FB Name="FoldersNoBrowseName_2.folderTest2SameFolder2NoID" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="213" Action="CREATE"><FB Name="FoldersNoBrowseName_2.folderTest2DifferentFolder1NoID" Type="TEST_CONDITION" /></Request>
+foldersWriteFirst;<Request ID="214" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="215" Action="WRITE"><Connection Source="DINT#123456" Destination="FoldersNoBrowseName_2.F_EQ_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="216" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_OR_2_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="217" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_OR_2" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="218" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_OR_1_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="219" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_OR_1" Type="F_OR" /></Request>
+foldersWriteFirst;<Request ID="220" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_2_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="221" Action="WRITE"><Connection Source="DINT#654321" Destination="FoldersNoBrowseName_2.F_EQ_2_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="222" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_5_1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="223" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName_2.F_EQ_5_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="224" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ__1_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="225" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName_2.F_EQ__1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="226" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_2_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="227" Action="WRITE"><Connection Source="DINT#789" Destination="FoldersNoBrowseName_2.F_EQ_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="228" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_5_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="229" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName_2.F_EQ_5_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="230" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ__1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="231" Action="WRITE"><Connection Source="DINT#0" Destination="FoldersNoBrowseName_2.F_EQ__1.IN2" /></Request>
+foldersWriteFirst;<Request ID="232" Action="CREATE"><FB Name="FoldersNoBrowseName_2.F_EQ_1" Type="F_EQ" /></Request>
+foldersWriteFirst;<Request ID="233" Action="WRITE"><Connection Source="DINT#456" Destination="FoldersNoBrowseName_2.F_EQ_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="234" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_2.CNF" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="235" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="236" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_3.CNF" Destination="foldersWithNodeStringId_2.F_EQ_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="237" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2.CNF" Destination="foldersWithNodeStringId_2.folderTestDirectUnderString.REQ" /></Request>
+foldersWriteFirst;<Request ID="238" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.PUBLISH_2_1.INITO" Destination="foldersWithNodeStringId_2.PUBLISH_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="239" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.PUBLISH_2_1.CNF" Destination="foldersWithNodeStringId_2.PUBLISH_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="240" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.PUBLISH_2.INITO" Destination="foldersWithNodeStringId_2.PUBLISH_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="241" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.PUBLISH_2.CNF" Destination="foldersWithNodeStringId_2.PUBLISH_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="242" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.E_CTU.CUO" Destination="foldersWithNodeStringId_2.E_PERMIT.EI" /></Request>
+foldersWriteFirst;<Request ID="243" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="244" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="245" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="246" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="247" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="248" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeStringId_2.BOOL2BOOL_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="249" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="250" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="251" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.folderTestDirectUnderString.CNF" Destination="foldersWithNodeStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="252" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.folderTest2SameFolder2String.CNF" Destination="foldersWithNodeStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="253" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.folderTest2DifferentFolder2String.CNF" Destination="foldersWithNodeStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="254" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.E_PERMIT.EO" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="255" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_5_1.CNF" Destination="foldersWithNodeStringId_2.F_OR_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="256" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2_1.CNF" Destination="foldersWithNodeStringId_2.F_EQ_5_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="257" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_5_1_1.CNF" Destination="foldersWithNodeStringId_2.F_OR_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="258" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ__1_1.CNF" Destination="foldersWithNodeStringId_2.F_OR_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="259" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_1_1.CNF" Destination="foldersWithNodeStringId_2.F_EQ__1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="260" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ__1.CNF" Destination="foldersWithNodeStringId_2.F_OR_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="261" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2_1_1.CNF" Destination="foldersWithNodeStringId_2.F_EQ_5_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="262" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_1.CNF" Destination="foldersWithNodeStringId_2.F_EQ__1.REQ" /></Request>
+foldersWriteFirst;<Request ID="263" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="264" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeStringId_2.F_EQ_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="265" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeStringId_2.F_EQ_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="266" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_2.CNF" Destination="foldersWithNodeStringId_2.folderTest2SameFolder2String.REQ" /></Request>
+foldersWriteFirst;<Request ID="267" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_1.CNF" Destination="foldersWithNodeStringId_2.folderTest2SameFolder1String.REQ" /></Request>
+foldersWriteFirst;<Request ID="268" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.folderTest2SameFolder1String.CNF" Destination="foldersWithNodeStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="269" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="270" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeStringId_2.F_EQ_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="271" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeStringId_2.F_EQ_2_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="272" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_2_1.CNF" Destination="foldersWithNodeStringId_2.folderTest2DifferentFolder2String.REQ" /></Request>
+foldersWriteFirst;<Request ID="273" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_1_1.CNF" Destination="foldersWithNodeStringId_2.folderTest2DifferentFolder1String.REQ" /></Request>
+foldersWriteFirst;<Request ID="274" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.folderTest2DifferentFolder1String.CNF" Destination="foldersWithNodeStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="275" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.INITO" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="276" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.PUBLISH_1.INITO" Destination="foldersWithNodeStringId_2.SUBSCRIBE_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="277" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeStringId_2.PUBLISH_2.SD_1" /></Request>
+foldersWriteFirst;<Request ID="278" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="279" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2.OUT" Destination="foldersWithNodeStringId_2.folderTestDirectUnderString.check" /></Request>
+foldersWriteFirst;<Request ID="280" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeStringId_2.PUBLISH_2.SD_2" /></Request>
+foldersWriteFirst;<Request ID="281" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.E_CTU.Q" Destination="foldersWithNodeStringId_2.E_PERMIT.PERMIT" /></Request>
+foldersWriteFirst;<Request ID="282" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="283" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.SD_2" /></Request>
+foldersWriteFirst;<Request ID="284" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_2.OUT" Destination="foldersWithNodeStringId_2.PUBLISH_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="285" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="286" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="287" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeStringId_2.BOOL2BOOL_3.IN" /></Request>
+foldersWriteFirst;<Request ID="288" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="289" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeStringId_2.BOOL2BOOL_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="290" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ__1_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="291" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_1_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="292" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="293" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_5_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="294" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="295" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_2_1_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="296" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ_5_1_1.OUT" Destination="foldersWithNodeStringId_2.F_OR_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="297" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_EQ__1.OUT" Destination="foldersWithNodeStringId_2.F_OR_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="298" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="299" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ__1.IN1" /></Request>
+foldersWriteFirst;<Request ID="300" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="301" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ_5_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="302" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_2.OUT" Destination="foldersWithNodeStringId_2.folderTest2SameFolder2String.check" /></Request>
+foldersWriteFirst;<Request ID="303" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_1.OUT" Destination="foldersWithNodeStringId_2.folderTest2SameFolder1String.check" /></Request>
+foldersWriteFirst;<Request ID="304" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeStringId_2.F_EQ_5_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="305" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeStringId_2.F_EQ_2_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="306" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ__1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="307" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeStringId_2.F_EQ_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="308" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_2_1.OUT" Destination="foldersWithNodeStringId_2.folderTest2DifferentFolder2String.check" /></Request>
+foldersWriteFirst;<Request ID="309" Action="CREATE"><Connection Source="foldersWithNodeStringId_2.F_OR_1_1.OUT" Destination="foldersWithNodeStringId_2.folderTest2DifferentFolder1String.check" /></Request>
+foldersWriteFirst;<Request ID="310" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_2.CNF" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="311" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="312" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_3.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="313" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2.CNF" Destination="foldersWithNodeByteStringId_2.folderTestDirectUnderByteString.REQ" /></Request>
+foldersWriteFirst;<Request ID="314" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.PUBLISH_2_1.INITO" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="315" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.PUBLISH_2_1.CNF" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="316" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.PUBLISH_2.INITO" Destination="foldersWithNodeByteStringId_2.PUBLISH_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="317" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.PUBLISH_2.CNF" Destination="foldersWithNodeByteStringId_2.PUBLISH_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="318" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.E_CTU.CUO" Destination="foldersWithNodeByteStringId_2.E_PERMIT.EI" /></Request>
+foldersWriteFirst;<Request ID="319" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="320" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="321" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="322" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="323" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="324" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="325" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="326" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="327" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.folderTestDirectUnderByteString.CNF" Destination="foldersWithNodeByteStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="328" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.folderTest2SameFolder2ByteString.CNF" Destination="foldersWithNodeByteStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="329" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.folderTest2DifferentFolder2ByteString.CNF" Destination="foldersWithNodeByteStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="330" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.E_PERMIT.EO" Destination="E_SR_1.R" /></Request>
+foldersWriteFirst;<Request ID="331" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2_1_1.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="332" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ__1.CNF" Destination="foldersWithNodeByteStringId_2.F_OR_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="333" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_5_1.CNF" Destination="foldersWithNodeByteStringId_2.F_OR_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="334" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ__1_1.CNF" Destination="foldersWithNodeByteStringId_2.F_OR_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="335" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_5_1_1.CNF" Destination="foldersWithNodeByteStringId_2.F_OR_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="336" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_1_1.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ__1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="337" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_1.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ__1.REQ" /></Request>
+foldersWriteFirst;<Request ID="338" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2_1.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="339" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="340" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="341" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="342" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_1.CNF" Destination="foldersWithNodeByteStringId_2.folderTest2SameFolder1ByteString.REQ" /></Request>
+foldersWriteFirst;<Request ID="343" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_2.CNF" Destination="foldersWithNodeByteStringId_2.folderTest2SameFolder2ByteString.REQ" /></Request>
+foldersWriteFirst;<Request ID="344" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.folderTest2SameFolder1ByteString.CNF" Destination="foldersWithNodeByteStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="345" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="346" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="347" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="348" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_1_1.CNF" Destination="foldersWithNodeByteStringId_2.folderTest2DifferentFolder1ByteString.REQ" /></Request>
+foldersWriteFirst;<Request ID="349" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_2_1.CNF" Destination="foldersWithNodeByteStringId_2.folderTest2DifferentFolder2ByteString.REQ" /></Request>
+foldersWriteFirst;<Request ID="350" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.INITO" Destination="F_BOOL_TO_UINT_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="351" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.PUBLISH_1.INITO" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="352" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.folderTest2DifferentFolder1ByteString.CNF" Destination="foldersWithNodeByteStringId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="353" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.SD_1" /></Request>
+foldersWriteFirst;<Request ID="354" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="355" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2.OUT" Destination="foldersWithNodeByteStringId_2.folderTestDirectUnderByteString.check" /></Request>
+foldersWriteFirst;<Request ID="356" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.SD_2" /></Request>
+foldersWriteFirst;<Request ID="357" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.E_CTU.Q" Destination="foldersWithNodeByteStringId_2.E_PERMIT.PERMIT" /></Request>
+foldersWriteFirst;<Request ID="358" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="359" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.SD_2" /></Request>
+foldersWriteFirst;<Request ID="360" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_2.OUT" Destination="foldersWithNodeByteStringId_2.PUBLISH_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="361" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="362" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="363" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_3.IN" /></Request>
+foldersWriteFirst;<Request ID="364" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="365" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="366" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_5_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="367" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_1_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="368" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ__1_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="369" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="370" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_5_1_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="371" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="372" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ__1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="373" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_EQ_2_1_1.OUT" Destination="foldersWithNodeByteStringId_2.F_OR_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="374" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="375" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ__1.IN1" /></Request>
+foldersWriteFirst;<Request ID="376" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="377" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="378" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_1.OUT" Destination="foldersWithNodeByteStringId_2.folderTest2SameFolder1ByteString.check" /></Request>
+foldersWriteFirst;<Request ID="379" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_2.OUT" Destination="foldersWithNodeByteStringId_2.folderTest2SameFolder2ByteString.check" /></Request>
+foldersWriteFirst;<Request ID="380" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="381" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ__1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="382" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_2_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="383" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeByteStringId_2.F_EQ_5_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="384" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_2_1.OUT" Destination="foldersWithNodeByteStringId_2.folderTest2DifferentFolder2ByteString.check" /></Request>
+foldersWriteFirst;<Request ID="385" Action="CREATE"><Connection Source="foldersWithNodeByteStringId_2.F_OR_1_1.OUT" Destination="foldersWithNodeByteStringId_2.folderTest2DifferentFolder1ByteString.check" /></Request>
+foldersWriteFirst;<Request ID="386" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_2.CNF" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="387" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_2.CNF" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="388" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_3.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="389" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2.CNF" Destination="foldersWithNodeNumericId_2.folderTestDirectUnderNumeric.REQ" /></Request>
+foldersWriteFirst;<Request ID="390" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.PUBLISH_2_1.INITO" Destination="foldersWithNodeNumericId_2.PUBLISH_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="391" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.PUBLISH_2_1.CNF" Destination="foldersWithNodeNumericId_2.PUBLISH_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="392" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.PUBLISH_2.INITO" Destination="foldersWithNodeNumericId_2.PUBLISH_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="393" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.PUBLISH_2.CNF" Destination="foldersWithNodeNumericId_2.PUBLISH_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="394" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.E_CTU.CUO" Destination="foldersWithNodeNumericId_2.E_PERMIT.EI" /></Request>
+foldersWriteFirst;<Request ID="395" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_1.CNF" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="396" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_2.CNF" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="397" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_2.CNF" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="398" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="399" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.INITO" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="400" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.IND" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="401" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.INITO" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="402" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="403" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.folderTestDirectUnderNumeric.CNF" Destination="foldersWithNodeNumericId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="404" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.folderTest2SameFolder2Numeric.CNF" Destination="foldersWithNodeNumericId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="405" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.folderTest2DifferentFolder2Numeric.CNF" Destination="foldersWithNodeNumericId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="406" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.E_PERMIT.EO" Destination="foldersWithNodeStringId_2.BOOL2BOOL_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="407" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_5_1.CNF" Destination="foldersWithNodeNumericId_2.F_OR_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="408" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2_1.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_5_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="409" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_5_1_1.CNF" Destination="foldersWithNodeNumericId_2.F_OR_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="410" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ__1_1.CNF" Destination="foldersWithNodeNumericId_2.F_OR_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="411" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_1_1.CNF" Destination="foldersWithNodeNumericId_2.F_EQ__1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="412" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ__1.CNF" Destination="foldersWithNodeNumericId_2.F_OR_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="413" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2_1_1.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_5_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="414" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_1.CNF" Destination="foldersWithNodeNumericId_2.F_EQ__1.REQ" /></Request>
+foldersWriteFirst;<Request ID="415" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_3.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="416" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.IND" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3.REQ" /></Request>
+foldersWriteFirst;<Request ID="417" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="418" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.folderTest2SameFolder1Numeric.CNF" Destination="foldersWithNodeNumericId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="419" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_1.CNF" Destination="foldersWithNodeNumericId_2.folderTest2SameFolder1Numeric.REQ" /></Request>
+foldersWriteFirst;<Request ID="420" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_2.CNF" Destination="foldersWithNodeNumericId_2.folderTest2SameFolder2Numeric.REQ" /></Request>
+foldersWriteFirst;<Request ID="421" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.folderTest2DifferentFolder1Numeric.CNF" Destination="foldersWithNodeNumericId_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="422" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="423" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.IND" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="424" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2.CNF" Destination="foldersWithNodeNumericId_2.F_EQ_2_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="425" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_2_1.CNF" Destination="foldersWithNodeNumericId_2.folderTest2DifferentFolder2Numeric.REQ" /></Request>
+foldersWriteFirst;<Request ID="426" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_1_1.CNF" Destination="foldersWithNodeNumericId_2.folderTest2DifferentFolder1Numeric.REQ" /></Request>
+foldersWriteFirst;<Request ID="427" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.INITO" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="428" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.PUBLISH_1.INITO" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="429" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_2.OUT" Destination="foldersWithNodeNumericId_2.PUBLISH_2.SD_1" /></Request>
+foldersWriteFirst;<Request ID="430" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="431" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2.OUT" Destination="foldersWithNodeNumericId_2.folderTestDirectUnderNumeric.check" /></Request>
+foldersWriteFirst;<Request ID="432" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_2.OUT" Destination="foldersWithNodeNumericId_2.PUBLISH_2.SD_2" /></Request>
+foldersWriteFirst;<Request ID="433" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.E_CTU.Q" Destination="foldersWithNodeNumericId_2.E_PERMIT.PERMIT" /></Request>
+foldersWriteFirst;<Request ID="434" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_2.OUT" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="435" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_1.OUT" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.SD_2" /></Request>
+foldersWriteFirst;<Request ID="436" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_2.OUT" Destination="foldersWithNodeNumericId_2.PUBLISH_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="437" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.RD_1" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="438" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.RD_2" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="439" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.RD_1" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_3.IN" /></Request>
+foldersWriteFirst;<Request ID="440" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.RD_2" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2.IN" /></Request>
+foldersWriteFirst;<Request ID="441" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.RD_1" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_1_3.IN" /></Request>
+foldersWriteFirst;<Request ID="442" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ__1_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="443" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_1_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="444" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="445" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_5_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="446" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="447" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_2_1_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="448" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ_5_1_1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="449" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_EQ__1.OUT" Destination="foldersWithNodeNumericId_2.F_OR_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="450" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="451" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ__1.IN1" /></Request>
+foldersWriteFirst;<Request ID="452" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="453" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_5_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="454" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_1.OUT" Destination="foldersWithNodeNumericId_2.folderTest2SameFolder1Numeric.check" /></Request>
+foldersWriteFirst;<Request ID="455" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_2.OUT" Destination="foldersWithNodeNumericId_2.folderTest2SameFolder2Numeric.check" /></Request>
+foldersWriteFirst;<Request ID="456" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="457" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_3.OUT" Destination="foldersWithNodeNumericId_2.F_EQ__1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="458" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_5_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="459" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.BOOL2BOOL_1_1_1_1_2.OUT" Destination="foldersWithNodeNumericId_2.F_EQ_2_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="460" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_2_1.OUT" Destination="foldersWithNodeNumericId_2.folderTest2DifferentFolder2Numeric.check" /></Request>
+foldersWriteFirst;<Request ID="461" Action="CREATE"><Connection Source="foldersWithNodeNumericId_2.F_OR_1_1.OUT" Destination="foldersWithNodeNumericId_2.folderTest2DifferentFolder1Numeric.check" /></Request>
+foldersWriteFirst;<Request ID="462" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2.IND" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="463" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ.CNF" Destination="FoldersNoBrowseName_2.folderTestDirectUnderNoID.REQ" /></Request>
+foldersWriteFirst;<Request ID="464" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.folderTestDirectUnderNoID.CNF" Destination="FoldersNoBrowseName_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="465" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2_1.IND" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="466" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_2.CNF" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="467" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_1.IND" Destination="FoldersNoBrowseName_2.BOOL2BOOL.REQ" /></Request>
+foldersWriteFirst;<Request ID="468" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_2.CNF" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="469" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.PUBLISH_2_1.INITO" Destination="FoldersNoBrowseName_2.PUBLISH_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="470" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.PUBLISH_2_1.CNF" Destination="FoldersNoBrowseName_2.PUBLISH_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="471" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL.CNF" Destination="FoldersNoBrowseName_2.F_EQ.REQ" /></Request>
+foldersWriteFirst;<Request ID="472" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_2.CNF" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="473" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.E_CTU.CUO" Destination="FoldersNoBrowseName_2.E_PERMIT.EI" /></Request>
+foldersWriteFirst;<Request ID="474" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_2.CNF" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="475" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.folderTest2DifferentFolder2NoID.CNF" Destination="FoldersNoBrowseName_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="476" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.PUBLISH_2.INITO" Destination="FoldersNoBrowseName_2.PUBLISH_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="477" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.PUBLISH_2.CNF" Destination="FoldersNoBrowseName_2.PUBLISH_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="478" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.folderTest2SameFolder2NoID.CNF" Destination="FoldersNoBrowseName_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="479" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.E_PERMIT.EO" Destination="foldersWithNodeNumericId_2.BOOL2BOOL_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="480" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1_1.CNF" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="481" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_1.INITO" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2.INIT" /></Request>
+foldersWriteFirst;<Request ID="482" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2.INITO" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="483" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_5_1.CNF" Destination="FoldersNoBrowseName_2.F_OR_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="484" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_2_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_5_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="485" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_5_1_1.CNF" Destination="FoldersNoBrowseName_2.F_OR_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="486" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ__1_1.CNF" Destination="FoldersNoBrowseName_2.F_OR_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="487" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_1_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ__1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="488" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ__1.CNF" Destination="FoldersNoBrowseName_2.F_OR_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="489" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_2_1_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_5_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="490" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ__1.REQ" /></Request>
+foldersWriteFirst;<Request ID="491" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2.IND" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="492" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="493" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_2_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="494" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_1.CNF" Destination="FoldersNoBrowseName_2.folderTest2SameFolder1NoID.REQ" /></Request>
+foldersWriteFirst;<Request ID="495" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_2.CNF" Destination="FoldersNoBrowseName_2.folderTest2SameFolder2NoID.REQ" /></Request>
+foldersWriteFirst;<Request ID="496" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.folderTest2SameFolder1NoID.CNF" Destination="FoldersNoBrowseName_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="497" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.folderTest2DifferentFolder1NoID.CNF" Destination="FoldersNoBrowseName_2.E_CTU.CU" /></Request>
+foldersWriteFirst;<Request ID="498" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_1_1.CNF" Destination="FoldersNoBrowseName_2.folderTest2DifferentFolder1NoID.REQ" /></Request>
+foldersWriteFirst;<Request ID="499" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_2_1.CNF" Destination="FoldersNoBrowseName_2.folderTest2DifferentFolder2NoID.REQ" /></Request>
+foldersWriteFirst;<Request ID="500" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="501" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2_1.IND" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="502" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1.CNF" Destination="FoldersNoBrowseName_2.F_EQ_2_1_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="503" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2_1.INITO" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="504" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.PUBLISH_1.INITO" Destination="FoldersNoBrowseName_2.SUBSCRIBE_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="505" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2.RD_2" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="506" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2.RD_1" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1.IN" /></Request>
+foldersWriteFirst;<Request ID="507" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ.OUT" Destination="FoldersNoBrowseName_2.folderTestDirectUnderNoID.check" /></Request>
+foldersWriteFirst;<Request ID="508" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2_1.RD_1" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="509" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1_1.OUT" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.SD_2" /></Request>
+foldersWriteFirst;<Request ID="510" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_2_1.RD_2" Destination="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1.IN" /></Request>
+foldersWriteFirst;<Request ID="511" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.SUBSCRIBE_1.RD_1" Destination="FoldersNoBrowseName_2.BOOL2BOOL.IN" /></Request>
+foldersWriteFirst;<Request ID="512" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_2.OUT" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="513" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL.OUT" Destination="FoldersNoBrowseName_2.F_EQ.IN1" /></Request>
+foldersWriteFirst;<Request ID="514" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_2.OUT" Destination="FoldersNoBrowseName_2.PUBLISH_2.SD_2" /></Request>
+foldersWriteFirst;<Request ID="515" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.E_CTU.Q" Destination="FoldersNoBrowseName_2.E_PERMIT.PERMIT" /></Request>
+foldersWriteFirst;<Request ID="516" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_2.OUT" Destination="FoldersNoBrowseName_2.PUBLISH_2.SD_1" /></Request>
+foldersWriteFirst;<Request ID="517" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_2.OUT" Destination="FoldersNoBrowseName_2.PUBLISH_1.SD_1" /></Request>
+foldersWriteFirst;<Request ID="518" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ__1_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_1_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="519" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_1_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="520" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_2_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_2.IN1" /></Request>
+foldersWriteFirst;<Request ID="521" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_5_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_2.IN2" /></Request>
+foldersWriteFirst;<Request ID="522" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="523" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_2_1_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="524" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ_5_1_1.OUT" Destination="FoldersNoBrowseName_2.F_OR_2_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="525" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_EQ__1.OUT" Destination="FoldersNoBrowseName_2.F_OR_1.IN2" /></Request>
+foldersWriteFirst;<Request ID="526" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="527" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ__1.IN1" /></Request>
+foldersWriteFirst;<Request ID="528" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_2_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="529" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_5_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="530" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_1.OUT" Destination="FoldersNoBrowseName_2.folderTest2SameFolder1NoID.check" /></Request>
+foldersWriteFirst;<Request ID="531" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_2.OUT" Destination="FoldersNoBrowseName_2.folderTest2SameFolder2NoID.check" /></Request>
+foldersWriteFirst;<Request ID="532" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_1_1.OUT" Destination="FoldersNoBrowseName_2.folderTest2DifferentFolder1NoID.check" /></Request>
+foldersWriteFirst;<Request ID="533" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.F_OR_2_1.OUT" Destination="FoldersNoBrowseName_2.folderTest2DifferentFolder2NoID.check" /></Request>
+foldersWriteFirst;<Request ID="534" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="535" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ__1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="536" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_2_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="537" Action="CREATE"><Connection Source="FoldersNoBrowseName_2.BOOL2BOOL_1_1_1_1.OUT" Destination="FoldersNoBrowseName_2.F_EQ_5_1_1.IN1" /></Request>
+foldersWriteFirst;<Request ID="538" Action="CREATE"><Connection Source="F_BOOL_TO_UINT_1.CNF" Destination="E_DEMUX_2_1.EI" /></Request>
+foldersWriteFirst;<Request ID="539" Action="CREATE"><Connection Source="E_DEMUX_2_1.EO1" Destination="STEST_END_1.REQ" /></Request>
+foldersWriteFirst;<Request ID="540" Action="CREATE"><Connection Source="START.COLD" Destination="E_SR_1.S" /></Request>
+foldersWriteFirst;<Request ID="541" Action="CREATE"><Connection Source="START.WARM" Destination="E_SR_1.S" /></Request>
+foldersWriteFirst;<Request ID="542" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.INIT" /></Request>
+foldersWriteFirst;<Request ID="543" Action="CREATE"><Connection Source="E_DEMUX_2_1.EO2" Destination="FoldersNoBrowseName_2.BOOL2BOOL_2.REQ" /></Request>
+foldersWriteFirst;<Request ID="544" Action="CREATE"><Connection Source="F_BOOL_TO_UINT_1.OUT" Destination="E_DEMUX_2_1.K" /></Request>
+foldersWriteFirst;<Request ID="545" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="F_BOOL_TO_UINT_1.IN" /></Request>
+foldersWriteFirst;<Request ID="546" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.SUBSCRIBE_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="547" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_2.QI" /></Request>
+foldersWriteFirst;<Request ID="548" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="549" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.PUBLISH_1.QI" /></Request>
+foldersWriteFirst;<Request ID="550" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.PUBLISH_2.QI" /></Request>
+foldersWriteFirst;<Request ID="551" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeStringId_2.PUBLISH_2_1.QI" /></Request>
+foldersWriteFirst;<Request ID="552" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="553" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_2.QI" /></Request>
+foldersWriteFirst;<Request ID="554" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="555" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.PUBLISH_1.QI" /></Request>
+foldersWriteFirst;<Request ID="556" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.PUBLISH_2.QI" /></Request>
+foldersWriteFirst;<Request ID="557" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeByteStringId_2.PUBLISH_2_1.QI" /></Request>
+foldersWriteFirst;<Request ID="558" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="559" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_2.QI" /></Request>
+foldersWriteFirst;<Request ID="560" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.SUBSCRIBE_2_1_1.QI" /></Request>
+foldersWriteFirst;<Request ID="561" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.PUBLISH_1.QI" /></Request>
+foldersWriteFirst;<Request ID="562" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.PUBLISH_2.QI" /></Request>
+foldersWriteFirst;<Request ID="563" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="foldersWithNodeNumericId_2.PUBLISH_2_1.QI" /></Request>
+foldersWriteFirst;<Request ID="564" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2.QI" /></Request>
+foldersWriteFirst;<Request ID="565" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.SUBSCRIBE_2_1.QI" /></Request>
+foldersWriteFirst;<Request ID="566" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.SUBSCRIBE_1.QI" /></Request>
+foldersWriteFirst;<Request ID="567" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.PUBLISH_2_1.QI" /></Request>
+foldersWriteFirst;<Request ID="568" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.PUBLISH_1.QI" /></Request>
+foldersWriteFirst;<Request ID="569" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="FoldersNoBrowseName_2.PUBLISH_2.QI" /></Request>
+foldersWriteFirst;<Request ID="570" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/localMethodsCreate.fboot b/systemtests/src/modules/opc_ua/localMethodsCreate.fboot
new file mode 100644
index 0000000..e171637
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/localMethodsCreate.fboot
@@ -0,0 +1,217 @@
+;<Request ID="1" Action="CREATE"><FB Name="createLocalMethods" Type="EMB_RES" /></Request>
+createLocalMethods;<Request ID="2" Action="CREATE"><FB Name="F_BOOL_TO_UINT_2" Type="F_BOOL_TO_UINT" /></Request>
+createLocalMethods;<Request ID="3" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="4" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="5" Action="CREATE"><FB Name="MethodOnlyBrowseName.SERVER_0" Type="SERVER_0" /></Request>
+createLocalMethods;<Request ID="6" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="MethodOnlyBrowseName.SERVER_0.ID" /></Request>
+createLocalMethods;<Request ID="7" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="8" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="9" Action="CREATE"><FB Name="MethodOnlyBrowseName.SERVER_0_3" Type="SERVER_0_3" /></Request>
+createLocalMethods;<Request ID="10" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="MethodOnlyBrowseName.SERVER_0_3.ID" /></Request>
+createLocalMethods;<Request ID="11" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="12" Action="CREATE"><FB Name="MethodOnlyBrowseName.SERVER_2_3" Type="SERVER_2_3" /></Request>
+createLocalMethods;<Request ID="13" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="MethodOnlyBrowseName.SERVER_2_3.ID" /></Request>
+createLocalMethods;<Request ID="14" Action="CREATE"><FB Name="MethodOnlyBrowseName.onlyBrowseNameMethod_2_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="15" Action="CREATE"><FB Name="MethodOnlyBrowseName.onlyBrowseNameMethod_0_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="16" Action="CREATE"><FB Name="MethodOnlyBrowseName.SERVER_1_0" Type="SERVER_1_0" /></Request>
+createLocalMethods;<Request ID="17" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="MethodOnlyBrowseName.SERVER_1_0.ID" /></Request>
+createLocalMethods;<Request ID="18" Action="CREATE"><FB Name="MethodOnlyBrowseName.onlyBrowseNameMethod0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="19" Action="CREATE"><FB Name="MethodOnlyBrowseName.onlyBrowseNameMethod_1_0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="20" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="21" Action="CREATE"><FB Name="MethodOnlyBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="22" Action="CREATE"><FB Name="MethodOnlyBrowseName.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+createLocalMethods;<Request ID="23" Action="CREATE"><FB Name="MethodOnlyBrowseName.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+createLocalMethods;<Request ID="24" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="25" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="26" Action="CREATE"><FB Name="MethodBytestringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+createLocalMethods;<Request ID="27" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=byteStringNodeId1]" Destination="MethodBytestringNodeId.SERVER_0.ID" /></Request>
+createLocalMethods;<Request ID="28" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="29" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="30" Action="CREATE"><FB Name="MethodBytestringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+createLocalMethods;<Request ID="31" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=byteStringNodeId3]" Destination="MethodBytestringNodeId.SERVER_0_3.ID" /></Request>
+createLocalMethods;<Request ID="32" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="33" Action="CREATE"><FB Name="MethodBytestringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+createLocalMethods;<Request ID="34" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=byteStringNodeId4]" Destination="MethodBytestringNodeId.SERVER_2_3.ID" /></Request>
+createLocalMethods;<Request ID="35" Action="CREATE"><FB Name="MethodBytestringNodeId.byteStringNodeidMethod_2_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="36" Action="CREATE"><FB Name="MethodBytestringNodeId.byteStringNodeidMethod_0_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="37" Action="CREATE"><FB Name="MethodBytestringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+createLocalMethods;<Request ID="38" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=byteStringNodeId2]" Destination="MethodBytestringNodeId.SERVER_1_0.ID" /></Request>
+createLocalMethods;<Request ID="39" Action="CREATE"><FB Name="MethodBytestringNodeId.byteStringNodeidMethod0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="40" Action="CREATE"><FB Name="MethodBytestringNodeId.byteStringNodeidMethod_1_0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="41" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="42" Action="CREATE"><FB Name="MethodBytestringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="43" Action="CREATE"><FB Name="MethodBytestringNodeId.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+createLocalMethods;<Request ID="44" Action="CREATE"><FB Name="MethodBytestringNodeId.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+createLocalMethods;<Request ID="45" Action="CREATE"><FB Name="E_DEMUX_2_2" Type="E_DEMUX_2" /></Request>
+createLocalMethods;<Request ID="46" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+createLocalMethods;<Request ID="47" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="48" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="49" Action="CREATE"><FB Name="MethodNumericNodeId.SERVER_0" Type="SERVER_0" /></Request>
+createLocalMethods;<Request ID="50" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=12345]" Destination="MethodNumericNodeId.SERVER_0.ID" /></Request>
+createLocalMethods;<Request ID="51" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="52" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="53" Action="CREATE"><FB Name="MethodNumericNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+createLocalMethods;<Request ID="54" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=12347]" Destination="MethodNumericNodeId.SERVER_0_3.ID" /></Request>
+createLocalMethods;<Request ID="55" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="56" Action="CREATE"><FB Name="MethodNumericNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+createLocalMethods;<Request ID="57" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=12348]" Destination="MethodNumericNodeId.SERVER_2_3.ID" /></Request>
+createLocalMethods;<Request ID="58" Action="CREATE"><FB Name="MethodNumericNodeId.numericNodeIdMethod_2_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="59" Action="CREATE"><FB Name="MethodNumericNodeId.numericNodeIdMethod_0_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="60" Action="CREATE"><FB Name="MethodNumericNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+createLocalMethods;<Request ID="61" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=12346]" Destination="MethodNumericNodeId.SERVER_1_0.ID" /></Request>
+createLocalMethods;<Request ID="62" Action="CREATE"><FB Name="MethodNumericNodeId.numericNodeIdMethod0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="63" Action="CREATE"><FB Name="MethodNumericNodeId.numericNodeIdMethod_1_0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="64" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="65" Action="CREATE"><FB Name="MethodNumericNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="66" Action="CREATE"><FB Name="MethodNumericNodeId.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+createLocalMethods;<Request ID="67" Action="CREATE"><FB Name="MethodNumericNodeId.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+createLocalMethods;<Request ID="68" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="69" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="70" Action="CREATE"><FB Name="MethodStringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+createLocalMethods;<Request ID="71" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=hello]" Destination="MethodStringNodeId.SERVER_0.ID" /></Request>
+createLocalMethods;<Request ID="72" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="73" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="74" Action="CREATE"><FB Name="MethodStringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+createLocalMethods;<Request ID="75" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=hello2]" Destination="MethodStringNodeId.SERVER_0_3.ID" /></Request>
+createLocalMethods;<Request ID="76" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="77" Action="CREATE"><FB Name="MethodStringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+createLocalMethods;<Request ID="78" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=hello3]" Destination="MethodStringNodeId.SERVER_2_3.ID" /></Request>
+createLocalMethods;<Request ID="79" Action="CREATE"><FB Name="MethodStringNodeId.stringNodeIdMethod_2_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="80" Action="CREATE"><FB Name="MethodStringNodeId.stringNodeIdMethod_0_3" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="81" Action="CREATE"><FB Name="MethodStringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+createLocalMethods;<Request ID="82" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=hello1]" Destination="MethodStringNodeId.SERVER_1_0.ID" /></Request>
+createLocalMethods;<Request ID="83" Action="CREATE"><FB Name="MethodStringNodeId.stringNodeIdMethod0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="84" Action="CREATE"><FB Name="MethodStringNodeId.stringNodeIdMethod_1_0" Type="TEST_CONDITION" /></Request>
+createLocalMethods;<Request ID="85" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="86" Action="CREATE"><FB Name="MethodStringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+createLocalMethods;<Request ID="87" Action="CREATE"><FB Name="MethodStringNodeId.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+createLocalMethods;<Request ID="88" Action="CREATE"><FB Name="MethodStringNodeId.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+createLocalMethods;<Request ID="89" Action="CREATE"><FB Name="STEST_END_2" Type="STEST_END" /></Request>
+createLocalMethods;<Request ID="90" Action="CREATE"><Connection Source="MethodOnlyBrowseName.F_BOOL_TO_UINT.CNF" Destination="MethodOnlyBrowseName.E_DEMUX_2.EI" /></Request>
+createLocalMethods;<Request ID="91" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_2_3.INITO" Destination="MethodOnlyBrowseName.F_BOOL_TO_UINT.REQ" /></Request>
+createLocalMethods;<Request ID="92" Action="CREATE"><Connection Source="MethodOnlyBrowseName.E_DEMUX_2.EO2" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_2_3.REQ" /></Request>
+createLocalMethods;<Request ID="93" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0.INITO" Destination="MethodOnlyBrowseName.SERVER_1_0.INIT" /></Request>
+createLocalMethods;<Request ID="94" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_1_0.INITO" Destination="MethodOnlyBrowseName.SERVER_0_3.INIT" /></Request>
+createLocalMethods;<Request ID="95" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0_3.INITO" Destination="MethodOnlyBrowseName.SERVER_2_3.INIT" /></Request>
+createLocalMethods;<Request ID="96" Action="CREATE"><Connection Source="MethodOnlyBrowseName.onlyBrowseNameMethod_2_3.CNF" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_0_3.REQ" /></Request>
+createLocalMethods;<Request ID="97" Action="CREATE"><Connection Source="MethodOnlyBrowseName.onlyBrowseNameMethod_0_3.CNF" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_1_0.REQ" /></Request>
+createLocalMethods;<Request ID="98" Action="CREATE"><Connection Source="MethodOnlyBrowseName.onlyBrowseNameMethod_1_0.CNF" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod0.REQ" /></Request>
+createLocalMethods;<Request ID="99" Action="CREATE"><Connection Source="MethodOnlyBrowseName.onlyBrowseNameMethod0.CNF" Destination="MethodNumericNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="100" Action="CREATE"><Connection Source="MethodOnlyBrowseName.E_DEMUX_2.EO1" Destination="MethodNumericNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="101" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_2_3.RD_2" Destination="MethodOnlyBrowseName.DINT2DINT_1_1_1.IN" /></Request>
+createLocalMethods;<Request ID="102" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_2_3.RD_1" Destination="MethodOnlyBrowseName.DINT2DINT_1_2.IN" /></Request>
+createLocalMethods;<Request ID="103" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0.QO" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod0.check" /></Request>
+createLocalMethods;<Request ID="104" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0_3.RD_3" Destination="MethodOnlyBrowseName.DINT2DINT_1_3.IN" /></Request>
+createLocalMethods;<Request ID="105" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0_3.RD_2" Destination="MethodOnlyBrowseName.DINT2DINT_1_1.IN" /></Request>
+createLocalMethods;<Request ID="106" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0_3.QO" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_0_3.check" /></Request>
+createLocalMethods;<Request ID="107" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_0_3.RD_1" Destination="MethodOnlyBrowseName.DINT2DINT_1.IN" /></Request>
+createLocalMethods;<Request ID="108" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_2_3.RD_3" Destination="MethodOnlyBrowseName.DINT2DINT_1_3_1.IN" /></Request>
+createLocalMethods;<Request ID="109" Action="CREATE"><Connection Source="MethodOnlyBrowseName.DINT2DINT.OUT" Destination="MethodOnlyBrowseName.SERVER_2_3.SD_1" /></Request>
+createLocalMethods;<Request ID="110" Action="CREATE"><Connection Source="MethodOnlyBrowseName.DINT2DINT.OUT" Destination="MethodOnlyBrowseName.SERVER_2_3.SD_2" /></Request>
+createLocalMethods;<Request ID="111" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_2_3.QO" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_2_3.check" /></Request>
+createLocalMethods;<Request ID="112" Action="CREATE"><Connection Source="MethodOnlyBrowseName.DINT2DINT.OUT" Destination="MethodOnlyBrowseName.SERVER_1_0.SD_1" /></Request>
+createLocalMethods;<Request ID="113" Action="CREATE"><Connection Source="MethodOnlyBrowseName.SERVER_1_0.QO" Destination="MethodOnlyBrowseName.onlyBrowseNameMethod_1_0.check" /></Request>
+createLocalMethods;<Request ID="114" Action="CREATE"><Connection Source="MethodOnlyBrowseName.F_BOOL_TO_UINT.OUT" Destination="MethodOnlyBrowseName.E_DEMUX_2.K" /></Request>
+createLocalMethods;<Request ID="115" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0.INITO" Destination="MethodBytestringNodeId.SERVER_1_0.INIT" /></Request>
+createLocalMethods;<Request ID="116" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_1_0.INITO" Destination="MethodBytestringNodeId.SERVER_0_3.INIT" /></Request>
+createLocalMethods;<Request ID="117" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0_3.INITO" Destination="MethodBytestringNodeId.SERVER_2_3.INIT" /></Request>
+createLocalMethods;<Request ID="118" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_2_3.INITO" Destination="MethodBytestringNodeId.F_BOOL_TO_UINT.REQ" /></Request>
+createLocalMethods;<Request ID="119" Action="CREATE"><Connection Source="MethodBytestringNodeId.F_BOOL_TO_UINT.CNF" Destination="MethodBytestringNodeId.E_DEMUX_2.EI" /></Request>
+createLocalMethods;<Request ID="120" Action="CREATE"><Connection Source="MethodBytestringNodeId.E_DEMUX_2.EO1" Destination="F_BOOL_TO_UINT_2.REQ" /></Request>
+createLocalMethods;<Request ID="121" Action="CREATE"><Connection Source="MethodBytestringNodeId.E_DEMUX_2.EO2" Destination="MethodBytestringNodeId.byteStringNodeidMethod_2_3.REQ" /></Request>
+createLocalMethods;<Request ID="122" Action="CREATE"><Connection Source="MethodBytestringNodeId.byteStringNodeidMethod_2_3.CNF" Destination="MethodBytestringNodeId.byteStringNodeidMethod_0_3.REQ" /></Request>
+createLocalMethods;<Request ID="123" Action="CREATE"><Connection Source="MethodBytestringNodeId.byteStringNodeidMethod_0_3.CNF" Destination="MethodBytestringNodeId.byteStringNodeidMethod_1_0.REQ" /></Request>
+createLocalMethods;<Request ID="124" Action="CREATE"><Connection Source="MethodBytestringNodeId.byteStringNodeidMethod_1_0.CNF" Destination="MethodBytestringNodeId.byteStringNodeidMethod0.REQ" /></Request>
+createLocalMethods;<Request ID="125" Action="CREATE"><Connection Source="MethodBytestringNodeId.byteStringNodeidMethod0.CNF" Destination="F_BOOL_TO_UINT_2.REQ" /></Request>
+createLocalMethods;<Request ID="126" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_2_3.RD_2" Destination="MethodBytestringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+createLocalMethods;<Request ID="127" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_2_3.RD_1" Destination="MethodBytestringNodeId.DINT2DINT_1_2.IN" /></Request>
+createLocalMethods;<Request ID="128" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0.QO" Destination="MethodBytestringNodeId.byteStringNodeidMethod0.check" /></Request>
+createLocalMethods;<Request ID="129" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0_3.RD_3" Destination="MethodBytestringNodeId.DINT2DINT_1_3.IN" /></Request>
+createLocalMethods;<Request ID="130" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0_3.RD_2" Destination="MethodBytestringNodeId.DINT2DINT_1_1.IN" /></Request>
+createLocalMethods;<Request ID="131" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0_3.QO" Destination="MethodBytestringNodeId.byteStringNodeidMethod_0_3.check" /></Request>
+createLocalMethods;<Request ID="132" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_0_3.RD_1" Destination="MethodBytestringNodeId.DINT2DINT_1.IN" /></Request>
+createLocalMethods;<Request ID="133" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_2_3.RD_3" Destination="MethodBytestringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+createLocalMethods;<Request ID="134" Action="CREATE"><Connection Source="MethodBytestringNodeId.DINT2DINT.OUT" Destination="MethodBytestringNodeId.SERVER_2_3.SD_1" /></Request>
+createLocalMethods;<Request ID="135" Action="CREATE"><Connection Source="MethodBytestringNodeId.DINT2DINT.OUT" Destination="MethodBytestringNodeId.SERVER_2_3.SD_2" /></Request>
+createLocalMethods;<Request ID="136" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_2_3.QO" Destination="MethodBytestringNodeId.byteStringNodeidMethod_2_3.check" /></Request>
+createLocalMethods;<Request ID="137" Action="CREATE"><Connection Source="MethodBytestringNodeId.DINT2DINT.OUT" Destination="MethodBytestringNodeId.SERVER_1_0.SD_1" /></Request>
+createLocalMethods;<Request ID="138" Action="CREATE"><Connection Source="MethodBytestringNodeId.SERVER_1_0.QO" Destination="MethodBytestringNodeId.byteStringNodeidMethod_1_0.check" /></Request>
+createLocalMethods;<Request ID="139" Action="CREATE"><Connection Source="MethodBytestringNodeId.F_BOOL_TO_UINT.OUT" Destination="MethodBytestringNodeId.E_DEMUX_2.K" /></Request>
+createLocalMethods;<Request ID="140" Action="CREATE"><Connection Source="MethodNumericNodeId.F_BOOL_TO_UINT.CNF" Destination="MethodNumericNodeId.E_DEMUX_2.EI" /></Request>
+createLocalMethods;<Request ID="141" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_2_3.INITO" Destination="MethodNumericNodeId.F_BOOL_TO_UINT.REQ" /></Request>
+createLocalMethods;<Request ID="142" Action="CREATE"><Connection Source="MethodNumericNodeId.E_DEMUX_2.EO2" Destination="MethodNumericNodeId.numericNodeIdMethod_2_3.REQ" /></Request>
+createLocalMethods;<Request ID="143" Action="CREATE"><Connection Source="MethodNumericNodeId.E_DEMUX_2.EO1" Destination="MethodStringNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="144" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0_3.INITO" Destination="MethodNumericNodeId.SERVER_2_3.INIT" /></Request>
+createLocalMethods;<Request ID="145" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0.INITO" Destination="MethodNumericNodeId.SERVER_1_0.INIT" /></Request>
+createLocalMethods;<Request ID="146" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_1_0.INITO" Destination="MethodNumericNodeId.SERVER_0_3.INIT" /></Request>
+createLocalMethods;<Request ID="147" Action="CREATE"><Connection Source="MethodNumericNodeId.numericNodeIdMethod_0_3.CNF" Destination="MethodNumericNodeId.numericNodeIdMethod_1_0.REQ" /></Request>
+createLocalMethods;<Request ID="148" Action="CREATE"><Connection Source="MethodNumericNodeId.numericNodeIdMethod0.CNF" Destination="MethodStringNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="149" Action="CREATE"><Connection Source="MethodNumericNodeId.numericNodeIdMethod_1_0.CNF" Destination="MethodNumericNodeId.numericNodeIdMethod0.REQ" /></Request>
+createLocalMethods;<Request ID="150" Action="CREATE"><Connection Source="MethodNumericNodeId.numericNodeIdMethod_2_3.CNF" Destination="MethodNumericNodeId.numericNodeIdMethod_0_3.REQ" /></Request>
+createLocalMethods;<Request ID="151" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_2_3.RD_2" Destination="MethodNumericNodeId.DINT2DINT_1_1_1.IN" /></Request>
+createLocalMethods;<Request ID="152" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_2_3.RD_1" Destination="MethodNumericNodeId.DINT2DINT_1_2.IN" /></Request>
+createLocalMethods;<Request ID="153" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0.QO" Destination="MethodNumericNodeId.numericNodeIdMethod0.check" /></Request>
+createLocalMethods;<Request ID="154" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0_3.RD_3" Destination="MethodNumericNodeId.DINT2DINT_1_3.IN" /></Request>
+createLocalMethods;<Request ID="155" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0_3.RD_2" Destination="MethodNumericNodeId.DINT2DINT_1_1.IN" /></Request>
+createLocalMethods;<Request ID="156" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0_3.QO" Destination="MethodNumericNodeId.numericNodeIdMethod_0_3.check" /></Request>
+createLocalMethods;<Request ID="157" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_0_3.RD_1" Destination="MethodNumericNodeId.DINT2DINT_1.IN" /></Request>
+createLocalMethods;<Request ID="158" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_2_3.RD_3" Destination="MethodNumericNodeId.DINT2DINT_1_3_1.IN" /></Request>
+createLocalMethods;<Request ID="159" Action="CREATE"><Connection Source="MethodNumericNodeId.DINT2DINT.OUT" Destination="MethodNumericNodeId.SERVER_2_3.SD_1" /></Request>
+createLocalMethods;<Request ID="160" Action="CREATE"><Connection Source="MethodNumericNodeId.DINT2DINT.OUT" Destination="MethodNumericNodeId.SERVER_2_3.SD_2" /></Request>
+createLocalMethods;<Request ID="161" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_2_3.QO" Destination="MethodNumericNodeId.numericNodeIdMethod_2_3.check" /></Request>
+createLocalMethods;<Request ID="162" Action="CREATE"><Connection Source="MethodNumericNodeId.DINT2DINT.OUT" Destination="MethodNumericNodeId.SERVER_1_0.SD_1" /></Request>
+createLocalMethods;<Request ID="163" Action="CREATE"><Connection Source="MethodNumericNodeId.SERVER_1_0.QO" Destination="MethodNumericNodeId.numericNodeIdMethod_1_0.check" /></Request>
+createLocalMethods;<Request ID="164" Action="CREATE"><Connection Source="MethodNumericNodeId.F_BOOL_TO_UINT.OUT" Destination="MethodNumericNodeId.E_DEMUX_2.K" /></Request>
+createLocalMethods;<Request ID="165" Action="CREATE"><Connection Source="MethodStringNodeId.F_BOOL_TO_UINT.CNF" Destination="MethodStringNodeId.E_DEMUX_2.EI" /></Request>
+createLocalMethods;<Request ID="166" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_2_3.INITO" Destination="MethodStringNodeId.F_BOOL_TO_UINT.REQ" /></Request>
+createLocalMethods;<Request ID="167" Action="CREATE"><Connection Source="MethodStringNodeId.E_DEMUX_2.EO2" Destination="MethodStringNodeId.stringNodeIdMethod_2_3.REQ" /></Request>
+createLocalMethods;<Request ID="168" Action="CREATE"><Connection Source="MethodStringNodeId.E_DEMUX_2.EO1" Destination="MethodBytestringNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="169" Action="CREATE"><Connection Source="MethodStringNodeId.stringNodeIdMethod_1_0.CNF" Destination="MethodStringNodeId.stringNodeIdMethod0.REQ" /></Request>
+createLocalMethods;<Request ID="170" Action="CREATE"><Connection Source="MethodStringNodeId.stringNodeIdMethod0.CNF" Destination="MethodBytestringNodeId.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="171" Action="CREATE"><Connection Source="MethodStringNodeId.stringNodeIdMethod_2_3.CNF" Destination="MethodStringNodeId.stringNodeIdMethod_0_3.REQ" /></Request>
+createLocalMethods;<Request ID="172" Action="CREATE"><Connection Source="MethodStringNodeId.stringNodeIdMethod_0_3.CNF" Destination="MethodStringNodeId.stringNodeIdMethod_1_0.REQ" /></Request>
+createLocalMethods;<Request ID="173" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0_3.INITO" Destination="MethodStringNodeId.SERVER_2_3.INIT" /></Request>
+createLocalMethods;<Request ID="174" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_1_0.INITO" Destination="MethodStringNodeId.SERVER_0_3.INIT" /></Request>
+createLocalMethods;<Request ID="175" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0.INITO" Destination="MethodStringNodeId.SERVER_1_0.INIT" /></Request>
+createLocalMethods;<Request ID="176" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_2_3.RD_2" Destination="MethodStringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+createLocalMethods;<Request ID="177" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_2_3.RD_1" Destination="MethodStringNodeId.DINT2DINT_1_2.IN" /></Request>
+createLocalMethods;<Request ID="178" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0.QO" Destination="MethodStringNodeId.stringNodeIdMethod0.check" /></Request>
+createLocalMethods;<Request ID="179" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0_3.RD_3" Destination="MethodStringNodeId.DINT2DINT_1_3.IN" /></Request>
+createLocalMethods;<Request ID="180" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0_3.RD_2" Destination="MethodStringNodeId.DINT2DINT_1_1.IN" /></Request>
+createLocalMethods;<Request ID="181" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0_3.QO" Destination="MethodStringNodeId.stringNodeIdMethod_0_3.check" /></Request>
+createLocalMethods;<Request ID="182" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_0_3.RD_1" Destination="MethodStringNodeId.DINT2DINT_1.IN" /></Request>
+createLocalMethods;<Request ID="183" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_2_3.RD_3" Destination="MethodStringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+createLocalMethods;<Request ID="184" Action="CREATE"><Connection Source="MethodStringNodeId.DINT2DINT.OUT" Destination="MethodStringNodeId.SERVER_2_3.SD_1" /></Request>
+createLocalMethods;<Request ID="185" Action="CREATE"><Connection Source="MethodStringNodeId.DINT2DINT.OUT" Destination="MethodStringNodeId.SERVER_2_3.SD_2" /></Request>
+createLocalMethods;<Request ID="186" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_2_3.QO" Destination="MethodStringNodeId.stringNodeIdMethod_2_3.check" /></Request>
+createLocalMethods;<Request ID="187" Action="CREATE"><Connection Source="MethodStringNodeId.DINT2DINT.OUT" Destination="MethodStringNodeId.SERVER_1_0.SD_1" /></Request>
+createLocalMethods;<Request ID="188" Action="CREATE"><Connection Source="MethodStringNodeId.SERVER_1_0.QO" Destination="MethodStringNodeId.stringNodeIdMethod_1_0.check" /></Request>
+createLocalMethods;<Request ID="189" Action="CREATE"><Connection Source="MethodStringNodeId.F_BOOL_TO_UINT.OUT" Destination="MethodStringNodeId.E_DEMUX_2.K" /></Request>
+createLocalMethods;<Request ID="190" Action="CREATE"><Connection Source="F_BOOL_TO_UINT_2.CNF" Destination="E_DEMUX_2_2.EI" /></Request>
+createLocalMethods;<Request ID="191" Action="CREATE"><Connection Source="E_DEMUX_2_2.EO2" Destination="E_SR_2.R" /></Request>
+createLocalMethods;<Request ID="192" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="MethodOnlyBrowseName.SERVER_0.INIT" /></Request>
+createLocalMethods;<Request ID="193" Action="CREATE"><Connection Source="E_DEMUX_2_2.EO1" Destination="STEST_END_2.REQ" /></Request>
+createLocalMethods;<Request ID="194" Action="CREATE"><Connection Source="START.COLD" Destination="E_SR_2.S" /></Request>
+createLocalMethods;<Request ID="195" Action="CREATE"><Connection Source="F_BOOL_TO_UINT_2.OUT" Destination="E_DEMUX_2_2.K" /></Request>
+createLocalMethods;<Request ID="196" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodOnlyBrowseName.SERVER_0.QI" /></Request>
+createLocalMethods;<Request ID="197" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodOnlyBrowseName.SERVER_1_0.QI" /></Request>
+createLocalMethods;<Request ID="198" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodOnlyBrowseName.SERVER_0_3.QI" /></Request>
+createLocalMethods;<Request ID="199" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodOnlyBrowseName.SERVER_2_3.QI" /></Request>
+createLocalMethods;<Request ID="200" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodOnlyBrowseName.F_BOOL_TO_UINT.IN" /></Request>
+createLocalMethods;<Request ID="201" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodBytestringNodeId.SERVER_0.QI" /></Request>
+createLocalMethods;<Request ID="202" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodBytestringNodeId.SERVER_1_0.QI" /></Request>
+createLocalMethods;<Request ID="203" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodBytestringNodeId.SERVER_0_3.QI" /></Request>
+createLocalMethods;<Request ID="204" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodBytestringNodeId.SERVER_2_3.QI" /></Request>
+createLocalMethods;<Request ID="205" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodBytestringNodeId.F_BOOL_TO_UINT.IN" /></Request>
+createLocalMethods;<Request ID="206" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="F_BOOL_TO_UINT_2.IN" /></Request>
+createLocalMethods;<Request ID="207" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodNumericNodeId.SERVER_0.QI" /></Request>
+createLocalMethods;<Request ID="208" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodNumericNodeId.SERVER_1_0.QI" /></Request>
+createLocalMethods;<Request ID="209" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodNumericNodeId.SERVER_0_3.QI" /></Request>
+createLocalMethods;<Request ID="210" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodNumericNodeId.SERVER_2_3.QI" /></Request>
+createLocalMethods;<Request ID="211" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodNumericNodeId.F_BOOL_TO_UINT.IN" /></Request>
+createLocalMethods;<Request ID="212" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodStringNodeId.SERVER_0.QI" /></Request>
+createLocalMethods;<Request ID="213" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodStringNodeId.SERVER_1_0.QI" /></Request>
+createLocalMethods;<Request ID="214" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodStringNodeId.SERVER_0_3.QI" /></Request>
+createLocalMethods;<Request ID="215" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodStringNodeId.SERVER_2_3.QI" /></Request>
+createLocalMethods;<Request ID="216" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="MethodStringNodeId.F_BOOL_TO_UINT.IN" /></Request>
+createLocalMethods;<Request ID="217" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/nodespaceTest/fordiacNamespace.NodeSet2.xml b/systemtests/src/modules/opc_ua/nodespaceTest/fordiacNamespace.NodeSet2.xml
new file mode 100644
index 0000000..78e6d1e
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/nodespaceTest/fordiacNamespace.NodeSet2.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+<UANodeSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-05-01T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
+ <NamespaceUris>
+ <Uri>https://git.eclipse.org/4diac/org.eclipse.4diac</Uri>
+ </NamespaceUris>
+ <Models>
+ <Model ModelUri="https://git.eclipse.org/4diac/org.eclipse.4diac" Version="1.02" PublicationDate="2019-05-01T00:00:00Z">
+ <RequiredModel ModelUri="http://opcfoundation.org/UA/" Version="1.05" PublicationDate="2019-05-01T00:00:00Z" />
+ </Model>
+ </Models>
+ <Aliases>
+ <Alias Alias="Boolean">i=1</Alias>
+ <Alias Alias="SByte">i=2</Alias>
+ <Alias Alias="Byte">i=3</Alias>
+ <Alias Alias="Int16">i=4</Alias>
+ <Alias Alias="UInt16">i=5</Alias>
+ <Alias Alias="Int32">i=6</Alias>
+ <Alias Alias="UInt32">i=7</Alias>
+ <Alias Alias="Int64">i=8</Alias>
+ <Alias Alias="UInt64">i=9</Alias>
+ <Alias Alias="Float">i=10</Alias>
+ <Alias Alias="Double">i=11</Alias>
+ <Alias Alias="DateTime">i=13</Alias>
+ <Alias Alias="String">i=12</Alias>
+ <Alias Alias="ByteString">i=15</Alias>
+ <Alias Alias="Guid">i=14</Alias>
+ <Alias Alias="XmlElement">i=16</Alias>
+ <Alias Alias="NodeId">i=17</Alias>
+ <Alias Alias="ExpandedNodeId">i=18</Alias>
+ <Alias Alias="QualifiedName">i=20</Alias>
+ <Alias Alias="LocalizedText">i=21</Alias>
+ <Alias Alias="StatusCode">i=19</Alias>
+ <Alias Alias="Structure">i=22</Alias>
+ <Alias Alias="Number">i=26</Alias>
+ <Alias Alias="Integer">i=27</Alias>
+ <Alias Alias="UInteger">i=28</Alias>
+ <Alias Alias="HasComponent">i=47</Alias>
+ <Alias Alias="HasProperty">i=46</Alias>
+ <Alias Alias="Organizes">i=35</Alias>
+ <Alias Alias="HasEventSource">i=36</Alias>
+ <Alias Alias="HasNotifier">i=48</Alias>
+ <Alias Alias="HasSubtype">i=45</Alias>
+ <Alias Alias="HasTypeDefinition">i=40</Alias>
+ <Alias Alias="HasModellingRule">i=37</Alias>
+ <Alias Alias="HasEncoding">i=38</Alias>
+ <Alias Alias="HasDescription">i=39</Alias>
+ </Aliases>
+ <UAObjectType NodeId="ns=1;i=15001" BrowseName="1:TestObject">
+ <DisplayName>TestObject</DisplayName>
+ <Description>Object to test in 4diac</Description>
+ <References>
+ <Reference ReferenceType="HasComponent">ns=1;i=15002</Reference>
+ <Reference ReferenceType="HasComponent">ns=1;i=15003</Reference>
+ <Reference ReferenceType="HasComponent">ns=1;i=15004</Reference>
+ <Reference ReferenceType="HasComponent">ns=1;i=15007</Reference>
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+ </References>
+ </UAObjectType>
+ <UAVariable NodeId="ns=1;i=15002" BrowseName="1:Variable1" ParentNodeId="ns=1;i=15001" DataType="Int32">
+ <DisplayName>Variable1</DisplayName>
+ <Description>Variable 1</Description>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=15001</Reference>
+ </References>
+ </UAVariable>
+ <UAVariable NodeId="ns=1;i=15003" BrowseName="1:Variable2" ParentNodeId="ns=1;i=15001" DataType="Int32">
+ <DisplayName>Variable2</DisplayName>
+ <Description>Variable 2</Description>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=15001</Reference>
+ </References>
+ </UAVariable>
+ <UAMethod NodeId="ns=1;i=15004" BrowseName="1:TestMethod" ParentNodeId="ns=1;i=15001">
+ <DisplayName>TestMethod</DisplayName>
+ <References>
+ <Reference ReferenceType="HasProperty">ns=1;i=15005</Reference>
+ <Reference ReferenceType="HasProperty">ns=1;i=15006</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=15001</Reference>
+ </References>
+ </UAMethod>
+ <UAVariable NodeId="ns=1;i=15005" BrowseName="InputArguments" ParentNodeId="ns=1;i=15004" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+ <DisplayName>InputArguments</DisplayName>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=15004</Reference>
+ </References>
+ <Value>
+ <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+ <ExtensionObject>
+ <TypeId>
+ <Identifier>i=297</Identifier>
+ </TypeId>
+ <Body>
+ <Argument>
+ <Name>InputArgument</Name>
+ <DataType>
+ <Identifier>i=6</Identifier>
+ </DataType>
+ <ValueRank>-1</ValueRank>
+ <ArrayDimensions />
+ </Argument>
+ </Body>
+ </ExtensionObject>
+ </ListOfExtensionObject>
+ </Value>
+ </UAVariable>
+ <UAVariable NodeId="ns=1;i=15006" BrowseName="OutputArguments" ParentNodeId="ns=1;i=15004" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+ <DisplayName>OutputArguments</DisplayName>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=15004</Reference>
+ </References>
+ <Value>
+ <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+ <ExtensionObject>
+ <TypeId>
+ <Identifier>i=297</Identifier>
+ </TypeId>
+ <Body>
+ <Argument>
+ <Name>OutputArgument</Name>
+ <DataType>
+ <Identifier>i=6</Identifier>
+ </DataType>
+ <ValueRank>-1</ValueRank>
+ <ArrayDimensions />
+ </Argument>
+ </Body>
+ </ExtensionObject>
+ </ListOfExtensionObject>
+ </Value>
+ </UAVariable>
+ <UAMethod NodeId="ns=1;i=15007" BrowseName="1:TestMethod2" ParentNodeId="ns=1;i=15001">
+ <DisplayName>TestMethod2</DisplayName>
+ <References>
+ <Reference ReferenceType="HasProperty">ns=1;i=15008</Reference>
+ <Reference ReferenceType="HasProperty">ns=1;i=15009</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=15001</Reference>
+ </References>
+ </UAMethod>
+ <UAVariable NodeId="ns=1;i=15008" BrowseName="InputArguments" ParentNodeId="ns=1;i=15007" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+ <DisplayName>InputArguments</DisplayName>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=15007</Reference>
+ </References>
+ <Value>
+ <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+ <ExtensionObject>
+ <TypeId>
+ <Identifier>i=297</Identifier>
+ </TypeId>
+ <Body>
+ <Argument>
+ <Name>InputArgument</Name>
+ <DataType>
+ <Identifier>i=6</Identifier>
+ </DataType>
+ <ValueRank>-1</ValueRank>
+ <ArrayDimensions />
+ </Argument>
+ </Body>
+ </ExtensionObject>
+ </ListOfExtensionObject>
+ </Value>
+ </UAVariable>
+ <UAVariable NodeId="ns=1;i=15009" BrowseName="OutputArguments" ParentNodeId="ns=1;i=15007" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+ <DisplayName>OutputArguments</DisplayName>
+ <References>
+ <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+ <Reference ReferenceType="HasModellingRule">i=78</Reference>
+ <Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=15007</Reference>
+ </References>
+ <Value>
+ <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+ <ExtensionObject>
+ <TypeId>
+ <Identifier>i=297</Identifier>
+ </TypeId>
+ <Body>
+ <Argument>
+ <Name>OutputArgument</Name>
+ <DataType>
+ <Identifier>i=6</Identifier>
+ </DataType>
+ <ValueRank>-1</ValueRank>
+ <ArrayDimensions />
+ </Argument>
+ </Body>
+ </ExtensionObject>
+ </ListOfExtensionObject>
+ </Value>
+ </UAVariable>
+</UANodeSet>
\ No newline at end of file
diff --git a/systemtests/src/modules/opc_ua/nodespaceTest/fordiacTests.xml b/systemtests/src/modules/opc_ua/nodespaceTest/fordiacTests.xml
new file mode 100644
index 0000000..3411ec2
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/nodespaceTest/fordiacTests.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ModelDesign
+xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:OpcUa="http://opcfoundation.org/UA/"
+ xmlns:fordiacTest="https://git.eclipse.org/4diac/org.eclipse.4diac"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ TargetNamespace="https://git.eclipse.org/4diac/org.eclipse.4diac"
+ TargetXmlNamespace="https://git.eclipse.org/4diac/org.eclipse.4diac"
+ TargetVersion="1.02"
+ TargetPublicationDate="2019-05-01T00:00:00Z"
+ xmlns="http://opcfoundation.org/UA/ModelDesign.xsd">
+
+
+ <Namespaces>
+ <Namespace Name="fordiacNamespace" Prefix="fordiacNamespace"
+ XmlNamespace="https://git.eclipse.org/4diac/org.eclipse.4diac"
+ XmlPrefix="fordiacNamespace">https://git.eclipse.org/4diac/org.eclipse.4diac</Namespace>
+ <Namespace Name="OpcUa" Prefix="Opc.Ua" InternalPrefix="Opc.Ua.Server" XmlNamespace="http://opcfoundation.org/UA/2008/02/Types.xsd" XmlPrefix="OpcUa">http://opcfoundation.org/UA/</Namespace>
+ </Namespaces>
+
+ <ObjectType
+ SymbolicName="fordiacTest:TestObject" NumericId="1005"
+ BaseType="OpcUa:BaseObjectType" SupportsEvents="true">
+ <Description>Object to test in 4diac</Description>
+ <Children>
+
+ <Variable SymbolicName="fordiacTest:Variable1" DataType="OpcUa:Int32"
+ ValueRank="Scalar" ModellingRule="Mandatory">
+ <Description>Variable 1</Description>
+ </Variable>
+
+ <Variable SymbolicName="fordiacTest:Variable2" DataType="OpcUa:Int32"
+ ValueRank="Scalar" ModellingRule="Mandatory">
+ <Description>Variable 2</Description>
+ </Variable>
+
+ <Method SymbolicName="fordiacTest:TestMethod" TypeDefinition="fordiacTest:TestMethodType" />
+
+ <Method SymbolicName="fordiacTest:TestMethod2" TypeDefinition="fordiacTest:TestMethodType" />
+
+
+ </Children>
+ </ObjectType>
+
+ <Method SymbolicName="fordiacTest:TestMethodType">
+
+ <InputArguments>
+ <Argument Name="InputArgument" DataType="OpcUa:Int32" />
+ </InputArguments>
+
+ <OutputArguments>
+ <Argument Name="OutputArgument" DataType="OpcUa:Int32" />
+ </OutputArguments>
+
+ </Method>
+</ModelDesign>
\ No newline at end of file
diff --git a/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.c b/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.c
new file mode 100644
index 0000000..46d2d94
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.c
@@ -0,0 +1,349 @@
+/* WARNING: This is a generated file.
+ * Any manual changes will be overwritten. */
+
+#include "../nodespaceTest/ua_namespace_fordiacNamespace.h"
+
+
+/* TestObject - ns=1;i=15001 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_0_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
+attr.displayName = UA_LOCALIZEDTEXT("", "TestObject");
+#ifdef UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS
+attr.description = UA_LOCALIZEDTEXT("", "Object to test in 4diac");
+#endif
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_OBJECTTYPE,
+UA_NODEID_NUMERIC(ns[1], 15001),
+UA_NODEID_NUMERIC(ns[0], 58),
+UA_NODEID_NUMERIC(ns[0], 45),
+UA_QUALIFIEDNAME(ns[1], "TestObject"),
+ UA_NODEID_NULL,
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],NULL, NULL);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_0_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15001)
+);
+}
+
+/* TestMethod2 - ns=1;i=15007 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_1_begin(UA_Server *server, UA_UInt16* ns) {
+#ifdef UA_ENABLE_METHODCALLS
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_MethodAttributes attr = UA_MethodAttributes_default;
+attr.executable = true;
+attr.userExecutable = true;
+attr.displayName = UA_LOCALIZEDTEXT("", "TestMethod2");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_METHOD,
+UA_NODEID_NUMERIC(ns[1], 15007),
+UA_NODEID_NUMERIC(ns[1], 15001),
+UA_NODEID_NUMERIC(ns[0], 47),
+UA_QUALIFIEDNAME(ns[1], "TestMethod2"),
+ UA_NODEID_NULL,
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_METHODATTRIBUTES],NULL, NULL);
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15007), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+#else
+return UA_STATUSCODE_GOOD;
+#endif /* UA_ENABLE_METHODCALLS */
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_1_finish(UA_Server *server, UA_UInt16* ns) {
+#ifdef UA_ENABLE_METHODCALLS
+return UA_Server_addMethodNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15007)
+, NULL, 0, NULL, 0, NULL);
+#else
+return UA_STATUSCODE_GOOD;
+#endif /* UA_ENABLE_METHODCALLS */
+}
+
+/* InputArguments - ns=1;i=15008 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_2_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+attr.valueRank = 1;
+attr.arrayDimensionsSize = 1;
+UA_UInt32 arrayDimensions[1];
+arrayDimensions[0] = 0;
+attr.arrayDimensions = &arrayDimensions[0];
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 296);
+UA_Argument variablenode_ns_1_i_15008_variant_DataContents[1];
+
+UA_init(&variablenode_ns_1_i_15008_variant_DataContents[0], &UA_TYPES[UA_TYPES_ARGUMENT]);
+variablenode_ns_1_i_15008_variant_DataContents[0].name = UA_STRING("InputArgument");
+variablenode_ns_1_i_15008_variant_DataContents[0].dataType = UA_NODEID_NUMERIC(ns[0], 6);
+variablenode_ns_1_i_15008_variant_DataContents[0].valueRank = (UA_Int32) -1;
+UA_Variant_setArray(&attr.value, &variablenode_ns_1_i_15008_variant_DataContents, (UA_Int32) 1, &UA_TYPES[UA_TYPES_ARGUMENT]);
+attr.displayName = UA_LOCALIZEDTEXT("", "InputArguments");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15008),
+UA_NODEID_NUMERIC(ns[1], 15007),
+UA_NODEID_NUMERIC(ns[0], 46),
+UA_QUALIFIEDNAME(ns[0], "InputArguments"),
+UA_NODEID_NUMERIC(ns[0], 68),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15008), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_2_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15008)
+);
+}
+
+/* OutputArguments - ns=1;i=15009 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_3_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+attr.valueRank = 1;
+attr.arrayDimensionsSize = 1;
+UA_UInt32 arrayDimensions[1];
+arrayDimensions[0] = 0;
+attr.arrayDimensions = &arrayDimensions[0];
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 296);
+UA_Argument variablenode_ns_1_i_15009_variant_DataContents[1];
+
+UA_init(&variablenode_ns_1_i_15009_variant_DataContents[0], &UA_TYPES[UA_TYPES_ARGUMENT]);
+variablenode_ns_1_i_15009_variant_DataContents[0].name = UA_STRING("OutputArgument");
+variablenode_ns_1_i_15009_variant_DataContents[0].dataType = UA_NODEID_NUMERIC(ns[0], 6);
+variablenode_ns_1_i_15009_variant_DataContents[0].valueRank = (UA_Int32) -1;
+UA_Variant_setArray(&attr.value, &variablenode_ns_1_i_15009_variant_DataContents, (UA_Int32) 1, &UA_TYPES[UA_TYPES_ARGUMENT]);
+attr.displayName = UA_LOCALIZEDTEXT("", "OutputArguments");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15009),
+UA_NODEID_NUMERIC(ns[1], 15007),
+UA_NODEID_NUMERIC(ns[0], 46),
+UA_QUALIFIEDNAME(ns[0], "OutputArguments"),
+UA_NODEID_NUMERIC(ns[0], 68),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15009), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_3_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15009)
+);
+}
+
+/* TestMethod - ns=1;i=15004 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_4_begin(UA_Server *server, UA_UInt16* ns) {
+#ifdef UA_ENABLE_METHODCALLS
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_MethodAttributes attr = UA_MethodAttributes_default;
+attr.executable = true;
+attr.userExecutable = true;
+attr.displayName = UA_LOCALIZEDTEXT("", "TestMethod");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_METHOD,
+UA_NODEID_NUMERIC(ns[1], 15004),
+UA_NODEID_NUMERIC(ns[1], 15001),
+UA_NODEID_NUMERIC(ns[0], 47),
+UA_QUALIFIEDNAME(ns[1], "TestMethod"),
+ UA_NODEID_NULL,
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_METHODATTRIBUTES],NULL, NULL);
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15004), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+#else
+return UA_STATUSCODE_GOOD;
+#endif /* UA_ENABLE_METHODCALLS */
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_4_finish(UA_Server *server, UA_UInt16* ns) {
+#ifdef UA_ENABLE_METHODCALLS
+return UA_Server_addMethodNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15004)
+, NULL, 0, NULL, 0, NULL);
+#else
+return UA_STATUSCODE_GOOD;
+#endif /* UA_ENABLE_METHODCALLS */
+}
+
+/* InputArguments - ns=1;i=15005 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_5_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+attr.valueRank = 1;
+attr.arrayDimensionsSize = 1;
+UA_UInt32 arrayDimensions[1];
+arrayDimensions[0] = 0;
+attr.arrayDimensions = &arrayDimensions[0];
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 296);
+UA_Argument variablenode_ns_1_i_15005_variant_DataContents[1];
+
+UA_init(&variablenode_ns_1_i_15005_variant_DataContents[0], &UA_TYPES[UA_TYPES_ARGUMENT]);
+variablenode_ns_1_i_15005_variant_DataContents[0].name = UA_STRING("InputArgument");
+variablenode_ns_1_i_15005_variant_DataContents[0].dataType = UA_NODEID_NUMERIC(ns[0], 6);
+variablenode_ns_1_i_15005_variant_DataContents[0].valueRank = (UA_Int32) -1;
+UA_Variant_setArray(&attr.value, &variablenode_ns_1_i_15005_variant_DataContents, (UA_Int32) 1, &UA_TYPES[UA_TYPES_ARGUMENT]);
+attr.displayName = UA_LOCALIZEDTEXT("", "InputArguments");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15005),
+UA_NODEID_NUMERIC(ns[1], 15004),
+UA_NODEID_NUMERIC(ns[0], 46),
+UA_QUALIFIEDNAME(ns[0], "InputArguments"),
+UA_NODEID_NUMERIC(ns[0], 68),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15005), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_5_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15005)
+);
+}
+
+/* OutputArguments - ns=1;i=15006 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_6_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+attr.valueRank = 1;
+attr.arrayDimensionsSize = 1;
+UA_UInt32 arrayDimensions[1];
+arrayDimensions[0] = 0;
+attr.arrayDimensions = &arrayDimensions[0];
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 296);
+UA_Argument variablenode_ns_1_i_15006_variant_DataContents[1];
+
+UA_init(&variablenode_ns_1_i_15006_variant_DataContents[0], &UA_TYPES[UA_TYPES_ARGUMENT]);
+variablenode_ns_1_i_15006_variant_DataContents[0].name = UA_STRING("OutputArgument");
+variablenode_ns_1_i_15006_variant_DataContents[0].dataType = UA_NODEID_NUMERIC(ns[0], 6);
+variablenode_ns_1_i_15006_variant_DataContents[0].valueRank = (UA_Int32) -1;
+UA_Variant_setArray(&attr.value, &variablenode_ns_1_i_15006_variant_DataContents, (UA_Int32) 1, &UA_TYPES[UA_TYPES_ARGUMENT]);
+attr.displayName = UA_LOCALIZEDTEXT("", "OutputArguments");
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15006),
+UA_NODEID_NUMERIC(ns[1], 15004),
+UA_NODEID_NUMERIC(ns[0], 46),
+UA_QUALIFIEDNAME(ns[0], "OutputArguments"),
+UA_NODEID_NUMERIC(ns[0], 68),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15006), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_6_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15006)
+);
+}
+
+/* Variable1 - ns=1;i=15002 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_7_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+/* Value rank inherited */
+attr.valueRank = -1;
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 6);
+attr.displayName = UA_LOCALIZEDTEXT("", "Variable1");
+#ifdef UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS
+attr.description = UA_LOCALIZEDTEXT("", "Variable 1");
+#endif
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15002),
+UA_NODEID_NUMERIC(ns[1], 15001),
+UA_NODEID_NUMERIC(ns[0], 47),
+UA_QUALIFIEDNAME(ns[1], "Variable1"),
+UA_NODEID_NUMERIC(ns[0], 63),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15002), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_7_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15002)
+);
+}
+
+/* Variable2 - ns=1;i=15003 */
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_8_begin(UA_Server *server, UA_UInt16* ns) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+UA_VariableAttributes attr = UA_VariableAttributes_default;
+attr.minimumSamplingInterval = 0.000000;
+attr.userAccessLevel = 1;
+attr.accessLevel = 1;
+/* Value rank inherited */
+attr.valueRank = -1;
+attr.dataType = UA_NODEID_NUMERIC(ns[0], 6);
+attr.displayName = UA_LOCALIZEDTEXT("", "Variable2");
+#ifdef UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS
+attr.description = UA_LOCALIZEDTEXT("", "Variable 2");
+#endif
+retVal |= UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
+UA_NODEID_NUMERIC(ns[1], 15003),
+UA_NODEID_NUMERIC(ns[1], 15001),
+UA_NODEID_NUMERIC(ns[0], 47),
+UA_QUALIFIEDNAME(ns[1], "Variable2"),
+UA_NODEID_NUMERIC(ns[0], 63),
+(const UA_NodeAttributes*)&attr, &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],NULL, NULL);
+retVal |= UA_Server_addReference(server, UA_NODEID_NUMERIC(ns[1], 15003), UA_NODEID_NUMERIC(ns[0], 37), UA_EXPANDEDNODEID_NUMERIC(ns[0], 78), true);
+return retVal;
+}
+
+static UA_StatusCode function_ua_namespace_fordiacNamespace_8_finish(UA_Server *server, UA_UInt16* ns) {
+return UA_Server_addNode_finish(server,
+UA_NODEID_NUMERIC(ns[1], 15003)
+);
+}
+
+UA_StatusCode ua_namespace_fordiacNamespace(UA_Server *server) {
+UA_StatusCode retVal = UA_STATUSCODE_GOOD;
+/* Use namespace ids generated by the server */
+UA_UInt16 ns[2];
+ns[0] = UA_Server_addNamespace(server, "http://opcfoundation.org/UA/");
+ns[1] = UA_Server_addNamespace(server, "https://git.eclipse.org/4diac/org.eclipse.4diac");
+bool dummy = (
+!(retVal = function_ua_namespace_fordiacNamespace_0_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_1_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_2_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_3_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_4_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_5_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_6_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_7_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_8_begin(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_8_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_7_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_6_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_5_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_4_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_3_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_2_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_1_finish(server, ns)) &&
+!(retVal = function_ua_namespace_fordiacNamespace_0_finish(server, ns))
+); (void)(dummy);
+return retVal;
+}
diff --git a/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.h b/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.h
new file mode 100644
index 0000000..50e58f5
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/nodespaceTest/ua_namespace_fordiacNamespace.h
@@ -0,0 +1,21 @@
+/* WARNING: This is a generated file.
+ * Any manual changes will be overwritten. */
+
+#ifndef UA_NAMESPACE_FORDIACNAMESPACE_H_
+#define UA_NAMESPACE_FORDIACNAMESPACE_H_
+
+#include "open62541.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern UA_StatusCode ua_namespace_fordiacNamespace(UA_Server *server);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* UA_NAMESPACE_FORDIACNAMESPACE_H_ */
diff --git a/systemtests/src/modules/opc_ua/serverWorking.fboot b/systemtests/src/modules/opc_ua/serverWorking.fboot
new file mode 100644
index 0000000..3583453
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/serverWorking.fboot
@@ -0,0 +1,1160 @@
+;<Request ID="1" Action="CREATE"><FB Name="WorkingServer" Type="EMB_RES" /></Request>
+WorkingServer;<Request ID="2" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+WorkingServer;<Request ID="3" Action="CREATE"><FB Name="SUBSCRIBE_0_1" Type="SUBSCRIBE_0" /></Request>
+WorkingServer;<Request ID="4" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_0_1.QI" /></Request>
+WorkingServer;<Request ID="5" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="SUBSCRIBE_0_1.ID" /></Request>
+WorkingServer;<Request ID="6" Action="CREATE"><FB Name="folderTest.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="7" Action="CREATE"><FB Name="folderTest.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="8" Action="CREATE"><FB Name="folderTest.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="9" Action="CREATE"><FB Name="folderTest.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="10" Action="CREATE"><FB Name="folderTest.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="11" Action="CREATE"><FB Name="folderTest.Writable1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="12" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/NoId]" Destination="folderTest.Writable1.ID" /></Request>
+WorkingServer;<Request ID="13" Action="CREATE"><FB Name="folderTest.Writable2" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="14" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/sameFolder/NoId1]" Destination="folderTest.Writable2.ID" /></Request>
+WorkingServer;<Request ID="15" Action="CREATE"><FB Name="folderTest.Writable3" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="16" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/OnlyBrowseName/folderTests/folder1/NoId;/Objects/firstRead/OnlyBrowseName/folderTests/folder2/NoId]" Destination="folderTest.Writable3.ID" /></Request>
+WorkingServer;<Request ID="17" Action="CREATE"><FB Name="folderTest.localReadFolder1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="18" Action="CREATE"><FB Name="folderTest.localReadFolder2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="19" Action="CREATE"><FB Name="folderTest.localReadFolder3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="20" Action="CREATE"><FB Name="folderTest.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="21" Action="WRITE"><Connection Source="DINT#123" Destination="folderTest.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="22" Action="CREATE"><FB Name="folderTest.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="23" Action="WRITE"><Connection Source="DINT#456" Destination="folderTest.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="24" Action="CREATE"><FB Name="folderTest.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="25" Action="WRITE"><Connection Source="DINT#789" Destination="folderTest.F_EQ_2_1.IN2" /></Request>
+WorkingServer;<Request ID="26" Action="CREATE"><FB Name="folderTest.F_EQ__1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="27" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest.F_EQ__1.IN2" /></Request>
+WorkingServer;<Request ID="28" Action="CREATE"><FB Name="folderTest.F_OR_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="29" Action="CREATE"><FB Name="folderTest.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="30" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest.F_EQ_5_1.IN2" /></Request>
+WorkingServer;<Request ID="31" Action="CREATE"><FB Name="folderTest.F_OR_2" Type="F_OR" /></Request>
+WorkingServer;<Request ID="32" Action="CREATE"><FB Name="folderTest.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="33" Action="WRITE"><Connection Source="DINT#123456" Destination="folderTest.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="34" Action="CREATE"><FB Name="folderTest.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="35" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest.F_EQ__1_1.IN2" /></Request>
+WorkingServer;<Request ID="36" Action="CREATE"><FB Name="folderTest.F_EQ_2_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="37" Action="WRITE"><Connection Source="DINT#654321" Destination="folderTest.F_EQ_2_1_1.IN2" /></Request>
+WorkingServer;<Request ID="38" Action="CREATE"><FB Name="folderTest.localReadFolder5" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="39" Action="CREATE"><FB Name="folderTest.F_OR_1_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="40" Action="CREATE"><FB Name="folderTest.F_EQ_5_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="41" Action="WRITE"><Connection Source="DINT#0" Destination="folderTest.F_EQ_5_1_1.IN2" /></Request>
+WorkingServer;<Request ID="42" Action="CREATE"><FB Name="folderTest.localReadFolder4" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="43" Action="CREATE"><FB Name="folderTest.F_OR_2_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="44" Action="CREATE"><FB Name="HandleInitLocal.InitFinished" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="45" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="HandleInitLocal.InitFinished.ID" /></Request>
+WorkingServer;<Request ID="46" Action="CREATE"><FB Name="HandleInitLocal.SUBSCRIBE_0" Type="SUBSCRIBE_0" /></Request>
+WorkingServer;<Request ID="47" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="HandleInitLocal.SUBSCRIBE_0.ID" /></Request>
+WorkingServer;<Request ID="48" Action="CREATE"><FB Name="HandleInitLocal.E_CYCLE" Type="E_CYCLE" /></Request>
+WorkingServer;<Request ID="49" Action="WRITE"><Connection Source="T#1000ms" Destination="HandleInitLocal.E_CYCLE.DT" /></Request>
+WorkingServer;<Request ID="50" Action="CREATE"><FB Name="HandleInitLocal.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+WorkingServer;<Request ID="51" Action="CREATE"><FB Name="HandleInitLocal.STEST_END" Type="STEST_END" /></Request>
+WorkingServer;<Request ID="52" Action="CREATE"><FB Name="HandleInitLocal.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+WorkingServer;<Request ID="53" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="54" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="55" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="56" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/noOParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="57" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="58" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="59" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_0_3" Type="SERVER_0_3" /></Request>
+WorkingServer;<Request ID="60" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyOutputPameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.ID" /></Request>
+WorkingServer;<Request ID="61" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="62" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_2_3" Type="SERVER_2_3" /></Request>
+WorkingServer;<Request ID="63" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/bothInputAndOutputParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.ID" /></Request>
+WorkingServer;<Request ID="64" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="65" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="66" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WorkingServer;<Request ID="67" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/browseNameOnly/onlyInputParameters]" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.ID" /></Request>
+WorkingServer;<Request ID="68" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="69" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="70" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="71" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="72" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="73" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="74" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.IN" /></Request>
+WorkingServer;<Request ID="75" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="76" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.IN" /></Request>
+WorkingServer;<Request ID="77" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="78" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="79" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="80" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="81" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="82" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="83" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="84" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="85" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="86" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="87" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="88" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="89" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="90" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.IN2" /></Request>
+WorkingServer;<Request ID="91" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="92" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.IN2" /></Request>
+WorkingServer;<Request ID="93" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="94" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.IN2" /></Request>
+WorkingServer;<Request ID="95" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.E_DELAY" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="96" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY.DT" /></Request>
+WorkingServer;<Request ID="97" Action="CREATE"><FB Name="LocaMethods.MethodOnlyBrowseName.E_DELAY_1" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="98" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.DT" /></Request>
+WorkingServer;<Request ID="99" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="100" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="101" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="102" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/noOParameters,1:i=22345]" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="103" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="104" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="105" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+WorkingServer;<Request ID="106" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyOutputPameters,1:i=22347]" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.ID" /></Request>
+WorkingServer;<Request ID="107" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="108" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+WorkingServer;<Request ID="109" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/bothInputAndOutputParameters,1:i=22348]" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.ID" /></Request>
+WorkingServer;<Request ID="110" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="111" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="112" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WorkingServer;<Request ID="113" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/numericNodeId/onlyInputParameters,1:i=22346]" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.ID" /></Request>
+WorkingServer;<Request ID="114" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="115" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="116" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="117" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="118" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="119" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="120" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_2.IN" /></Request>
+WorkingServer;<Request ID="121" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="122" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_3.IN" /></Request>
+WorkingServer;<Request ID="123" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="124" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="125" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="126" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="127" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="128" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="129" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="130" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="131" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="132" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="133" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="134" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="135" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="136" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.IN2" /></Request>
+WorkingServer;<Request ID="137" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="138" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.IN2" /></Request>
+WorkingServer;<Request ID="139" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="140" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.IN2" /></Request>
+WorkingServer;<Request ID="141" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.E_DELAY" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="142" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodNumericNodeId.E_DELAY.DT" /></Request>
+WorkingServer;<Request ID="143" Action="CREATE"><FB Name="LocaMethods.MethodNumericNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="144" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodNumericNodeId.E_DELAY_1.DT" /></Request>
+WorkingServer;<Request ID="145" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="146" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="147" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="148" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/noOParameters,1:s=methodHello]" Destination="LocaMethods.MethodStringNodeId.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="149" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="150" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="151" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+WorkingServer;<Request ID="152" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyOutputPameters,1:s=methodHello2]" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.ID" /></Request>
+WorkingServer;<Request ID="153" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="154" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+WorkingServer;<Request ID="155" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/bothInputAndOutputParameters,1:s=methodHello3]" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.ID" /></Request>
+WorkingServer;<Request ID="156" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="157" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="158" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WorkingServer;<Request ID="159" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/stringNodeId/onlyInputParameters,1:s=methodHello1]" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.ID" /></Request>
+WorkingServer;<Request ID="160" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="161" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_1_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="162" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="163" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="164" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="165" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="166" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_2.IN" /></Request>
+WorkingServer;<Request ID="167" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="168" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_3.IN" /></Request>
+WorkingServer;<Request ID="169" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="170" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="171" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="172" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_0_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="173" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="174" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="175" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="176" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="177" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="178" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="179" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="180" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.LocalString_2_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="181" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="182" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.IN2" /></Request>
+WorkingServer;<Request ID="183" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="184" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.IN2" /></Request>
+WorkingServer;<Request ID="185" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="186" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.IN2" /></Request>
+WorkingServer;<Request ID="187" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.E_DELAY" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="188" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodStringNodeId.E_DELAY.DT" /></Request>
+WorkingServer;<Request ID="189" Action="CREATE"><FB Name="LocaMethods.MethodStringNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="190" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodStringNodeId.E_DELAY_1.DT" /></Request>
+WorkingServer;<Request ID="191" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="192" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="193" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="194" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/noOParameters,1:b=methodByteStringNodeId1]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="195" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="196" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="197" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_0_3" Type="SERVER_0_3" /></Request>
+WorkingServer;<Request ID="198" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyOutputPameters,1:b=methodByteStringNodeId3]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.ID" /></Request>
+WorkingServer;<Request ID="199" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="200" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_2_3" Type="SERVER_2_3" /></Request>
+WorkingServer;<Request ID="201" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/bothInputAndOutputParameters,1:b=methodByteStringNodeId4]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.ID" /></Request>
+WorkingServer;<Request ID="202" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="203" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="204" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WorkingServer;<Request ID="205" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/firstRead/Methods/byteStringNodeId/onlyInputParameters,1:b=methodByteStringNodeId2]" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.ID" /></Request>
+WorkingServer;<Request ID="206" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="207" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="208" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="209" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="210" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="211" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="212" Action="WRITE"><Connection Source="DINT#123456" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.IN" /></Request>
+WorkingServer;<Request ID="213" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="214" Action="WRITE"><Connection Source="DINT#654321" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.IN" /></Request>
+WorkingServer;<Request ID="215" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="216" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="217" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="218" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="219" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="220" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="221" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="222" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="223" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="224" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="225" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="226" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="227" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="228" Action="WRITE"><Connection Source="DINT#456" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.IN2" /></Request>
+WorkingServer;<Request ID="229" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="230" Action="WRITE"><Connection Source="DINT#123" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.IN2" /></Request>
+WorkingServer;<Request ID="231" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="232" Action="WRITE"><Connection Source="DINT#789" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.IN2" /></Request>
+WorkingServer;<Request ID="233" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.E_DELAY" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="234" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY.DT" /></Request>
+WorkingServer;<Request ID="235" Action="CREATE"><FB Name="LocaMethods.MethodBytestringNodeId.E_DELAY_1" Type="E_DELAY" /></Request>
+WorkingServer;<Request ID="236" Action="WRITE"><Connection Source="T#500ms" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY_1.DT" /></Request>
+WorkingServer;<Request ID="237" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="238" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="239" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="240" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="241" Action="CREATE"><FB Name="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="242" Action="CREATE"><FB Name="stringNodeIdTest.Writable1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="243" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/WithId,1:s=hello]" Destination="stringNodeIdTest.Writable1.ID" /></Request>
+WorkingServer;<Request ID="244" Action="CREATE"><FB Name="stringNodeIdTest.Writable2" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="245" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId,1:s=hello1;/Objects/firstRead/StringNodeId/folderTests/sameFolder/WithId1,1:s=hello2]" Destination="stringNodeIdTest.Writable2.ID" /></Request>
+WorkingServer;<Request ID="246" Action="CREATE"><FB Name="stringNodeIdTest.Writable3" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="247" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/StringNodeId/folderTests/folder1/WithId,1:s=hello3;/Objects/firstRead/StringNodeId/folderTests/folder2/WithId,1:s=hello4]" Destination="stringNodeIdTest.Writable3.ID" /></Request>
+WorkingServer;<Request ID="248" Action="CREATE"><FB Name="stringNodeIdTest.localString1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="249" Action="CREATE"><FB Name="stringNodeIdTest.localString2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="250" Action="CREATE"><FB Name="stringNodeIdTest.localString3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="251" Action="CREATE"><FB Name="stringNodeIdTest.localString4" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="252" Action="CREATE"><FB Name="stringNodeIdTest.localString5" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="253" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="254" Action="WRITE"><Connection Source="DINT#123" Destination="stringNodeIdTest.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="255" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="256" Action="WRITE"><Connection Source="DINT#456" Destination="stringNodeIdTest.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="257" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ__1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="258" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ__1.IN2" /></Request>
+WorkingServer;<Request ID="259" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="260" Action="WRITE"><Connection Source="DINT#789" Destination="stringNodeIdTest.F_EQ_2_1.IN2" /></Request>
+WorkingServer;<Request ID="261" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="262" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="263" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ_5_1.IN2" /></Request>
+WorkingServer;<Request ID="264" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_2" Type="F_OR" /></Request>
+WorkingServer;<Request ID="265" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="266" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ__1_1.IN2" /></Request>
+WorkingServer;<Request ID="267" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_5_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="268" Action="WRITE"><Connection Source="DINT#0" Destination="stringNodeIdTest.F_EQ_5_1_1.IN2" /></Request>
+WorkingServer;<Request ID="269" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_2_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="270" Action="WRITE"><Connection Source="DINT#654321" Destination="stringNodeIdTest.F_EQ_2_1_1.IN2" /></Request>
+WorkingServer;<Request ID="271" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_2_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="272" Action="CREATE"><FB Name="stringNodeIdTest.F_OR_1_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="273" Action="CREATE"><FB Name="stringNodeIdTest.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="274" Action="WRITE"><Connection Source="DINT#123456" Destination="stringNodeIdTest.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="275" Action="CREATE"><FB Name="byteStringNodeIdTest.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="276" Action="CREATE"><FB Name="byteStringNodeIdTest.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="277" Action="CREATE"><FB Name="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="278" Action="CREATE"><FB Name="byteStringNodeIdTest.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="279" Action="CREATE"><FB Name="byteStringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="280" Action="CREATE"><FB Name="byteStringNodeIdTest.Writable1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="281" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/WithId,1:b=byteStringNodeId]" Destination="byteStringNodeIdTest.Writable1.ID" /></Request>
+WorkingServer;<Request ID="282" Action="CREATE"><FB Name="byteStringNodeIdTest.Writable2" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="283" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId,1:b=byteStringNodeId1;/Objects/firstRead/ByteStringNodeId/folderTests/sameFolder/WithId1,1:b=byteStringNodeId2]" Destination="byteStringNodeIdTest.Writable2.ID" /></Request>
+WorkingServer;<Request ID="284" Action="CREATE"><FB Name="byteStringNodeIdTest.Writable3" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="285" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/ByteStringNodeId/folderTests/folder1/WithId,1:b=byteStringNodeId3;/Objects/firstRead/ByteStringNodeId/folderTests/folder2/WithId,1:b=byteStringNodeId4]" Destination="byteStringNodeIdTest.Writable3.ID" /></Request>
+WorkingServer;<Request ID="286" Action="CREATE"><FB Name="byteStringNodeIdTest.localBytestringNumeric1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="287" Action="CREATE"><FB Name="byteStringNodeIdTest.localBytestringNumeric2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="288" Action="CREATE"><FB Name="byteStringNodeIdTest.localBytestringNumeric3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="289" Action="CREATE"><FB Name="byteStringNodeIdTest.localBytestringNumeric4" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="290" Action="CREATE"><FB Name="byteStringNodeIdTest.localBytestringNumeric5" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="291" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="292" Action="WRITE"><Connection Source="DINT#123" Destination="byteStringNodeIdTest.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="293" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="294" Action="WRITE"><Connection Source="DINT#456" Destination="byteStringNodeIdTest.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="295" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ__1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="296" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest.F_EQ__1.IN2" /></Request>
+WorkingServer;<Request ID="297" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="298" Action="WRITE"><Connection Source="DINT#789" Destination="byteStringNodeIdTest.F_EQ_2_1.IN2" /></Request>
+WorkingServer;<Request ID="299" Action="CREATE"><FB Name="byteStringNodeIdTest.F_OR_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="300" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="301" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest.F_EQ_5_1.IN2" /></Request>
+WorkingServer;<Request ID="302" Action="CREATE"><FB Name="byteStringNodeIdTest.F_OR_2" Type="F_OR" /></Request>
+WorkingServer;<Request ID="303" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="304" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest.F_EQ__1_1.IN2" /></Request>
+WorkingServer;<Request ID="305" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_5_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="306" Action="WRITE"><Connection Source="DINT#0" Destination="byteStringNodeIdTest.F_EQ_5_1_1.IN2" /></Request>
+WorkingServer;<Request ID="307" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_2_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="308" Action="WRITE"><Connection Source="DINT#654321" Destination="byteStringNodeIdTest.F_EQ_2_1_1.IN2" /></Request>
+WorkingServer;<Request ID="309" Action="CREATE"><FB Name="byteStringNodeIdTest.F_OR_2_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="310" Action="CREATE"><FB Name="byteStringNodeIdTest.F_OR_1_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="311" Action="CREATE"><FB Name="byteStringNodeIdTest.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="312" Action="WRITE"><Connection Source="DINT#123456" Destination="byteStringNodeIdTest.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="313" Action="CREATE"><FB Name="numericNodeIdTest.BOOL2BOOL_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="314" Action="CREATE"><FB Name="numericNodeIdTest.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="315" Action="CREATE"><FB Name="numericNodeIdTest.BOOL2BOOL_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="316" Action="CREATE"><FB Name="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="317" Action="CREATE"><FB Name="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="318" Action="CREATE"><FB Name="numericNodeIdTest.Writable1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="319" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/WithId,1:i=12345]" Destination="numericNodeIdTest.Writable1.ID" /></Request>
+WorkingServer;<Request ID="320" Action="CREATE"><FB Name="numericNodeIdTest.Writable2" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="321" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId,1:i=12346;/Objects/firstRead/NumericNodeId/folderTests/sameFolder/WithId1,1:i=12347]" Destination="numericNodeIdTest.Writable2.ID" /></Request>
+WorkingServer;<Request ID="322" Action="CREATE"><FB Name="numericNodeIdTest.Writable3" Type="SUBSCRIBE_2" /></Request>
+WorkingServer;<Request ID="323" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/firstRead/NumericNodeId/folderTests/folder1/WithId,1:i=12348;/Objects/firstRead/NumericNodeId/folderTests/folder2/WithId,1:i=12349]" Destination="numericNodeIdTest.Writable3.ID" /></Request>
+WorkingServer;<Request ID="324" Action="CREATE"><FB Name="numericNodeIdTest.localNumeric1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="325" Action="CREATE"><FB Name="numericNodeIdTest.localNumeric2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="326" Action="CREATE"><FB Name="numericNodeIdTest.localNumeric3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="327" Action="CREATE"><FB Name="numericNodeIdTest.localNumeric4" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="328" Action="CREATE"><FB Name="numericNodeIdTest.localNumeric5" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="329" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="330" Action="WRITE"><Connection Source="DINT#123" Destination="numericNodeIdTest.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="331" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="332" Action="WRITE"><Connection Source="DINT#456" Destination="numericNodeIdTest.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="333" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ__1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="334" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest.F_EQ__1.IN2" /></Request>
+WorkingServer;<Request ID="335" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_2_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="336" Action="WRITE"><Connection Source="DINT#789" Destination="numericNodeIdTest.F_EQ_2_1.IN2" /></Request>
+WorkingServer;<Request ID="337" Action="CREATE"><FB Name="numericNodeIdTest.F_OR_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="338" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_5_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="339" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest.F_EQ_5_1.IN2" /></Request>
+WorkingServer;<Request ID="340" Action="CREATE"><FB Name="numericNodeIdTest.F_OR_2" Type="F_OR" /></Request>
+WorkingServer;<Request ID="341" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ__1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="342" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest.F_EQ__1_1.IN2" /></Request>
+WorkingServer;<Request ID="343" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_5_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="344" Action="WRITE"><Connection Source="DINT#0" Destination="numericNodeIdTest.F_EQ_5_1_1.IN2" /></Request>
+WorkingServer;<Request ID="345" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_2_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="346" Action="WRITE"><Connection Source="DINT#654321" Destination="numericNodeIdTest.F_EQ_2_1_1.IN2" /></Request>
+WorkingServer;<Request ID="347" Action="CREATE"><FB Name="numericNodeIdTest.F_OR_2_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="348" Action="CREATE"><FB Name="numericNodeIdTest.F_OR_1_1" Type="F_OR" /></Request>
+WorkingServer;<Request ID="349" Action="CREATE"><FB Name="numericNodeIdTest.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="350" Action="WRITE"><Connection Source="DINT#123456" Destination="numericNodeIdTest.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="351" Action="CREATE"><FB Name="IsolatedCases.PUBLISH_1" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="352" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/IsolatedTests/WRITEVariable]" Destination="IsolatedCases.PUBLISH_1.ID" /></Request>
+WorkingServer;<Request ID="353" Action="CREATE"><FB Name="IsolatedCases.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="354" Action="WRITE"><Connection Source="DINT#123" Destination="IsolatedCases.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="355" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="356" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="357" Action="WRITE"><Connection Source="DINT#456" Destination="IsolatedCases.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="358" Action="CREATE"><FB Name="IsolatedCases.onlyReadVar" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="359" Action="CREATE"><FB Name="IsolatedCases.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="360" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/IsolatedTests/READVariable]" Destination="IsolatedCases.SUBSCRIBE_1.ID" /></Request>
+WorkingServer;<Request ID="361" Action="CREATE"><FB Name="IsolatedCases.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="362" Action="WRITE"><Connection Source="DINT#789" Destination="IsolatedCases.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="363" Action="CREATE"><FB Name="IsolatedCases.PUBLISH_1_1" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="364" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/noNewFolder]" Destination="IsolatedCases.PUBLISH_1_1.ID" /></Request>
+WorkingServer;<Request ID="365" Action="CREATE"><FB Name="IsolatedCases.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="366" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/noNewFolderMethod]" Destination="IsolatedCases.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="367" Action="CREATE"><FB Name="CreateObjects.deleteObject1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="368" Action="CREATE"><FB Name="CreateObjects.deleteObject2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="369" Action="CREATE"><FB Name="CreateObjects.createObject2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="370" Action="CREATE"><FB Name="CreateObjects.createObject3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="371" Action="CREATE"><FB Name="CreateObjects.createObject1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="372" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="373" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/created1/created2/created3]" Destination="CreateObjects.PUBLISH_1.ID" /></Request>
+WorkingServer;<Request ID="374" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="375" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/created1/created2]" Destination="CreateObjects.PUBLISH_1_1.ID" /></Request>
+WorkingServer;<Request ID="376" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_2" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="377" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=61;/Objects/created1]" Destination="CreateObjects.PUBLISH_1_1_2.ID" /></Request>
+WorkingServer;<Request ID="378" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="379" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Types/0:ObjectTypes/0:BaseObjectType/0:FolderType;/Objects/created1/created2]" Destination="CreateObjects.PUBLISH_1_1_1.ID" /></Request>
+WorkingServer;<Request ID="380" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1_1" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="381" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/0:Types/0:ObjectTypes/0:BaseObjectType/0:FolderType,0:i=61;/Objects/created1/created2/created3]" Destination="CreateObjects.PUBLISH_1_1_1_1.ID" /></Request>
+WorkingServer;<Request ID="382" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_1_1_1_1" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="383" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=2004;/Objects/created1/newServer]" Destination="CreateObjects.PUBLISH_1_1_1_1_1.ID" /></Request>
+WorkingServer;<Request ID="384" Action="CREATE"><FB Name="CreateObjects.createServer" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="385" Action="CREATE"><FB Name="CreateObjects.E_SWITCH" Type="E_SWITCH" /></Request>
+WorkingServer;<Request ID="386" Action="CREATE"><FB Name="CreateObjects.testObject" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="387" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,2:i=15001;/Objects/testObject1]" Destination="CreateObjects.testObject.ID" /></Request>
+WorkingServer;<Request ID="388" Action="CREATE"><FB Name="CreateObjects.testObject1Test" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="389" Action="CREATE"><FB Name="CreateObjects.testObject2Test" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="390" Action="CREATE"><FB Name="CreateObjects.testObject2" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="391" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Types/0:ObjectTypes/0:BaseObjectType/2:TestObject;/Objects/testObject2]" Destination="CreateObjects.testObject2.ID" /></Request>
+WorkingServer;<Request ID="392" Action="CREATE"><FB Name="CreateObjects.testMethod1" Type="SERVER_1" /></Request>
+WorkingServer;<Request ID="393" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod]" Destination="CreateObjects.testMethod1.ID" /></Request>
+WorkingServer;<Request ID="394" Action="CREATE"><FB Name="CreateObjects.DINT2DINT" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="395" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="396" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="397" Action="CREATE"><FB Name="CreateObjects.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="398" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="399" Action="CREATE"><FB Name="CreateObjects.objectMethod1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="400" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_2" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="401" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/testObject1/2:Variable1]" Destination="CreateObjects.PUBLISH_1_2.ID" /></Request>
+WorkingServer;<Request ID="402" Action="CREATE"><FB Name="CreateObjects.SUBSCRIBE_1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="403" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/testObject1/2:Variable2]" Destination="CreateObjects.SUBSCRIBE_1.ID" /></Request>
+WorkingServer;<Request ID="404" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="405" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="406" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="407" Action="CREATE"><FB Name="CreateObjects.ojectVar2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="408" Action="CREATE"><FB Name="CreateObjects.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="409" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="410" Action="CREATE"><FB Name="CreateObjects.ojectVar1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="411" Action="CREATE"><FB Name="CreateObjects.E_SWITCH_1" Type="E_SWITCH" /></Request>
+WorkingServer;<Request ID="412" Action="CREATE"><FB Name="CreateObjects.F_EQ_1_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="413" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_1_1.IN2" /></Request>
+WorkingServer;<Request ID="414" Action="CREATE"><FB Name="CreateObjects.PUBLISH_1_2_1" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="415" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/testObject2/2:Variable1]" Destination="CreateObjects.PUBLISH_1_2_1.ID" /></Request>
+WorkingServer;<Request ID="416" Action="CREATE"><FB Name="CreateObjects.ojectVar2_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="417" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="418" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_1_2.IN" /></Request>
+WorkingServer;<Request ID="419" Action="CREATE"><FB Name="CreateObjects.objectMethod1_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="420" Action="CREATE"><FB Name="CreateObjects.ojectVar1_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="421" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="422" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.DINT2DINT_1_2.IN" /></Request>
+WorkingServer;<Request ID="423" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="424" Action="CREATE"><FB Name="CreateObjects.F_EQ_2" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="425" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.F_EQ_2.IN2" /></Request>
+WorkingServer;<Request ID="426" Action="CREATE"><FB Name="CreateObjects.SUBSCRIBE_1_1" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="427" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/testObject2/2:Variable2]" Destination="CreateObjects.SUBSCRIBE_1_1.ID" /></Request>
+WorkingServer;<Request ID="428" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="429" Action="CREATE"><FB Name="CreateObjects.testMethod1_1" Type="SERVER_1" /></Request>
+WorkingServer;<Request ID="430" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject2/2:TestMethod]" Destination="CreateObjects.testMethod1_1.ID" /></Request>
+WorkingServer;<Request ID="431" Action="CREATE"><FB Name="CreateObjects.F_EQ_3" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="432" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_3.IN2" /></Request>
+WorkingServer;<Request ID="433" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="434" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_3.IN" /></Request>
+WorkingServer;<Request ID="435" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_3" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="436" Action="CREATE"><FB Name="CreateObjects.objectMethod1_2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="437" Action="CREATE"><FB Name="CreateObjects.testMethod1_2" Type="SERVER_1" /></Request>
+WorkingServer;<Request ID="438" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject1/2:TestMethod2]" Destination="CreateObjects.testMethod1_2.ID" /></Request>
+WorkingServer;<Request ID="439" Action="CREATE"><FB Name="CreateObjects.F_EQ_4" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="440" Action="WRITE"><Connection Source="DINT#456" Destination="CreateObjects.F_EQ_4.IN2" /></Request>
+WorkingServer;<Request ID="441" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_1_4" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="442" Action="WRITE"><Connection Source="DINT#123" Destination="CreateObjects.DINT2DINT_1_4.IN" /></Request>
+WorkingServer;<Request ID="443" Action="CREATE"><FB Name="CreateObjects.DINT2DINT_4" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="444" Action="CREATE"><FB Name="CreateObjects.objectMethod1_3" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="445" Action="CREATE"><FB Name="CreateObjects.testMethod1_3" Type="SERVER_1" /></Request>
+WorkingServer;<Request ID="446" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/testObject2/2:TestMethod2]" Destination="CreateObjects.testMethod1_3.ID" /></Request>
+WorkingServer;<Request ID="447" Action="CREATE"><FB Name="DirectRoot.rootRead" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="448" Action="WRITE"><Connection Source="opc_ua[READ;/1:readVar/]" Destination="DirectRoot.rootRead.ID" /></Request>
+WorkingServer;<Request ID="449" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="450" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="451" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRoot.BOOL2BOOL_2_1_1.IN" /></Request>
+WorkingServer;<Request ID="452" Action="CREATE"><FB Name="DirectRoot.directRootRead" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="453" Action="CREATE"><FB Name="DirectRoot.rootWrite" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="454" Action="WRITE"><Connection Source="opc_ua[WRITE;/1:writeVar]" Destination="DirectRoot.rootWrite.ID" /></Request>
+WorkingServer;<Request ID="455" Action="CREATE"><FB Name="DirectRoot.directRootWrite" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="456" Action="CREATE"><FB Name="DirectRoot.F_EQ" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="457" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRoot.F_EQ.IN2" /></Request>
+WorkingServer;<Request ID="458" Action="CREATE"><FB Name="DirectRoot.SERVER_0" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="459" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/1:method]" Destination="DirectRoot.SERVER_0.ID" /></Request>
+WorkingServer;<Request ID="460" Action="CREATE"><FB Name="DirectRoot.directRootMethod" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="461" Action="CREATE"><FB Name="DirectRoot.rootRead_2" Type="SUBSCRIBE_1" /></Request>
+WorkingServer;<Request ID="462" Action="WRITE"><Connection Source="opc_ua[READ;/1:folder2/readVar]" Destination="DirectRoot.rootRead_2.ID" /></Request>
+WorkingServer;<Request ID="463" Action="CREATE"><FB Name="DirectRoot.directRootRead2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="464" Action="CREATE"><FB Name="DirectRoot.rootWrite2" Type="PUBLISH_1" /></Request>
+WorkingServer;<Request ID="465" Action="WRITE"><Connection Source="opc_ua[WRITE;/1:folder2/writeVar]" Destination="DirectRoot.rootWrite2.ID" /></Request>
+WorkingServer;<Request ID="466" Action="CREATE"><FB Name="DirectRoot.SERVER_0_1" Type="SERVER_0" /></Request>
+WorkingServer;<Request ID="467" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/1:folder2/method]" Destination="DirectRoot.SERVER_0_1.ID" /></Request>
+WorkingServer;<Request ID="468" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_2" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="469" Action="CREATE"><FB Name="DirectRoot.directRootWrite2" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="470" Action="CREATE"><FB Name="DirectRoot.directRootMethod_1" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="471" Action="CREATE"><FB Name="DirectRoot.F_EQ_1" Type="F_EQ" /></Request>
+WorkingServer;<Request ID="472" Action="WRITE"><Connection Source="DINT#123" Destination="DirectRoot.F_EQ_1.IN2" /></Request>
+WorkingServer;<Request ID="473" Action="CREATE"><FB Name="DirectRoot.BOOL2BOOL_2_1_1_1" Type="DINT2DINT" /></Request>
+WorkingServer;<Request ID="474" Action="WRITE"><Connection Source="DINT#456" Destination="DirectRoot.BOOL2BOOL_2_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="475" Action="CREATE"><FB Name="DirectRoot.E_SWITCH" Type="E_SWITCH" /></Request>
+WorkingServer;<Request ID="476" Action="CREATE"><FB Name="DirectRoot.directRootObject" Type="TEST_CONDITION" /></Request>
+WorkingServer;<Request ID="477" Action="CREATE"><FB Name="DirectRoot.PUBLISH_1_1_2" Type="PUBLISH_0" /></Request>
+WorkingServer;<Request ID="478" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;,0:i=61;/created1]" Destination="DirectRoot.PUBLISH_1_1_2.ID" /></Request>
+WorkingServer;<Request ID="479" Action="CREATE"><Connection Source="folderTest.Writable1.INITO" Destination="numericNodeIdTest.Writable3.INIT" /></Request>
+WorkingServer;<Request ID="480" Action="CREATE"><Connection Source="folderTest.Writable2.INITO" Destination="folderTest.Writable1.INIT" /></Request>
+WorkingServer;<Request ID="481" Action="CREATE"><Connection Source="folderTest.Writable3.INITO" Destination="folderTest.Writable2.INIT" /></Request>
+WorkingServer;<Request ID="482" Action="CREATE"><Connection Source="folderTest.Writable1.IND" Destination="folderTest.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingServer;<Request ID="483" Action="CREATE"><Connection Source="folderTest.Writable2.IND" Destination="folderTest.BOOL2BOOL_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="484" Action="CREATE"><Connection Source="folderTest.Writable3.IND" Destination="folderTest.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="485" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_2_1.CNF" Destination="folderTest.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="486" Action="CREATE"><Connection Source="folderTest.F_EQ.CNF" Destination="folderTest.localReadFolder1.REQ" /></Request>
+WorkingServer;<Request ID="487" Action="CREATE"><Connection Source="folderTest.F_EQ_2_1.CNF" Destination="folderTest.F_EQ_5_1.REQ" /></Request>
+WorkingServer;<Request ID="488" Action="CREATE"><Connection Source="folderTest.F_EQ_2_1_1.CNF" Destination="folderTest.F_EQ_5_1_1.REQ" /></Request>
+WorkingServer;<Request ID="489" Action="CREATE"><Connection Source="folderTest.F_EQ_1.CNF" Destination="folderTest.F_EQ__1.REQ" /></Request>
+WorkingServer;<Request ID="490" Action="CREATE"><Connection Source="folderTest.F_EQ_1_1.CNF" Destination="folderTest.F_EQ__1_1.REQ" /></Request>
+WorkingServer;<Request ID="491" Action="CREATE"><Connection Source="folderTest.Writable2.IND" Destination="folderTest.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="492" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_2_1.CNF" Destination="folderTest.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="493" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_2_1.CNF" Destination="folderTest.F_EQ_2_1.REQ" /></Request>
+WorkingServer;<Request ID="494" Action="CREATE"><Connection Source="folderTest.F_EQ_5_1.CNF" Destination="folderTest.F_OR_2.REQ" /></Request>
+WorkingServer;<Request ID="495" Action="CREATE"><Connection Source="folderTest.F_EQ__1.CNF" Destination="folderTest.F_OR_1.REQ" /></Request>
+WorkingServer;<Request ID="496" Action="CREATE"><Connection Source="folderTest.F_OR_1.CNF" Destination="folderTest.localReadFolder2.REQ" /></Request>
+WorkingServer;<Request ID="497" Action="CREATE"><Connection Source="folderTest.F_OR_2.CNF" Destination="folderTest.localReadFolder3.REQ" /></Request>
+WorkingServer;<Request ID="498" Action="CREATE"><Connection Source="folderTest.Writable3.IND" Destination="folderTest.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="499" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="folderTest.F_EQ_2_1_1.REQ" /></Request>
+WorkingServer;<Request ID="500" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_2_1.CNF" Destination="folderTest.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="501" Action="CREATE"><Connection Source="folderTest.F_EQ_5_1_1.CNF" Destination="folderTest.F_OR_2_1.REQ" /></Request>
+WorkingServer;<Request ID="502" Action="CREATE"><Connection Source="folderTest.F_OR_2_1.CNF" Destination="folderTest.localReadFolder5.REQ" /></Request>
+WorkingServer;<Request ID="503" Action="CREATE"><Connection Source="folderTest.F_OR_1_1.CNF" Destination="folderTest.localReadFolder4.REQ" /></Request>
+WorkingServer;<Request ID="504" Action="CREATE"><Connection Source="folderTest.F_EQ__1_1.CNF" Destination="folderTest.F_OR_1_1.REQ" /></Request>
+WorkingServer;<Request ID="505" Action="CREATE"><Connection Source="folderTest.Writable1.RD_1" Destination="folderTest.BOOL2BOOL_2_1.IN" /></Request>
+WorkingServer;<Request ID="506" Action="CREATE"><Connection Source="folderTest.Writable3.RD_2" Destination="folderTest.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="507" Action="CREATE"><Connection Source="folderTest.Writable3.RD_1" Destination="folderTest.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="508" Action="CREATE"><Connection Source="folderTest.Writable2.RD_2" Destination="folderTest.BOOL2BOOL_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="509" Action="CREATE"><Connection Source="folderTest.Writable2.RD_1" Destination="folderTest.BOOL2BOOL_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="510" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_2_1.OUT" Destination="folderTest.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="511" Action="CREATE"><Connection Source="folderTest.F_EQ.OUT" Destination="folderTest.localReadFolder1.check" /></Request>
+WorkingServer;<Request ID="512" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_2_1.OUT" Destination="folderTest.F_EQ_2_1.IN1" /></Request>
+WorkingServer;<Request ID="513" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_2_1.OUT" Destination="folderTest.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="514" Action="CREATE"><Connection Source="folderTest.F_EQ_2_1.OUT" Destination="folderTest.F_OR_2.IN1" /></Request>
+WorkingServer;<Request ID="515" Action="CREATE"><Connection Source="folderTest.F_EQ__1.OUT" Destination="folderTest.F_OR_1.IN2" /></Request>
+WorkingServer;<Request ID="516" Action="CREATE"><Connection Source="folderTest.F_OR_2.OUT" Destination="folderTest.localReadFolder3.check" /></Request>
+WorkingServer;<Request ID="517" Action="CREATE"><Connection Source="folderTest.F_OR_1.OUT" Destination="folderTest.localReadFolder2.check" /></Request>
+WorkingServer;<Request ID="518" Action="CREATE"><Connection Source="folderTest.F_EQ_1.OUT" Destination="folderTest.F_OR_1.IN1" /></Request>
+WorkingServer;<Request ID="519" Action="CREATE"><Connection Source="folderTest.F_EQ_5_1.OUT" Destination="folderTest.F_OR_2.IN2" /></Request>
+WorkingServer;<Request ID="520" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_2_1.OUT" Destination="folderTest.F_EQ_5_1.IN1" /></Request>
+WorkingServer;<Request ID="521" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_2_1.OUT" Destination="folderTest.F_EQ__1.IN1" /></Request>
+WorkingServer;<Request ID="522" Action="CREATE"><Connection Source="folderTest.F_EQ_5_1_1.OUT" Destination="folderTest.F_OR_2_1.IN2" /></Request>
+WorkingServer;<Request ID="523" Action="CREATE"><Connection Source="folderTest.F_OR_1_1.OUT" Destination="folderTest.localReadFolder4.check" /></Request>
+WorkingServer;<Request ID="524" Action="CREATE"><Connection Source="folderTest.F_EQ_1_1.OUT" Destination="folderTest.F_OR_1_1.IN1" /></Request>
+WorkingServer;<Request ID="525" Action="CREATE"><Connection Source="folderTest.F_EQ_2_1_1.OUT" Destination="folderTest.F_OR_2_1.IN1" /></Request>
+WorkingServer;<Request ID="526" Action="CREATE"><Connection Source="folderTest.F_OR_2_1.OUT" Destination="folderTest.localReadFolder5.check" /></Request>
+WorkingServer;<Request ID="527" Action="CREATE"><Connection Source="folderTest.F_EQ__1_1.OUT" Destination="folderTest.F_OR_1_1.IN2" /></Request>
+WorkingServer;<Request ID="528" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="folderTest.F_EQ_5_1_1.IN1" /></Request>
+WorkingServer;<Request ID="529" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="folderTest.F_EQ_2_1_1.IN1" /></Request>
+WorkingServer;<Request ID="530" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="folderTest.F_EQ__1_1.IN1" /></Request>
+WorkingServer;<Request ID="531" Action="CREATE"><Connection Source="folderTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="folderTest.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="532" Action="CREATE"><Connection Source="HandleInitLocal.E_CYCLE.EO" Destination="HandleInitLocal.InitFinished.REQ" /></Request>
+WorkingServer;<Request ID="533" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.IND" Destination="HandleInitLocal.E_CYCLE.STOP" /></Request>
+WorkingServer;<Request ID="534" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.CNF" Destination="HandleInitLocal.E_DEMUX_2.EI" /></Request>
+WorkingServer;<Request ID="535" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.INITO" Destination="HandleInitLocal.InitFinished.INIT" /></Request>
+WorkingServer;<Request ID="536" Action="CREATE"><Connection Source="HandleInitLocal.InitFinished.INITO" Destination="HandleInitLocal.F_BOOL_TO_UINT.REQ" /></Request>
+WorkingServer;<Request ID="537" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO2" Destination="HandleInitLocal.E_CYCLE.START" /></Request>
+WorkingServer;<Request ID="538" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO1" Destination="HandleInitLocal.STEST_END.REQ" /></Request>
+WorkingServer;<Request ID="539" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.OUT" Destination="HandleInitLocal.E_DEMUX_2.K" /></Request>
+WorkingServer;<Request ID="540" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.INIT" /></Request>
+WorkingServer;<Request ID="541" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.INIT" /></Request>
+WorkingServer;<Request ID="542" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.INIT" /></Request>
+WorkingServer;<Request ID="543" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="544" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="545" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="546" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.RSP" /></Request>
+WorkingServer;<Request ID="547" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.IND" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.REQ" /></Request>
+WorkingServer;<Request ID="548" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="549" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="550" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.REQ" /></Request>
+WorkingServer;<Request ID="551" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.REQ" /></Request>
+WorkingServer;<Request ID="552" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.REQ" /></Request>
+WorkingServer;<Request ID="553" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="554" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="555" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.REQ" /></Request>
+WorkingServer;<Request ID="556" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="557" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RSP" /></Request>
+WorkingServer;<Request ID="558" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.IND" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.REQ" /></Request>
+WorkingServer;<Request ID="559" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.REQ" /></Request>
+WorkingServer;<Request ID="560" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.REQ" /></Request>
+WorkingServer;<Request ID="561" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.REQ" /></Request>
+WorkingServer;<Request ID="562" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="563" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.REQ" /></Request>
+WorkingServer;<Request ID="564" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.REQ" /></Request>
+WorkingServer;<Request ID="565" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.REQ" /></Request>
+WorkingServer;<Request ID="566" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="567" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.REQ" /></Request>
+WorkingServer;<Request ID="568" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.REQ" /></Request>
+WorkingServer;<Request ID="569" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.CNF" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.REQ" /></Request>
+WorkingServer;<Request ID="570" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.CNF" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RSP" /></Request>
+WorkingServer;<Request ID="571" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.IND" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY.START" /></Request>
+WorkingServer;<Request ID="572" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.E_DELAY.EO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.REQ" /></Request>
+WorkingServer;<Request ID="573" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.IND" Destination="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.START" /></Request>
+WorkingServer;<Request ID="574" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.E_DELAY_1.EO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.REQ" /></Request>
+WorkingServer;<Request ID="575" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_2" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="576" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_1" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.IN" /></Request>
+WorkingServer;<Request ID="577" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_0.check" /></Request>
+WorkingServer;<Request ID="578" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_3" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.IN" /></Request>
+WorkingServer;<Request ID="579" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_2" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="580" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_0.check" /></Request>
+WorkingServer;<Request ID="581" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.RD_1" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="582" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.RD_3" Destination="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.IN" /></Request>
+WorkingServer;<Request ID="583" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_0.check" /></Request>
+WorkingServer;<Request ID="584" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.SD_1" /></Request>
+WorkingServer;<Request ID="585" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.QO" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_1_0_0.check" /></Request>
+WorkingServer;<Request ID="586" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_3.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.SD_2" /></Request>
+WorkingServer;<Request ID="587" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.SD_1" /></Request>
+WorkingServer;<Request ID="588" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_1.check" /></Request>
+WorkingServer;<Request ID="589" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="590" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_3.check" /></Request>
+WorkingServer;<Request ID="591" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_0_3_2.check" /></Request>
+WorkingServer;<Request ID="592" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="593" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="594" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_2.check" /></Request>
+WorkingServer;<Request ID="595" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_1.check" /></Request>
+WorkingServer;<Request ID="596" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_2.IN1" /></Request>
+WorkingServer;<Request ID="597" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_2.IN1" /></Request>
+WorkingServer;<Request ID="598" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.IN1" /></Request>
+WorkingServer;<Request ID="599" Action="CREATE"><Connection Source="LocaMethods.MethodOnlyBrowseName.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodOnlyBrowseName.LocalMethodBrowse_2_3_3.check" /></Request>
+WorkingServer;<Request ID="600" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.INIT" /></Request>
+WorkingServer;<Request ID="601" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.INIT" /></Request>
+WorkingServer;<Request ID="602" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.INIT" /></Request>
+WorkingServer;<Request ID="603" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="604" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="605" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="606" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.RSP" /></Request>
+WorkingServer;<Request ID="607" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.REQ" /></Request>
+WorkingServer;<Request ID="608" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="609" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="610" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.REQ" /></Request>
+WorkingServer;<Request ID="611" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.REQ" /></Request>
+WorkingServer;<Request ID="612" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.REQ" /></Request>
+WorkingServer;<Request ID="613" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="614" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="615" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.REQ" /></Request>
+WorkingServer;<Request ID="616" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="617" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.RSP" /></Request>
+WorkingServer;<Request ID="618" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.REQ" /></Request>
+WorkingServer;<Request ID="619" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.REQ" /></Request>
+WorkingServer;<Request ID="620" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.REQ" /></Request>
+WorkingServer;<Request ID="621" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.REQ" /></Request>
+WorkingServer;<Request ID="622" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="623" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.REQ" /></Request>
+WorkingServer;<Request ID="624" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.REQ" /></Request>
+WorkingServer;<Request ID="625" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+WorkingServer;<Request ID="626" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="627" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.REQ" /></Request>
+WorkingServer;<Request ID="628" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_2.REQ" /></Request>
+WorkingServer;<Request ID="629" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_3.REQ" /></Request>
+WorkingServer;<Request ID="630" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.RSP" /></Request>
+WorkingServer;<Request ID="631" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.IND" Destination="LocaMethods.MethodNumericNodeId.E_DELAY.START" /></Request>
+WorkingServer;<Request ID="632" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.E_DELAY.EO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.REQ" /></Request>
+WorkingServer;<Request ID="633" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodNumericNodeId.E_DELAY_1.START" /></Request>
+WorkingServer;<Request ID="634" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.REQ" /></Request>
+WorkingServer;<Request ID="635" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="636" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.IN" /></Request>
+WorkingServer;<Request ID="637" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_0.check" /></Request>
+WorkingServer;<Request ID="638" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.IN" /></Request>
+WorkingServer;<Request ID="639" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="640" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_0.check" /></Request>
+WorkingServer;<Request ID="641" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="642" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.IN" /></Request>
+WorkingServer;<Request ID="643" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_0.check" /></Request>
+WorkingServer;<Request ID="644" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.SD_1" /></Request>
+WorkingServer;<Request ID="645" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_1_0_0.check" /></Request>
+WorkingServer;<Request ID="646" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.SD_2" /></Request>
+WorkingServer;<Request ID="647" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.SD_1" /></Request>
+WorkingServer;<Request ID="648" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_1.check" /></Request>
+WorkingServer;<Request ID="649" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="650" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_3.check" /></Request>
+WorkingServer;<Request ID="651" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_0_3_2.check" /></Request>
+WorkingServer;<Request ID="652" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="653" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="654" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_2.check" /></Request>
+WorkingServer;<Request ID="655" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_1.check" /></Request>
+WorkingServer;<Request ID="656" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_2.IN1" /></Request>
+WorkingServer;<Request ID="657" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_2.IN1" /></Request>
+WorkingServer;<Request ID="658" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.IN1" /></Request>
+WorkingServer;<Request ID="659" Action="CREATE"><Connection Source="LocaMethods.MethodNumericNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodNumericNodeId.LocalNumeric_2_3_3.check" /></Request>
+WorkingServer;<Request ID="660" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.INIT" /></Request>
+WorkingServer;<Request ID="661" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.INIT" /></Request>
+WorkingServer;<Request ID="662" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.INIT" /></Request>
+WorkingServer;<Request ID="663" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_0.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="664" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="665" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_1_0_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="666" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.RSP" /></Request>
+WorkingServer;<Request ID="667" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_0.REQ" /></Request>
+WorkingServer;<Request ID="668" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="669" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="670" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_1.REQ" /></Request>
+WorkingServer;<Request ID="671" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_2.REQ" /></Request>
+WorkingServer;<Request ID="672" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_3.REQ" /></Request>
+WorkingServer;<Request ID="673" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="674" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="675" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.REQ" /></Request>
+WorkingServer;<Request ID="676" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="677" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_0_3_3.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.RSP" /></Request>
+WorkingServer;<Request ID="678" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_0.REQ" /></Request>
+WorkingServer;<Request ID="679" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_0.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.REQ" /></Request>
+WorkingServer;<Request ID="680" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.REQ" /></Request>
+WorkingServer;<Request ID="681" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_1.REQ" /></Request>
+WorkingServer;<Request ID="682" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="683" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.REQ" /></Request>
+WorkingServer;<Request ID="684" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_2.REQ" /></Request>
+WorkingServer;<Request ID="685" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+WorkingServer;<Request ID="686" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="687" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_3.REQ" /></Request>
+WorkingServer;<Request ID="688" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.LocalString_2_3_3.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_2.REQ" /></Request>
+WorkingServer;<Request ID="689" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_3.REQ" /></Request>
+WorkingServer;<Request ID="690" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.RSP" /></Request>
+WorkingServer;<Request ID="691" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.IND" Destination="LocaMethods.MethodStringNodeId.E_DELAY_1.START" /></Request>
+WorkingServer;<Request ID="692" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_0.REQ" /></Request>
+WorkingServer;<Request ID="693" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodStringNodeId.E_DELAY.START" /></Request>
+WorkingServer;<Request ID="694" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.E_DELAY.EO" Destination="LocaMethods.MethodStringNodeId.LocalString_1_0_0.REQ" /></Request>
+WorkingServer;<Request ID="695" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="696" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.IN" /></Request>
+WorkingServer;<Request ID="697" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_0.check" /></Request>
+WorkingServer;<Request ID="698" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.IN" /></Request>
+WorkingServer;<Request ID="699" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="700" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_0.check" /></Request>
+WorkingServer;<Request ID="701" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="702" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+WorkingServer;<Request ID="703" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_0.check" /></Request>
+WorkingServer;<Request ID="704" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.SD_1" /></Request>
+WorkingServer;<Request ID="705" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodStringNodeId.LocalString_1_0_0.check" /></Request>
+WorkingServer;<Request ID="706" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.SD_2" /></Request>
+WorkingServer;<Request ID="707" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.SD_1" /></Request>
+WorkingServer;<Request ID="708" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_1.check" /></Request>
+WorkingServer;<Request ID="709" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="710" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_3.check" /></Request>
+WorkingServer;<Request ID="711" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_0_3_2.check" /></Request>
+WorkingServer;<Request ID="712" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="713" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="714" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_2.check" /></Request>
+WorkingServer;<Request ID="715" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_1.check" /></Request>
+WorkingServer;<Request ID="716" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_2.IN1" /></Request>
+WorkingServer;<Request ID="717" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_2.IN1" /></Request>
+WorkingServer;<Request ID="718" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.IN1" /></Request>
+WorkingServer;<Request ID="719" Action="CREATE"><Connection Source="LocaMethods.MethodStringNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodStringNodeId.LocalString_2_3_3.check" /></Request>
+WorkingServer;<Request ID="720" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.INIT" /></Request>
+WorkingServer;<Request ID="721" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.INIT" /></Request>
+WorkingServer;<Request ID="722" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.INITO" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.INIT" /></Request>
+WorkingServer;<Request ID="723" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="724" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.INITO" Destination="IsolatedCases.SUBSCRIBE_1.INIT" /></Request>
+WorkingServer;<Request ID="725" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="726" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.RSP" /></Request>
+WorkingServer;<Request ID="727" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.IND" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.REQ" /></Request>
+WorkingServer;<Request ID="728" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="729" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="730" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.REQ" /></Request>
+WorkingServer;<Request ID="731" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.REQ" /></Request>
+WorkingServer;<Request ID="732" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.REQ" /></Request>
+WorkingServer;<Request ID="733" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="734" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="735" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.REQ" /></Request>
+WorkingServer;<Request ID="736" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="737" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RSP" /></Request>
+WorkingServer;<Request ID="738" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.IND" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.REQ" /></Request>
+WorkingServer;<Request ID="739" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.REQ" /></Request>
+WorkingServer;<Request ID="740" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.REQ" /></Request>
+WorkingServer;<Request ID="741" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.REQ" /></Request>
+WorkingServer;<Request ID="742" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="743" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.REQ" /></Request>
+WorkingServer;<Request ID="744" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.REQ" /></Request>
+WorkingServer;<Request ID="745" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.REQ" /></Request>
+WorkingServer;<Request ID="746" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="747" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.CNF" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.REQ" /></Request>
+WorkingServer;<Request ID="748" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.REQ" /></Request>
+WorkingServer;<Request ID="749" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.CNF" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.REQ" /></Request>
+WorkingServer;<Request ID="750" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.CNF" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RSP" /></Request>
+WorkingServer;<Request ID="751" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.IND" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY_1.START" /></Request>
+WorkingServer;<Request ID="752" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.E_DELAY_1.EO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.REQ" /></Request>
+WorkingServer;<Request ID="753" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.IND" Destination="LocaMethods.MethodBytestringNodeId.E_DELAY.START" /></Request>
+WorkingServer;<Request ID="754" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.E_DELAY.EO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.REQ" /></Request>
+WorkingServer;<Request ID="755" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_2" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="756" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_1" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.IN" /></Request>
+WorkingServer;<Request ID="757" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_0.check" /></Request>
+WorkingServer;<Request ID="758" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_3" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.IN" /></Request>
+WorkingServer;<Request ID="759" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_2" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.IN" /></Request>
+WorkingServer;<Request ID="760" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_0.check" /></Request>
+WorkingServer;<Request ID="761" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_0_3.RD_1" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.IN" /></Request>
+WorkingServer;<Request ID="762" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.RD_3" Destination="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.IN" /></Request>
+WorkingServer;<Request ID="763" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_2_3.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_0.check" /></Request>
+WorkingServer;<Request ID="764" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.SD_1" /></Request>
+WorkingServer;<Request ID="765" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.SERVER_1_0.QO" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_1_0_0.check" /></Request>
+WorkingServer;<Request ID="766" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_3.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.SD_2" /></Request>
+WorkingServer;<Request ID="767" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.SD_1" /></Request>
+WorkingServer;<Request ID="768" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_1.check" /></Request>
+WorkingServer;<Request ID="769" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="770" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_3.check" /></Request>
+WorkingServer;<Request ID="771" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_0_3_2.check" /></Request>
+WorkingServer;<Request ID="772" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="773" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="774" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_2.check" /></Request>
+WorkingServer;<Request ID="775" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_1.check" /></Request>
+WorkingServer;<Request ID="776" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_2.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_2.IN1" /></Request>
+WorkingServer;<Request ID="777" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_2.IN1" /></Request>
+WorkingServer;<Request ID="778" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.DINT2DINT_1_3_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.IN1" /></Request>
+WorkingServer;<Request ID="779" Action="CREATE"><Connection Source="LocaMethods.MethodBytestringNodeId.F_EQ_1_1_1.OUT" Destination="LocaMethods.MethodBytestringNodeId.LocalByteString_2_3_3.check" /></Request>
+WorkingServer;<Request ID="780" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.INITO" Destination="byteStringNodeIdTest.Writable3.INIT" /></Request>
+WorkingServer;<Request ID="781" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.INITO" Destination="stringNodeIdTest.Writable1.INIT" /></Request>
+WorkingServer;<Request ID="782" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.INITO" Destination="stringNodeIdTest.Writable2.INIT" /></Request>
+WorkingServer;<Request ID="783" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.IND" Destination="stringNodeIdTest.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingServer;<Request ID="784" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="785" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="786" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_2_1.CNF" Destination="stringNodeIdTest.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="787" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ.CNF" Destination="stringNodeIdTest.localString1.REQ" /></Request>
+WorkingServer;<Request ID="788" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1.CNF" Destination="stringNodeIdTest.F_EQ_5_1.REQ" /></Request>
+WorkingServer;<Request ID="789" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1.CNF" Destination="stringNodeIdTest.F_EQ__1.REQ" /></Request>
+WorkingServer;<Request ID="790" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1_1.CNF" Destination="stringNodeIdTest.F_EQ__1_1.REQ" /></Request>
+WorkingServer;<Request ID="791" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1_1.CNF" Destination="stringNodeIdTest.F_EQ_5_1_1.REQ" /></Request>
+WorkingServer;<Request ID="792" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="793" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="794" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1.CNF" Destination="stringNodeIdTest.F_OR_1.REQ" /></Request>
+WorkingServer;<Request ID="795" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1.CNF" Destination="stringNodeIdTest.F_OR_2.REQ" /></Request>
+WorkingServer;<Request ID="796" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2.CNF" Destination="stringNodeIdTest.localString3.REQ" /></Request>
+WorkingServer;<Request ID="797" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1.CNF" Destination="stringNodeIdTest.localString2.REQ" /></Request>
+WorkingServer;<Request ID="798" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_2_1.REQ" /></Request>
+WorkingServer;<Request ID="799" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.IND" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="800" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.CNF" Destination="stringNodeIdTest.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="801" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1_1.CNF" Destination="stringNodeIdTest.F_OR_1_1.REQ" /></Request>
+WorkingServer;<Request ID="802" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1_1.CNF" Destination="stringNodeIdTest.localString4.REQ" /></Request>
+WorkingServer;<Request ID="803" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="stringNodeIdTest.F_EQ_2_1_1.REQ" /></Request>
+WorkingServer;<Request ID="804" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1_1.CNF" Destination="stringNodeIdTest.F_OR_2_1.REQ" /></Request>
+WorkingServer;<Request ID="805" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2_1.CNF" Destination="stringNodeIdTest.localString5.REQ" /></Request>
+WorkingServer;<Request ID="806" Action="CREATE"><Connection Source="stringNodeIdTest.Writable1.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_2_1.IN" /></Request>
+WorkingServer;<Request ID="807" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.RD_2" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="808" Action="CREATE"><Connection Source="stringNodeIdTest.Writable3.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="809" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.RD_2" Destination="stringNodeIdTest.BOOL2BOOL_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="810" Action="CREATE"><Connection Source="stringNodeIdTest.Writable2.RD_1" Destination="stringNodeIdTest.BOOL2BOOL_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="811" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_2_1.OUT" Destination="stringNodeIdTest.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="812" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ.OUT" Destination="stringNodeIdTest.localString1.check" /></Request>
+WorkingServer;<Request ID="813" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1.OUT" Destination="stringNodeIdTest.F_OR_2.IN2" /></Request>
+WorkingServer;<Request ID="814" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1.OUT" Destination="stringNodeIdTest.F_OR_1.IN1" /></Request>
+WorkingServer;<Request ID="815" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1.OUT" Destination="stringNodeIdTest.F_OR_2.IN1" /></Request>
+WorkingServer;<Request ID="816" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1.OUT" Destination="stringNodeIdTest.F_OR_1.IN2" /></Request>
+WorkingServer;<Request ID="817" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="818" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ__1.IN1" /></Request>
+WorkingServer;<Request ID="819" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_2_1.IN1" /></Request>
+WorkingServer;<Request ID="820" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_5_1.IN1" /></Request>
+WorkingServer;<Request ID="821" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2.OUT" Destination="stringNodeIdTest.localString3.check" /></Request>
+WorkingServer;<Request ID="822" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1.OUT" Destination="stringNodeIdTest.localString2.check" /></Request>
+WorkingServer;<Request ID="823" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ__1_1.OUT" Destination="stringNodeIdTest.F_OR_1_1.IN2" /></Request>
+WorkingServer;<Request ID="824" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_1_1.OUT" Destination="stringNodeIdTest.F_OR_1_1.IN1" /></Request>
+WorkingServer;<Request ID="825" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_2_1_1.OUT" Destination="stringNodeIdTest.F_OR_2_1.IN1" /></Request>
+WorkingServer;<Request ID="826" Action="CREATE"><Connection Source="stringNodeIdTest.F_EQ_5_1_1.OUT" Destination="stringNodeIdTest.F_OR_2_1.IN2" /></Request>
+WorkingServer;<Request ID="827" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="828" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="stringNodeIdTest.F_EQ__1_1.IN1" /></Request>
+WorkingServer;<Request ID="829" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTest.F_EQ_2_1_1.IN1" /></Request>
+WorkingServer;<Request ID="830" Action="CREATE"><Connection Source="stringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="stringNodeIdTest.F_EQ_5_1_1.IN1" /></Request>
+WorkingServer;<Request ID="831" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_1_1.OUT" Destination="stringNodeIdTest.localString4.check" /></Request>
+WorkingServer;<Request ID="832" Action="CREATE"><Connection Source="stringNodeIdTest.F_OR_2_1.OUT" Destination="stringNodeIdTest.localString5.check" /></Request>
+WorkingServer;<Request ID="833" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable1.INITO" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="834" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable2.INITO" Destination="byteStringNodeIdTest.Writable1.INIT" /></Request>
+WorkingServer;<Request ID="835" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable3.INITO" Destination="byteStringNodeIdTest.Writable2.INIT" /></Request>
+WorkingServer;<Request ID="836" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable1.IND" Destination="byteStringNodeIdTest.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingServer;<Request ID="837" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable2.IND" Destination="byteStringNodeIdTest.BOOL2BOOL_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="838" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable3.IND" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="839" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_2_1.CNF" Destination="byteStringNodeIdTest.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="840" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ.CNF" Destination="byteStringNodeIdTest.localBytestringNumeric1.REQ" /></Request>
+WorkingServer;<Request ID="841" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_2_1.CNF" Destination="byteStringNodeIdTest.F_EQ_5_1.REQ" /></Request>
+WorkingServer;<Request ID="842" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_1.CNF" Destination="byteStringNodeIdTest.F_EQ__1.REQ" /></Request>
+WorkingServer;<Request ID="843" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable2.IND" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="844" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1.CNF" Destination="byteStringNodeIdTest.F_EQ_2_1.REQ" /></Request>
+WorkingServer;<Request ID="845" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_5_1.CNF" Destination="byteStringNodeIdTest.F_OR_2.REQ" /></Request>
+WorkingServer;<Request ID="846" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_2.CNF" Destination="byteStringNodeIdTest.localBytestringNumeric3.REQ" /></Request>
+WorkingServer;<Request ID="847" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_2_1.CNF" Destination="byteStringNodeIdTest.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="848" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ__1.CNF" Destination="byteStringNodeIdTest.F_OR_1.REQ" /></Request>
+WorkingServer;<Request ID="849" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_1.CNF" Destination="byteStringNodeIdTest.localBytestringNumeric2.REQ" /></Request>
+WorkingServer;<Request ID="850" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_5_1_1.CNF" Destination="byteStringNodeIdTest.F_OR_2_1.REQ" /></Request>
+WorkingServer;<Request ID="851" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ__1_1.CNF" Destination="byteStringNodeIdTest.F_OR_1_1.REQ" /></Request>
+WorkingServer;<Request ID="852" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_1_1.CNF" Destination="byteStringNodeIdTest.F_EQ__1_1.REQ" /></Request>
+WorkingServer;<Request ID="853" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_2_1_1.CNF" Destination="byteStringNodeIdTest.F_EQ_5_1_1.REQ" /></Request>
+WorkingServer;<Request ID="854" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable3.IND" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="855" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_1_1_2_1.CNF" Destination="byteStringNodeIdTest.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="856" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="byteStringNodeIdTest.F_EQ_2_1_1.REQ" /></Request>
+WorkingServer;<Request ID="857" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_1_1.CNF" Destination="byteStringNodeIdTest.localBytestringNumeric4.REQ" /></Request>
+WorkingServer;<Request ID="858" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_2_1.CNF" Destination="byteStringNodeIdTest.localBytestringNumeric5.REQ" /></Request>
+WorkingServer;<Request ID="859" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable1.RD_1" Destination="byteStringNodeIdTest.BOOL2BOOL_2_1.IN" /></Request>
+WorkingServer;<Request ID="860" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable3.RD_2" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="861" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable3.RD_1" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="862" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable2.RD_2" Destination="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="863" Action="CREATE"><Connection Source="byteStringNodeIdTest.Writable2.RD_1" Destination="byteStringNodeIdTest.BOOL2BOOL_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="864" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_2_1.OUT" Destination="byteStringNodeIdTest.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="865" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ.OUT" Destination="byteStringNodeIdTest.localBytestringNumeric1.check" /></Request>
+WorkingServer;<Request ID="866" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_5_1.OUT" Destination="byteStringNodeIdTest.F_OR_2.IN2" /></Request>
+WorkingServer;<Request ID="867" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_1.OUT" Destination="byteStringNodeIdTest.F_OR_1.IN1" /></Request>
+WorkingServer;<Request ID="868" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_2_1.OUT" Destination="byteStringNodeIdTest.F_OR_2.IN1" /></Request>
+WorkingServer;<Request ID="869" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ__1.OUT" Destination="byteStringNodeIdTest.F_OR_1.IN2" /></Request>
+WorkingServer;<Request ID="870" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="byteStringNodeIdTest.F_EQ__1.IN1" /></Request>
+WorkingServer;<Request ID="871" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="byteStringNodeIdTest.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="872" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="byteStringNodeIdTest.F_EQ_2_1.IN1" /></Request>
+WorkingServer;<Request ID="873" Action="CREATE"><Connection Source="byteStringNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="byteStringNodeIdTest.F_EQ_5_1.IN1" /></Request>
+WorkingServer;<Request ID="874" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_1.OUT" Destination="byteStringNodeIdTest.localBytestringNumeric2.check" /></Request>
+WorkingServer;<Request ID="875" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_2.OUT" Destination="byteStringNodeIdTest.localBytestringNumeric3.check" /></Request>
+WorkingServer;<Request ID="876" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ__1_1.OUT" Destination="byteStringNodeIdTest.F_OR_1_1.IN2" /></Request>
+WorkingServer;<Request ID="877" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_1_1.OUT" Destination="byteStringNodeIdTest.F_OR_1_1.IN1" /></Request>
+WorkingServer;<Request ID="878" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_2_1_1.OUT" Destination="byteStringNodeIdTest.F_OR_2_1.IN1" /></Request>
+WorkingServer;<Request ID="879" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_EQ_5_1_1.OUT" Destination="byteStringNodeIdTest.F_OR_2_1.IN2" /></Request>
+WorkingServer;<Request ID="880" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_1_1.OUT" Destination="byteStringNodeIdTest.localBytestringNumeric4.check" /></Request>
+WorkingServer;<Request ID="881" Action="CREATE"><Connection Source="byteStringNodeIdTest.F_OR_2_1.OUT" Destination="byteStringNodeIdTest.localBytestringNumeric5.check" /></Request>
+WorkingServer;<Request ID="882" Action="CREATE"><Connection Source="numericNodeIdTest.Writable1.INITO" Destination="stringNodeIdTest.Writable3.INIT" /></Request>
+WorkingServer;<Request ID="883" Action="CREATE"><Connection Source="numericNodeIdTest.Writable2.INITO" Destination="numericNodeIdTest.Writable1.INIT" /></Request>
+WorkingServer;<Request ID="884" Action="CREATE"><Connection Source="numericNodeIdTest.Writable3.INITO" Destination="numericNodeIdTest.Writable2.INIT" /></Request>
+WorkingServer;<Request ID="885" Action="CREATE"><Connection Source="numericNodeIdTest.Writable1.IND" Destination="numericNodeIdTest.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingServer;<Request ID="886" Action="CREATE"><Connection Source="numericNodeIdTest.Writable2.IND" Destination="numericNodeIdTest.BOOL2BOOL_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="887" Action="CREATE"><Connection Source="numericNodeIdTest.Writable3.IND" Destination="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="888" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_2_1.CNF" Destination="numericNodeIdTest.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="889" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ.CNF" Destination="numericNodeIdTest.localNumeric1.REQ" /></Request>
+WorkingServer;<Request ID="890" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_2_1.CNF" Destination="numericNodeIdTest.F_EQ_5_1.REQ" /></Request>
+WorkingServer;<Request ID="891" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_1.CNF" Destination="numericNodeIdTest.F_EQ__1.REQ" /></Request>
+WorkingServer;<Request ID="892" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_2_1_1.CNF" Destination="numericNodeIdTest.F_EQ_5_1_1.REQ" /></Request>
+WorkingServer;<Request ID="893" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_1_1.CNF" Destination="numericNodeIdTest.F_EQ__1_1.REQ" /></Request>
+WorkingServer;<Request ID="894" Action="CREATE"><Connection Source="numericNodeIdTest.Writable2.IND" Destination="numericNodeIdTest.BOOL2BOOL_1_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="895" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_2.CNF" Destination="numericNodeIdTest.localNumeric3.REQ" /></Request>
+WorkingServer;<Request ID="896" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_5_1.CNF" Destination="numericNodeIdTest.F_OR_2.REQ" /></Request>
+WorkingServer;<Request ID="897" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_1.CNF" Destination="numericNodeIdTest.localNumeric2.REQ" /></Request>
+WorkingServer;<Request ID="898" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ__1.CNF" Destination="numericNodeIdTest.F_OR_1.REQ" /></Request>
+WorkingServer;<Request ID="899" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_2_1.CNF" Destination="numericNodeIdTest.F_EQ_2_1.REQ" /></Request>
+WorkingServer;<Request ID="900" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_2_1.CNF" Destination="numericNodeIdTest.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="901" Action="CREATE"><Connection Source="numericNodeIdTest.Writable3.IND" Destination="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="902" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.CNF" Destination="numericNodeIdTest.F_EQ_2_1_1.REQ" /></Request>
+WorkingServer;<Request ID="903" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1.CNF" Destination="numericNodeIdTest.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="904" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ__1_1.CNF" Destination="numericNodeIdTest.F_OR_1_1.REQ" /></Request>
+WorkingServer;<Request ID="905" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_1_1.CNF" Destination="numericNodeIdTest.localNumeric4.REQ" /></Request>
+WorkingServer;<Request ID="906" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_2_1.CNF" Destination="numericNodeIdTest.localNumeric5.REQ" /></Request>
+WorkingServer;<Request ID="907" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_5_1_1.CNF" Destination="numericNodeIdTest.F_OR_2_1.REQ" /></Request>
+WorkingServer;<Request ID="908" Action="CREATE"><Connection Source="numericNodeIdTest.Writable1.RD_1" Destination="numericNodeIdTest.BOOL2BOOL_2_1.IN" /></Request>
+WorkingServer;<Request ID="909" Action="CREATE"><Connection Source="numericNodeIdTest.Writable3.RD_2" Destination="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="910" Action="CREATE"><Connection Source="numericNodeIdTest.Writable3.RD_1" Destination="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="911" Action="CREATE"><Connection Source="numericNodeIdTest.Writable2.RD_2" Destination="numericNodeIdTest.BOOL2BOOL_1_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="912" Action="CREATE"><Connection Source="numericNodeIdTest.Writable2.RD_1" Destination="numericNodeIdTest.BOOL2BOOL_1_2_1.IN" /></Request>
+WorkingServer;<Request ID="913" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_2_1.OUT" Destination="numericNodeIdTest.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="914" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ.OUT" Destination="numericNodeIdTest.localNumeric1.check" /></Request>
+WorkingServer;<Request ID="915" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_5_1.OUT" Destination="numericNodeIdTest.F_OR_2.IN2" /></Request>
+WorkingServer;<Request ID="916" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_1.OUT" Destination="numericNodeIdTest.F_OR_1.IN1" /></Request>
+WorkingServer;<Request ID="917" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_2_1.OUT" Destination="numericNodeIdTest.F_OR_2.IN1" /></Request>
+WorkingServer;<Request ID="918" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ__1.OUT" Destination="numericNodeIdTest.F_OR_1.IN2" /></Request>
+WorkingServer;<Request ID="919" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ__1.IN1" /></Request>
+WorkingServer;<Request ID="920" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="921" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ_2_1.IN1" /></Request>
+WorkingServer;<Request ID="922" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ_5_1.IN1" /></Request>
+WorkingServer;<Request ID="923" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_1.OUT" Destination="numericNodeIdTest.localNumeric2.check" /></Request>
+WorkingServer;<Request ID="924" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_2.OUT" Destination="numericNodeIdTest.localNumeric3.check" /></Request>
+WorkingServer;<Request ID="925" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ__1_1.OUT" Destination="numericNodeIdTest.F_OR_1_1.IN2" /></Request>
+WorkingServer;<Request ID="926" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_1_1.OUT" Destination="numericNodeIdTest.F_OR_1_1.IN1" /></Request>
+WorkingServer;<Request ID="927" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_2_1_1.OUT" Destination="numericNodeIdTest.F_OR_2_1.IN1" /></Request>
+WorkingServer;<Request ID="928" Action="CREATE"><Connection Source="numericNodeIdTest.F_EQ_5_1_1.OUT" Destination="numericNodeIdTest.F_OR_2_1.IN2" /></Request>
+WorkingServer;<Request ID="929" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_1_1.OUT" Destination="numericNodeIdTest.localNumeric4.check" /></Request>
+WorkingServer;<Request ID="930" Action="CREATE"><Connection Source="numericNodeIdTest.F_OR_2_1.OUT" Destination="numericNodeIdTest.localNumeric5.check" /></Request>
+WorkingServer;<Request ID="931" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="932" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_2_1.OUT" Destination="numericNodeIdTest.F_EQ__1_1.IN1" /></Request>
+WorkingServer;<Request ID="933" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTest.F_EQ_2_1_1.IN1" /></Request>
+WorkingServer;<Request ID="934" Action="CREATE"><Connection Source="numericNodeIdTest.BOOL2BOOL_1_1_1_1_1_1.OUT" Destination="numericNodeIdTest.F_EQ_5_1_1.IN1" /></Request>
+WorkingServer;<Request ID="935" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.INITO" Destination="IsolatedCases.PUBLISH_1.INIT" /></Request>
+WorkingServer;<Request ID="936" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1.CNF" Destination="IsolatedCases.PUBLISH_1.REQ" /></Request>
+WorkingServer;<Request ID="937" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1.INITO" Destination="IsolatedCases.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="938" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT.CNF" Destination="IsolatedCases.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="939" Action="CREATE"><Connection Source="IsolatedCases.F_EQ.CNF" Destination="IsolatedCases.onlyReadVar.REQ" /></Request>
+WorkingServer;<Request ID="940" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.IND" Destination="IsolatedCases.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="941" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1_1.INITO" Destination="IsolatedCases.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="942" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1_1.CNF" Destination="IsolatedCases.PUBLISH_1_1.REQ" /></Request>
+WorkingServer;<Request ID="943" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1.CNF" Destination="IsolatedCases.PUBLISH_1_1.INIT" /></Request>
+WorkingServer;<Request ID="944" Action="CREATE"><Connection Source="IsolatedCases.SERVER_0.INITO" Destination="CreateObjects.PUBLISH_1.INIT" /></Request>
+WorkingServer;<Request ID="945" Action="CREATE"><Connection Source="IsolatedCases.PUBLISH_1_1.CNF" Destination="IsolatedCases.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="946" Action="CREATE"><Connection Source="IsolatedCases.SERVER_0.IND" Destination="IsolatedCases.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="947" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1.OUT" Destination="IsolatedCases.PUBLISH_1.SD_1" /></Request>
+WorkingServer;<Request ID="948" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT.OUT" Destination="IsolatedCases.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="949" Action="CREATE"><Connection Source="IsolatedCases.F_EQ.OUT" Destination="IsolatedCases.onlyReadVar.check" /></Request>
+WorkingServer;<Request ID="950" Action="CREATE"><Connection Source="IsolatedCases.SUBSCRIBE_1.RD_1" Destination="IsolatedCases.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="951" Action="CREATE"><Connection Source="IsolatedCases.DINT2DINT_1_1.OUT" Destination="IsolatedCases.PUBLISH_1_1.SD_1" /></Request>
+WorkingServer;<Request ID="952" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.CNF" Destination="CreateObjects.deleteObject1.REQ" /></Request>
+WorkingServer;<Request ID="953" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.CNF" Destination="CreateObjects.deleteObject2.REQ" /></Request>
+WorkingServer;<Request ID="954" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.CNF" Destination="CreateObjects.createObject1.REQ" /></Request>
+WorkingServer;<Request ID="955" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.CNF" Destination="CreateObjects.createObject2.REQ" /></Request>
+WorkingServer;<Request ID="956" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.CNF" Destination="CreateObjects.createObject3.REQ" /></Request>
+WorkingServer;<Request ID="957" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.INITO" Destination="CreateObjects.PUBLISH_1_1.INIT" /></Request>
+WorkingServer;<Request ID="958" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_2.INIT" /></Request>
+WorkingServer;<Request ID="959" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.INITO" Destination="CreateObjects.PUBLISH_1_1_1.INIT" /></Request>
+WorkingServer;<Request ID="960" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_1_1.INIT" /></Request>
+WorkingServer;<Request ID="961" Action="CREATE"><Connection Source="CreateObjects.createObject1.CNF" Destination="CreateObjects.PUBLISH_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="962" Action="CREATE"><Connection Source="CreateObjects.createObject2.CNF" Destination="CreateObjects.PUBLISH_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="963" Action="CREATE"><Connection Source="CreateObjects.deleteObject1.CNF" Destination="CreateObjects.PUBLISH_1_1.REQ" /></Request>
+WorkingServer;<Request ID="964" Action="CREATE"><Connection Source="CreateObjects.deleteObject2.CNF" Destination="DirectRoot.rootRead.INIT" /></Request>
+WorkingServer;<Request ID="965" Action="CREATE"><Connection Source="CreateObjects.createObject3.CNF" Destination="CreateObjects.PUBLISH_1_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="966" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.INITO" Destination="CreateObjects.PUBLISH_1_1_1_1_1.INIT" /></Request>
+WorkingServer;<Request ID="967" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.CNF" Destination="CreateObjects.createServer.REQ" /></Request>
+WorkingServer;<Request ID="968" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH.EO1" Destination="CreateObjects.PUBLISH_1_1_2.REQ" /></Request>
+WorkingServer;<Request ID="969" Action="CREATE"><Connection Source="CreateObjects.testObject.CNF" Destination="CreateObjects.testObject1Test.REQ" /></Request>
+WorkingServer;<Request ID="970" Action="CREATE"><Connection Source="CreateObjects.createServer.CNF" Destination="CreateObjects.testObject.REQ" /></Request>
+WorkingServer;<Request ID="971" Action="CREATE"><Connection Source="CreateObjects.testObject1Test.CNF" Destination="CreateObjects.testObject2.REQ" /></Request>
+WorkingServer;<Request ID="972" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.INITO" Destination="CreateObjects.testObject.INIT" /></Request>
+WorkingServer;<Request ID="973" Action="CREATE"><Connection Source="CreateObjects.testObject.INITO" Destination="CreateObjects.testObject2.INIT" /></Request>
+WorkingServer;<Request ID="974" Action="CREATE"><Connection Source="CreateObjects.testObject2.CNF" Destination="CreateObjects.testObject2Test.REQ" /></Request>
+WorkingServer;<Request ID="975" Action="CREATE"><Connection Source="CreateObjects.testMethod1.IND" Destination="CreateObjects.DINT2DINT.REQ" /></Request>
+WorkingServer;<Request ID="976" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1.CNF" Destination="CreateObjects.testMethod1.RSP" /></Request>
+WorkingServer;<Request ID="977" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT.CNF" Destination="CreateObjects.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="978" Action="CREATE"><Connection Source="CreateObjects.F_EQ.CNF" Destination="CreateObjects.objectMethod1.REQ" /></Request>
+WorkingServer;<Request ID="979" Action="CREATE"><Connection Source="CreateObjects.objectMethod1.CNF" Destination="CreateObjects.DINT2DINT_1.REQ" /></Request>
+WorkingServer;<Request ID="980" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.IND" Destination="CreateObjects.DINT2DINT_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="981" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1.CNF" Destination="CreateObjects.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="982" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1.CNF" Destination="CreateObjects.ojectVar2.REQ" /></Request>
+WorkingServer;<Request ID="983" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1.CNF" Destination="CreateObjects.PUBLISH_1_2.REQ" /></Request>
+WorkingServer;<Request ID="984" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.CNF" Destination="CreateObjects.ojectVar1.REQ" /></Request>
+WorkingServer;<Request ID="985" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.INITO" Destination="CreateObjects.SUBSCRIBE_1.INIT" /></Request>
+WorkingServer;<Request ID="986" Action="CREATE"><Connection Source="CreateObjects.testObject2.INITO" Destination="CreateObjects.E_SWITCH.EI" /></Request>
+WorkingServer;<Request ID="987" Action="CREATE"><Connection Source="CreateObjects.testObject2Test.CNF" Destination="CreateObjects.testMethod1.INIT" /></Request>
+WorkingServer;<Request ID="988" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH_1.EO1" Destination="CreateObjects.DINT2DINT_1_1.REQ" /></Request>
+WorkingServer;<Request ID="989" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH_1.EO0" Destination="DirectRoot.rootRead.INIT" /></Request>
+WorkingServer;<Request ID="990" Action="CREATE"><Connection Source="CreateObjects.E_SWITCH.EO0" Destination="CreateObjects.testMethod1.INIT" /></Request>
+WorkingServer;<Request ID="991" Action="CREATE"><Connection Source="CreateObjects.F_EQ_2.CNF" Destination="CreateObjects.objectMethod1_1.REQ" /></Request>
+WorkingServer;<Request ID="992" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_2.CNF" Destination="CreateObjects.PUBLISH_1_2_1.REQ" /></Request>
+WorkingServer;<Request ID="993" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.CNF" Destination="CreateObjects.ojectVar1_1.REQ" /></Request>
+WorkingServer;<Request ID="994" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.IND" Destination="CreateObjects.DINT2DINT_2.REQ" /></Request>
+WorkingServer;<Request ID="995" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1_1.CNF" Destination="CreateObjects.F_EQ_1_1.REQ" /></Request>
+WorkingServer;<Request ID="996" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_1.CNF" Destination="CreateObjects.DINT2DINT_1_2.REQ" /></Request>
+WorkingServer;<Request ID="997" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.IND" Destination="CreateObjects.DINT2DINT_1_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="998" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.INITO" Destination="CreateObjects.SUBSCRIBE_1_1.INIT" /></Request>
+WorkingServer;<Request ID="999" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_2.CNF" Destination="CreateObjects.F_EQ_2.REQ" /></Request>
+WorkingServer;<Request ID="1,000" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1_1.CNF" Destination="CreateObjects.ojectVar2_1.REQ" /></Request>
+WorkingServer;<Request ID="1,001" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_2.CNF" Destination="CreateObjects.testMethod1_1.RSP" /></Request>
+WorkingServer;<Request ID="1,002" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.INITO" Destination="CreateObjects.E_SWITCH_1.EI" /></Request>
+WorkingServer;<Request ID="1,003" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.INITO" Destination="CreateObjects.testMethod1_1.INIT" /></Request>
+WorkingServer;<Request ID="1,004" Action="CREATE"><Connection Source="CreateObjects.ojectVar1_1.CNF" Destination="CreateObjects.PUBLISH_1.REQ" /></Request>
+WorkingServer;<Request ID="1,005" Action="CREATE"><Connection Source="CreateObjects.ojectVar1.CNF" Destination="CreateObjects.DINT2DINT_1_1_2.REQ" /></Request>
+WorkingServer;<Request ID="1,006" Action="CREATE"><Connection Source="CreateObjects.F_EQ_3.CNF" Destination="CreateObjects.objectMethod1_2.REQ" /></Request>
+WorkingServer;<Request ID="1,007" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_2.CNF" Destination="CreateObjects.DINT2DINT_1_3.REQ" /></Request>
+WorkingServer;<Request ID="1,008" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.IND" Destination="CreateObjects.DINT2DINT_3.REQ" /></Request>
+WorkingServer;<Request ID="1,009" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_3.CNF" Destination="CreateObjects.F_EQ_3.REQ" /></Request>
+WorkingServer;<Request ID="1,010" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_3.CNF" Destination="CreateObjects.testMethod1_2.RSP" /></Request>
+WorkingServer;<Request ID="1,011" Action="CREATE"><Connection Source="CreateObjects.testMethod1.INITO" Destination="CreateObjects.testMethod1_2.INIT" /></Request>
+WorkingServer;<Request ID="1,012" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.INITO" Destination="CreateObjects.PUBLISH_1_2.INIT" /></Request>
+WorkingServer;<Request ID="1,013" Action="CREATE"><Connection Source="CreateObjects.F_EQ_4.CNF" Destination="CreateObjects.objectMethod1_3.REQ" /></Request>
+WorkingServer;<Request ID="1,014" Action="CREATE"><Connection Source="CreateObjects.objectMethod1_3.CNF" Destination="CreateObjects.DINT2DINT_1_4.REQ" /></Request>
+WorkingServer;<Request ID="1,015" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.IND" Destination="CreateObjects.DINT2DINT_4.REQ" /></Request>
+WorkingServer;<Request ID="1,016" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_4.CNF" Destination="CreateObjects.F_EQ_4.REQ" /></Request>
+WorkingServer;<Request ID="1,017" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_4.CNF" Destination="CreateObjects.testMethod1_3.RSP" /></Request>
+WorkingServer;<Request ID="1,018" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.INITO" Destination="CreateObjects.testMethod1_3.INIT" /></Request>
+WorkingServer;<Request ID="1,019" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.INITO" Destination="CreateObjects.PUBLISH_1_2_1.INIT" /></Request>
+WorkingServer;<Request ID="1,020" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1.QO" Destination="CreateObjects.deleteObject1.check" /></Request>
+WorkingServer;<Request ID="1,021" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1.QO" Destination="CreateObjects.deleteObject2.check" /></Request>
+WorkingServer;<Request ID="1,022" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_2.QO" Destination="CreateObjects.createObject1.check" /></Request>
+WorkingServer;<Request ID="1,023" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1.QO" Destination="CreateObjects.createObject2.check" /></Request>
+WorkingServer;<Request ID="1,024" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1.QO" Destination="CreateObjects.createObject3.check" /></Request>
+WorkingServer;<Request ID="1,025" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_1_1_1_1.QO" Destination="CreateObjects.createServer.check" /></Request>
+WorkingServer;<Request ID="1,026" Action="CREATE"><Connection Source="CreateObjects.testObject.QO" Destination="CreateObjects.testObject1Test.check" /></Request>
+WorkingServer;<Request ID="1,027" Action="CREATE"><Connection Source="CreateObjects.testObject2.QO" Destination="CreateObjects.testObject2Test.check" /></Request>
+WorkingServer;<Request ID="1,028" Action="CREATE"><Connection Source="CreateObjects.testMethod1.RD_1" Destination="CreateObjects.DINT2DINT.IN" /></Request>
+WorkingServer;<Request ID="1,029" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1.OUT" Destination="CreateObjects.testMethod1.SD_1" /></Request>
+WorkingServer;<Request ID="1,030" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT.OUT" Destination="CreateObjects.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="1,031" Action="CREATE"><Connection Source="CreateObjects.F_EQ.OUT" Destination="CreateObjects.objectMethod1.check" /></Request>
+WorkingServer;<Request ID="1,032" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1.RD_1" Destination="CreateObjects.DINT2DINT_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="1,033" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1.OUT" Destination="CreateObjects.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="1,034" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1.OUT" Destination="CreateObjects.ojectVar2.check" /></Request>
+WorkingServer;<Request ID="1,035" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1.OUT" Destination="CreateObjects.PUBLISH_1_2.SD_1" /></Request>
+WorkingServer;<Request ID="1,036" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2.QO" Destination="CreateObjects.ojectVar1.check" /></Request>
+WorkingServer;<Request ID="1,037" Action="CREATE"><Connection Source="CreateObjects.F_EQ_1_1.OUT" Destination="CreateObjects.ojectVar2_1.check" /></Request>
+WorkingServer;<Request ID="1,038" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_1_1.OUT" Destination="CreateObjects.F_EQ_1_1.IN1" /></Request>
+WorkingServer;<Request ID="1,039" Action="CREATE"><Connection Source="CreateObjects.SUBSCRIBE_1_1.RD_1" Destination="CreateObjects.DINT2DINT_1_1_1_1.IN" /></Request>
+WorkingServer;<Request ID="1,040" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_2.OUT" Destination="CreateObjects.testMethod1_1.SD_1" /></Request>
+WorkingServer;<Request ID="1,041" Action="CREATE"><Connection Source="CreateObjects.F_EQ_2.OUT" Destination="CreateObjects.objectMethod1_1.check" /></Request>
+WorkingServer;<Request ID="1,042" Action="CREATE"><Connection Source="CreateObjects.testMethod1_1.RD_1" Destination="CreateObjects.DINT2DINT_2.IN" /></Request>
+WorkingServer;<Request ID="1,043" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_1_2.OUT" Destination="CreateObjects.PUBLISH_1_2_1.SD_1" /></Request>
+WorkingServer;<Request ID="1,044" Action="CREATE"><Connection Source="CreateObjects.PUBLISH_1_2_1.QO" Destination="CreateObjects.ojectVar1_1.check" /></Request>
+WorkingServer;<Request ID="1,045" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_2.OUT" Destination="CreateObjects.F_EQ_2.IN1" /></Request>
+WorkingServer;<Request ID="1,046" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_3.OUT" Destination="CreateObjects.testMethod1_2.SD_1" /></Request>
+WorkingServer;<Request ID="1,047" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_3.OUT" Destination="CreateObjects.F_EQ_3.IN1" /></Request>
+WorkingServer;<Request ID="1,048" Action="CREATE"><Connection Source="CreateObjects.F_EQ_3.OUT" Destination="CreateObjects.objectMethod1_2.check" /></Request>
+WorkingServer;<Request ID="1,049" Action="CREATE"><Connection Source="CreateObjects.testMethod1_2.RD_1" Destination="CreateObjects.DINT2DINT_3.IN" /></Request>
+WorkingServer;<Request ID="1,050" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_1_4.OUT" Destination="CreateObjects.testMethod1_3.SD_1" /></Request>
+WorkingServer;<Request ID="1,051" Action="CREATE"><Connection Source="CreateObjects.DINT2DINT_4.OUT" Destination="CreateObjects.F_EQ_4.IN1" /></Request>
+WorkingServer;<Request ID="1,052" Action="CREATE"><Connection Source="CreateObjects.F_EQ_4.OUT" Destination="CreateObjects.objectMethod1_3.check" /></Request>
+WorkingServer;<Request ID="1,053" Action="CREATE"><Connection Source="CreateObjects.testMethod1_3.RD_1" Destination="CreateObjects.DINT2DINT_4.IN" /></Request>
+WorkingServer;<Request ID="1,054" Action="CREATE"><Connection Source="DirectRoot.rootRead.IND" Destination="DirectRoot.BOOL2BOOL_2_1.REQ" /></Request>
+WorkingServer;<Request ID="1,055" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1.CNF" Destination="DirectRoot.F_EQ.REQ" /></Request>
+WorkingServer;<Request ID="1,056" Action="CREATE"><Connection Source="DirectRoot.F_EQ.CNF" Destination="DirectRoot.directRootRead.REQ" /></Request>
+WorkingServer;<Request ID="1,057" Action="CREATE"><Connection Source="DirectRoot.rootRead.INITO" Destination="DirectRoot.rootWrite.INIT" /></Request>
+WorkingServer;<Request ID="1,058" Action="CREATE"><Connection Source="DirectRoot.rootWrite.CNF" Destination="DirectRoot.directRootWrite.REQ" /></Request>
+WorkingServer;<Request ID="1,059" Action="CREATE"><Connection Source="DirectRoot.directRootMethod.CNF" Destination="DirectRoot.SERVER_0.RSP" /></Request>
+WorkingServer;<Request ID="1,060" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.IND" Destination="DirectRoot.directRootMethod.REQ" /></Request>
+WorkingServer;<Request ID="1,061" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.INITO" Destination="DirectRoot.rootWrite2.INIT" /></Request>
+WorkingServer;<Request ID="1,062" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.IND" Destination="DirectRoot.directRootMethod_1.REQ" /></Request>
+WorkingServer;<Request ID="1,063" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.CNF" Destination="DirectRoot.directRootWrite2.REQ" /></Request>
+WorkingServer;<Request ID="1,064" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_2.CNF" Destination="DirectRoot.F_EQ_1.REQ" /></Request>
+WorkingServer;<Request ID="1,065" Action="CREATE"><Connection Source="DirectRoot.directRootMethod_1.CNF" Destination="DirectRoot.SERVER_0_1.RSP" /></Request>
+WorkingServer;<Request ID="1,066" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.IND" Destination="DirectRoot.BOOL2BOOL_2_1_2.REQ" /></Request>
+WorkingServer;<Request ID="1,067" Action="CREATE"><Connection Source="DirectRoot.F_EQ_1.CNF" Destination="DirectRoot.directRootRead2.REQ" /></Request>
+WorkingServer;<Request ID="1,068" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.INITO" Destination="DirectRoot.rootRead_2.INIT" /></Request>
+WorkingServer;<Request ID="1,069" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1_1.CNF" Destination="DirectRoot.rootWrite2.REQ" /></Request>
+WorkingServer;<Request ID="1,070" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1.CNF" Destination="DirectRoot.rootWrite.REQ" /></Request>
+WorkingServer;<Request ID="1,071" Action="CREATE"><Connection Source="DirectRoot.directRootWrite.CNF" Destination="DirectRoot.BOOL2BOOL_2_1_1_1.REQ" /></Request>
+WorkingServer;<Request ID="1,072" Action="CREATE"><Connection Source="DirectRoot.rootWrite.INITO" Destination="DirectRoot.SERVER_0.INIT" /></Request>
+WorkingServer;<Request ID="1,073" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.INITO" Destination="DirectRoot.SERVER_0_1.INIT" /></Request>
+WorkingServer;<Request ID="1,074" Action="CREATE"><Connection Source="DirectRoot.E_SWITCH.EO1" Destination="DirectRoot.BOOL2BOOL_2_1_1.REQ" /></Request>
+WorkingServer;<Request ID="1,075" Action="CREATE"><Connection Source="DirectRoot.E_SWITCH.EO0" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+WorkingServer;<Request ID="1,076" Action="CREATE"><Connection Source="DirectRoot.PUBLISH_1_1_2.CNF" Destination="DirectRoot.directRootObject.REQ" /></Request>
+WorkingServer;<Request ID="1,077" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.INITO" Destination="DirectRoot.PUBLISH_1_1_2.INIT" /></Request>
+WorkingServer;<Request ID="1,078" Action="CREATE"><Connection Source="DirectRoot.directRootObject.CNF" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+WorkingServer;<Request ID="1,079" Action="CREATE"><Connection Source="DirectRoot.directRootWrite2.CNF" Destination="DirectRoot.PUBLISH_1_1_2.REQ" /></Request>
+WorkingServer;<Request ID="1,080" Action="CREATE"><Connection Source="DirectRoot.PUBLISH_1_1_2.INITO" Destination="DirectRoot.E_SWITCH.EI" /></Request>
+WorkingServer;<Request ID="1,081" Action="CREATE"><Connection Source="DirectRoot.rootRead.RD_1" Destination="DirectRoot.BOOL2BOOL_2_1.IN" /></Request>
+WorkingServer;<Request ID="1,082" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1.OUT" Destination="DirectRoot.F_EQ.IN1" /></Request>
+WorkingServer;<Request ID="1,083" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1.OUT" Destination="DirectRoot.rootWrite.SD_1" /></Request>
+WorkingServer;<Request ID="1,084" Action="CREATE"><Connection Source="DirectRoot.F_EQ.OUT" Destination="DirectRoot.directRootRead.check" /></Request>
+WorkingServer;<Request ID="1,085" Action="CREATE"><Connection Source="DirectRoot.rootWrite.QO" Destination="DirectRoot.directRootWrite.check" /></Request>
+WorkingServer;<Request ID="1,086" Action="CREATE"><Connection Source="DirectRoot.SERVER_0.QO" Destination="DirectRoot.directRootMethod.check" /></Request>
+WorkingServer;<Request ID="1,087" Action="CREATE"><Connection Source="DirectRoot.rootWrite2.QO" Destination="DirectRoot.directRootWrite2.check" /></Request>
+WorkingServer;<Request ID="1,088" Action="CREATE"><Connection Source="DirectRoot.SERVER_0_1.QO" Destination="DirectRoot.directRootMethod_1.check" /></Request>
+WorkingServer;<Request ID="1,089" Action="CREATE"><Connection Source="DirectRoot.F_EQ_1.OUT" Destination="DirectRoot.directRootRead2.check" /></Request>
+WorkingServer;<Request ID="1,090" Action="CREATE"><Connection Source="DirectRoot.rootRead_2.RD_1" Destination="DirectRoot.BOOL2BOOL_2_1_2.IN" /></Request>
+WorkingServer;<Request ID="1,091" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_2.OUT" Destination="DirectRoot.F_EQ_1.IN1" /></Request>
+WorkingServer;<Request ID="1,092" Action="CREATE"><Connection Source="DirectRoot.BOOL2BOOL_2_1_1_1.OUT" Destination="DirectRoot.rootWrite2.SD_1" /></Request>
+WorkingServer;<Request ID="1,093" Action="CREATE"><Connection Source="DirectRoot.PUBLISH_1_1_2.QO" Destination="DirectRoot.directRootObject.check" /></Request>
+WorkingServer;<Request ID="1,094" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.INITO" Destination="E_SR.S" /></Request>
+WorkingServer;<Request ID="1,095" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+WorkingServer;<Request ID="1,096" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+WorkingServer;<Request ID="1,097" Action="CREATE"><Connection Source="E_SR.EO" Destination="folderTest.Writable3.INIT" /></Request>
+WorkingServer;<Request ID="1,098" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.IND" Destination="E_SR.R" /></Request>
+WorkingServer;<Request ID="1,099" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest.Writable1.QI" /></Request>
+WorkingServer;<Request ID="1,100" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest.Writable2.QI" /></Request>
+WorkingServer;<Request ID="1,101" Action="CREATE"><Connection Source="E_SR.Q" Destination="folderTest.Writable3.QI" /></Request>
+WorkingServer;<Request ID="1,102" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.F_BOOL_TO_UINT.IN" /></Request>
+WorkingServer;<Request ID="1,103" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.SUBSCRIBE_0.QI" /></Request>
+WorkingServer;<Request ID="1,104" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.InitFinished.QI" /></Request>
+WorkingServer;<Request ID="1,105" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest.Writable1.QI" /></Request>
+WorkingServer;<Request ID="1,106" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest.Writable2.QI" /></Request>
+WorkingServer;<Request ID="1,107" Action="CREATE"><Connection Source="E_SR.Q" Destination="numericNodeIdTest.Writable3.QI" /></Request>
+WorkingServer;<Request ID="1,108" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable1.QI" /></Request>
+WorkingServer;<Request ID="1,109" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable2.QI" /></Request>
+WorkingServer;<Request ID="1,110" Action="CREATE"><Connection Source="E_SR.Q" Destination="stringNodeIdTest.Writable3.QI" /></Request>
+WorkingServer;<Request ID="1,111" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest.Writable1.QI" /></Request>
+WorkingServer;<Request ID="1,112" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest.Writable2.QI" /></Request>
+WorkingServer;<Request ID="1,113" Action="CREATE"><Connection Source="E_SR.Q" Destination="byteStringNodeIdTest.Writable3.QI" /></Request>
+WorkingServer;<Request ID="1,114" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,115" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_1_0.QI" /></Request>
+WorkingServer;<Request ID="1,116" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_0_3.QI" /></Request>
+WorkingServer;<Request ID="1,117" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodOnlyBrowseName.SERVER_2_3.QI" /></Request>
+WorkingServer;<Request ID="1,118" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,119" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_1_0.QI" /></Request>
+WorkingServer;<Request ID="1,120" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_0_3.QI" /></Request>
+WorkingServer;<Request ID="1,121" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodNumericNodeId.SERVER_2_3.QI" /></Request>
+WorkingServer;<Request ID="1,122" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,123" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_1_0.QI" /></Request>
+WorkingServer;<Request ID="1,124" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_0_3.QI" /></Request>
+WorkingServer;<Request ID="1,125" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodStringNodeId.SERVER_2_3.QI" /></Request>
+WorkingServer;<Request ID="1,126" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,127" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_1_0.QI" /></Request>
+WorkingServer;<Request ID="1,128" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_0_3.QI" /></Request>
+WorkingServer;<Request ID="1,129" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocaMethods.MethodBytestringNodeId.SERVER_2_3.QI" /></Request>
+WorkingServer;<Request ID="1,130" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.SUBSCRIBE_1.QI" /></Request>
+WorkingServer;<Request ID="1,131" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.PUBLISH_1.QI" /></Request>
+WorkingServer;<Request ID="1,132" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.PUBLISH_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,133" Action="CREATE"><Connection Source="E_SR.Q" Destination="IsolatedCases.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,134" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1.QI" /></Request>
+WorkingServer;<Request ID="1,135" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,136" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_2.QI" /></Request>
+WorkingServer;<Request ID="1,137" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,138" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,139" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_1_1_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,140" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.E_SWITCH.G" /></Request>
+WorkingServer;<Request ID="1,141" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testObject.QI" /></Request>
+WorkingServer;<Request ID="1,142" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testObject2.QI" /></Request>
+WorkingServer;<Request ID="1,143" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1.QI" /></Request>
+WorkingServer;<Request ID="1,144" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_2.QI" /></Request>
+WorkingServer;<Request ID="1,145" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.SUBSCRIBE_1.QI" /></Request>
+WorkingServer;<Request ID="1,146" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.E_SWITCH_1.G" /></Request>
+WorkingServer;<Request ID="1,147" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.SUBSCRIBE_1_1.QI" /></Request>
+WorkingServer;<Request ID="1,148" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.PUBLISH_1_2_1.QI" /></Request>
+WorkingServer;<Request ID="1,149" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_1.QI" /></Request>
+WorkingServer;<Request ID="1,150" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_3.QI" /></Request>
+WorkingServer;<Request ID="1,151" Action="CREATE"><Connection Source="E_SR.Q" Destination="CreateObjects.testMethod1_2.QI" /></Request>
+WorkingServer;<Request ID="1,152" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootRead.QI" /></Request>
+WorkingServer;<Request ID="1,153" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.SERVER_0.QI" /></Request>
+WorkingServer;<Request ID="1,154" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.SERVER_0_1.QI" /></Request>
+WorkingServer;<Request ID="1,155" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootRead_2.QI" /></Request>
+WorkingServer;<Request ID="1,156" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootWrite2.QI" /></Request>
+WorkingServer;<Request ID="1,157" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.rootWrite.QI" /></Request>
+WorkingServer;<Request ID="1,158" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.E_SWITCH.G" /></Request>
+WorkingServer;<Request ID="1,159" Action="CREATE"><Connection Source="E_SR.Q" Destination="DirectRoot.PUBLISH_1_1_2.QI" /></Request>
+WorkingServer;<Request ID="1,160" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/typesClient.fboot b/systemtests/src/modules/opc_ua/typesClient.fboot
new file mode 100644
index 0000000..8ddf67d
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/typesClient.fboot
@@ -0,0 +1,754 @@
+;<Request ID="1" Action="CREATE"><FB Name="typesClient" Type="EMB_RES" /></Request>
+typesClient;<Request ID="2" Action="CREATE"><FB Name="SubApp_2.INT2INT_1" Type="INT2INT" /></Request>
+typesClient;<Request ID="3" Action="WRITE"><Connection Source="INT#234" Destination="SubApp_2.INT2INT_1.IN" /></Request>
+typesClient;<Request ID="4" Action="CREATE"><FB Name="SubApp_2.BOOL2BOOL_2_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="5" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_2.BOOL2BOOL_2_1.IN" /></Request>
+typesClient;<Request ID="6" Action="CREATE"><FB Name="SubApp_2.UDINT2UDINT_1" Type="UDINT2UDINT" /></Request>
+typesClient;<Request ID="7" Action="WRITE"><Connection Source="UDINT#789" Destination="SubApp_2.UDINT2UDINT_1.IN" /></Request>
+typesClient;<Request ID="8" Action="CREATE"><FB Name="SubApp_2.SINT2SINT_1" Type="SINT2SINT" /></Request>
+typesClient;<Request ID="9" Action="WRITE"><Connection Source="SINT#121" Destination="SubApp_2.SINT2SINT_1.IN" /></Request>
+typesClient;<Request ID="10" Action="CREATE"><FB Name="SubApp_2.F_INT_TO_LWORD_1" Type="F_INT_TO_LWORD" /></Request>
+typesClient;<Request ID="11" Action="CREATE"><FB Name="SubApp_2.F_INT_TO_LINT_1" Type="F_INT_TO_LINT" /></Request>
+typesClient;<Request ID="12" Action="CREATE"><FB Name="SubApp_2.REAL2REAL_1" Type="REAL2REAL" /></Request>
+typesClient;<Request ID="13" Action="WRITE"><Connection Source="REAL#1.23" Destination="SubApp_2.REAL2REAL_1.IN" /></Request>
+typesClient;<Request ID="14" Action="CREATE"><FB Name="SubApp_2.WSTRING2WSTRING_1" Type="WSTRING2WSTRING" /></Request>
+typesClient;<Request ID="15" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="SubApp_2.WSTRING2WSTRING_1.IN" /></Request>
+typesClient;<Request ID="16" Action="CREATE"><FB Name="SubApp_2.BYTE2BYTE_1" Type="BYTE2BYTE" /></Request>
+typesClient;<Request ID="17" Action="WRITE"><Connection Source="BYTE#123" Destination="SubApp_2.BYTE2BYTE_1.IN" /></Request>
+typesClient;<Request ID="18" Action="CREATE"><FB Name="SubApp_2.BOOL2BOOL_4" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="19" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_2.BOOL2BOOL_4.IN" /></Request>
+typesClient;<Request ID="20" Action="CREATE"><FB Name="SubApp_2.BOOL2BOOL_1_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="21" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_2.BOOL2BOOL_1_1.IN" /></Request>
+typesClient;<Request ID="22" Action="CREATE"><FB Name="SubApp_2.BOOL2BOOL_3_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="23" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_2.BOOL2BOOL_3_1.IN" /></Request>
+typesClient;<Request ID="24" Action="CREATE"><FB Name="SubApp_2.F_LINT_TO_INT_1" Type="F_LINT_TO_INT" /></Request>
+typesClient;<Request ID="25" Action="WRITE"><Connection Source="LINT#456" Destination="SubApp_2.F_LINT_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="26" Action="CREATE"><FB Name="SubApp_2.UINT2UINT_1" Type="UINT2UINT" /></Request>
+typesClient;<Request ID="27" Action="WRITE"><Connection Source="UINT#678" Destination="SubApp_2.UINT2UINT_1.IN" /></Request>
+typesClient;<Request ID="28" Action="CREATE"><FB Name="SubApp_2.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="29" Action="WRITE"><Connection Source="STRING#TestString" Destination="SubApp_2.STRING2STRING_1.IN" /></Request>
+typesClient;<Request ID="30" Action="CREATE"><FB Name="SubApp_2.F_ULINT_TO_INT_1" Type="F_ULINT_TO_INT" /></Request>
+typesClient;<Request ID="31" Action="WRITE"><Connection Source="ULINT#987" Destination="SubApp_2.F_ULINT_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="32" Action="CREATE"><FB Name="SubApp_2.DINT2DINT_1" Type="DINT2DINT" /></Request>
+typesClient;<Request ID="33" Action="WRITE"><Connection Source="DINT#345" Destination="SubApp_2.DINT2DINT_1.IN" /></Request>
+typesClient;<Request ID="34" Action="CREATE"><FB Name="SubApp_2.LREAL2LREAL_1" Type="LREAL2LREAL" /></Request>
+typesClient;<Request ID="35" Action="WRITE"><Connection Source="LREAL#3.21" Destination="SubApp_2.LREAL2LREAL_1.IN" /></Request>
+typesClient;<Request ID="36" Action="CREATE"><FB Name="SubApp_2.WORD2WORD_1" Type="WORD2WORD" /></Request>
+typesClient;<Request ID="37" Action="WRITE"><Connection Source="WORD#765" Destination="SubApp_2.WORD2WORD_1.IN" /></Request>
+typesClient;<Request ID="38" Action="CREATE"><FB Name="SubApp_2.F_LWORD_TO_INT_1" Type="F_LWORD_TO_INT" /></Request>
+typesClient;<Request ID="39" Action="WRITE"><Connection Source="LWORD#543" Destination="SubApp_2.F_LWORD_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="40" Action="CREATE"><FB Name="SubApp_2.USINT2USINT_1" Type="USINT2USINT" /></Request>
+typesClient;<Request ID="41" Action="WRITE"><Connection Source="USINT#122" Destination="SubApp_2.USINT2USINT_1.IN" /></Request>
+typesClient;<Request ID="42" Action="CREATE"><FB Name="SubApp_2.TIME2TIME_1" Type="TIME2TIME" /></Request>
+typesClient;<Request ID="43" Action="WRITE"><Connection Source="TIME#1450ms" Destination="SubApp_2.TIME2TIME_1.IN" /></Request>
+typesClient;<Request ID="44" Action="CREATE"><FB Name="SubApp_2.DWORD2DWORD_1" Type="DWORD2DWORD" /></Request>
+typesClient;<Request ID="45" Action="WRITE"><Connection Source="DWORD#654" Destination="SubApp_2.DWORD2DWORD_1.IN" /></Request>
+typesClient;<Request ID="46" Action="CREATE"><FB Name="SubApp_2.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesClient;<Request ID="47" Action="CREATE"><FB Name="SubApp_2.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesClient;<Request ID="48" Action="WRITE"><Connection Source="(text:='JustAText',locale:='de-DE')" Destination="SubApp_2.LocalizedText2LocalizedText.IN" /></Request>
+typesClient;<Request ID="49" Action="CREATE"><FB Name="TypeTest_3.BollType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="50" Action="CREATE"><FB Name="TypeTest_3.F_EQ_Bool" Type="F_EQ" /></Request>
+typesClient;<Request ID="51" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_3.F_EQ_Bool.IN2" /></Request>
+typesClient;<Request ID="52" Action="CREATE"><FB Name="TypeTest_3.SINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="53" Action="CREATE"><FB Name="TypeTest_3.F_EQ_SINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="54" Action="WRITE"><Connection Source="SINT#121" Destination="TypeTest_3.F_EQ_SINT.IN2" /></Request>
+typesClient;<Request ID="55" Action="CREATE"><FB Name="TypeTest_3.INTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="56" Action="CREATE"><FB Name="TypeTest_3.F_EQ_INT" Type="F_EQ" /></Request>
+typesClient;<Request ID="57" Action="WRITE"><Connection Source="INT#234" Destination="TypeTest_3.F_EQ_INT.IN2" /></Request>
+typesClient;<Request ID="58" Action="CREATE"><FB Name="TypeTest_3.DINType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="59" Action="CREATE"><FB Name="TypeTest_3.F_EQ_DINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="60" Action="WRITE"><Connection Source="DINT#345" Destination="TypeTest_3.F_EQ_DINT.IN2" /></Request>
+typesClient;<Request ID="61" Action="CREATE"><FB Name="TypeTest_3.F_EQ_USINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="62" Action="WRITE"><Connection Source="USINT#122" Destination="TypeTest_3.F_EQ_USINT.IN2" /></Request>
+typesClient;<Request ID="63" Action="CREATE"><FB Name="TypeTest_3.USINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="64" Action="CREATE"><FB Name="TypeTest_3.F_EQ_UINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="65" Action="WRITE"><Connection Source="UINT#678" Destination="TypeTest_3.F_EQ_UINT.IN2" /></Request>
+typesClient;<Request ID="66" Action="CREATE"><FB Name="TypeTest_3.LINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="67" Action="CREATE"><FB Name="TypeTest_3.UINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="68" Action="CREATE"><FB Name="TypeTest_3.UDINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="69" Action="CREATE"><FB Name="TypeTest_3.F_EQ_UDINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="70" Action="WRITE"><Connection Source="UDINT#789" Destination="TypeTest_3.F_EQ_UDINT.IN2" /></Request>
+typesClient;<Request ID="71" Action="CREATE"><FB Name="TypeTest_3.F_EQ_LINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="72" Action="WRITE"><Connection Source="LINT#456" Destination="TypeTest_3.F_EQ_LINT.IN2" /></Request>
+typesClient;<Request ID="73" Action="CREATE"><FB Name="TypeTest_3.F_EQ_BYTE" Type="F_EQ" /></Request>
+typesClient;<Request ID="74" Action="WRITE"><Connection Source="BYTE#123" Destination="TypeTest_3.F_EQ_BYTE.IN2" /></Request>
+typesClient;<Request ID="75" Action="CREATE"><FB Name="TypeTest_3.BYTEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="76" Action="CREATE"><FB Name="TypeTest_3.F_EQ_WORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="77" Action="WRITE"><Connection Source="WORD#765" Destination="TypeTest_3.F_EQ_WORD.IN2" /></Request>
+typesClient;<Request ID="78" Action="CREATE"><FB Name="TypeTest_3.ULINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="79" Action="CREATE"><FB Name="TypeTest_3.WORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="80" Action="CREATE"><FB Name="TypeTest_3.DWORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="81" Action="CREATE"><FB Name="TypeTest_3.F_EQ_DWORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="82" Action="WRITE"><Connection Source="DWORD#654" Destination="TypeTest_3.F_EQ_DWORD.IN2" /></Request>
+typesClient;<Request ID="83" Action="CREATE"><FB Name="TypeTest_3.F_EQ_ULINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="84" Action="WRITE"><Connection Source="ULINT#987" Destination="TypeTest_3.F_EQ_ULINT.IN2" /></Request>
+typesClient;<Request ID="85" Action="CREATE"><FB Name="TypeTest_3.F_EQ_DATE" Type="F_EQ" /></Request>
+typesClient;<Request ID="86" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_3.F_EQ_DATE.IN2" /></Request>
+typesClient;<Request ID="87" Action="CREATE"><FB Name="TypeTest_3.DATEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="88" Action="CREATE"><FB Name="TypeTest_3.F_EQ_LREAL" Type="F_EQ" /></Request>
+typesClient;<Request ID="89" Action="WRITE"><Connection Source="LREAL#3.21" Destination="TypeTest_3.F_EQ_LREAL.IN2" /></Request>
+typesClient;<Request ID="90" Action="CREATE"><FB Name="TypeTest_3.LWORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="91" Action="CREATE"><FB Name="TypeTest_3.TODType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="92" Action="CREATE"><FB Name="TypeTest_3.DTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="93" Action="CREATE"><FB Name="TypeTest_3.F_EQ_DT" Type="F_EQ" /></Request>
+typesClient;<Request ID="94" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_3.F_EQ_DT.IN2" /></Request>
+typesClient;<Request ID="95" Action="CREATE"><FB Name="TypeTest_3.REALType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="96" Action="CREATE"><FB Name="TypeTest_3.LREALType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="97" Action="CREATE"><FB Name="TypeTest_3.F_EQ_REAL" Type="F_EQ" /></Request>
+typesClient;<Request ID="98" Action="WRITE"><Connection Source="REAL#1.23" Destination="TypeTest_3.F_EQ_REAL.IN2" /></Request>
+typesClient;<Request ID="99" Action="CREATE"><FB Name="TypeTest_3.F_EQ_LWORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="100" Action="WRITE"><Connection Source="LWORD#543" Destination="TypeTest_3.F_EQ_LWORD.IN2" /></Request>
+typesClient;<Request ID="101" Action="CREATE"><FB Name="TypeTest_3.WSTRINGType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="102" Action="CREATE"><FB Name="TypeTest_3.F_EQ_TIME" Type="F_EQ" /></Request>
+typesClient;<Request ID="103" Action="WRITE"><Connection Source="TIME#1450ms" Destination="TypeTest_3.F_EQ_TIME.IN2" /></Request>
+typesClient;<Request ID="104" Action="CREATE"><FB Name="TypeTest_3.STRINGType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="105" Action="CREATE"><FB Name="TypeTest_3.F_EQ_TOD" Type="F_EQ" /></Request>
+typesClient;<Request ID="106" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_3.F_EQ_TOD.IN2" /></Request>
+typesClient;<Request ID="107" Action="CREATE"><FB Name="TypeTest_3.F_EQ_Bool_STRING" Type="F_EQ" /></Request>
+typesClient;<Request ID="108" Action="WRITE"><Connection Source="STRING#TestString" Destination="TypeTest_3.F_EQ_Bool_STRING.IN2" /></Request>
+typesClient;<Request ID="109" Action="CREATE"><FB Name="TypeTest_3.F_EQ_Bool_WSTRING" Type="F_EQ" /></Request>
+typesClient;<Request ID="110" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="TypeTest_3.F_EQ_Bool_WSTRING.IN2" /></Request>
+typesClient;<Request ID="111" Action="CREATE"><FB Name="TypeTest_3.TIMEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="112" Action="CREATE"><FB Name="TypeTest_3.F_EQ_Text_2" Type="F_EQ" /></Request>
+typesClient;<Request ID="113" Action="WRITE"><Connection Source="STRING#de-DE" Destination="TypeTest_3.F_EQ_Text_2.IN2" /></Request>
+typesClient;<Request ID="114" Action="CREATE"><FB Name="TypeTest_3.STRING2STRING" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="115" Action="CREATE"><FB Name="TypeTest_3.localizedTextTestLocale" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="116" Action="CREATE"><FB Name="TypeTest_3.GET_STRUCT_VALUE" Type="GET_STRUCT_VALUE" /></Request>
+typesClient;<Request ID="117" Action="WRITE"><Connection Source="STRING#text" Destination="TypeTest_3.GET_STRUCT_VALUE.member" /></Request>
+typesClient;<Request ID="118" Action="CREATE"><FB Name="TypeTest_3.F_EQ_Text" Type="F_EQ" /></Request>
+typesClient;<Request ID="119" Action="WRITE"><Connection Source="STRING#JustAText" Destination="TypeTest_3.F_EQ_Text.IN2" /></Request>
+typesClient;<Request ID="120" Action="CREATE"><FB Name="TypeTest_3.GET_STRUCT_VALUE_1" Type="GET_STRUCT_VALUE" /></Request>
+typesClient;<Request ID="121" Action="WRITE"><Connection Source="STRING#locale" Destination="TypeTest_3.GET_STRUCT_VALUE_1.member" /></Request>
+typesClient;<Request ID="122" Action="CREATE"><FB Name="TypeTest_3.localizedTextTestText" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="123" Action="CREATE"><FB Name="TypeTest_3.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="124" Action="CREATE"><FB Name="AllTypes_2.SINT2SINT" Type="SINT2SINT" /></Request>
+typesClient;<Request ID="125" Action="CREATE"><FB Name="AllTypes_2.UINT2UINT" Type="UINT2UINT" /></Request>
+typesClient;<Request ID="126" Action="CREATE"><FB Name="AllTypes_2.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="127" Action="CREATE"><FB Name="AllTypes_2.UDINT2UDINT" Type="UDINT2UDINT" /></Request>
+typesClient;<Request ID="128" Action="CREATE"><FB Name="AllTypes_2.DINT2DINT" Type="DINT2DINT" /></Request>
+typesClient;<Request ID="129" Action="CREATE"><FB Name="AllTypes_2.F_LINT_TO_INT" Type="F_LINT_TO_INT" /></Request>
+typesClient;<Request ID="130" Action="CREATE"><FB Name="AllTypes_2.INT2INT" Type="INT2INT" /></Request>
+typesClient;<Request ID="131" Action="CREATE"><FB Name="AllTypes_2.USINT2USINT" Type="USINT2USINT" /></Request>
+typesClient;<Request ID="132" Action="CREATE"><FB Name="AllTypes_2.F_ULINT_TO_INT" Type="F_ULINT_TO_INT" /></Request>
+typesClient;<Request ID="133" Action="CREATE"><FB Name="AllTypes_2.BYTE2BYTE" Type="BYTE2BYTE" /></Request>
+typesClient;<Request ID="134" Action="CREATE"><FB Name="AllTypes_2.WORD2WORD" Type="WORD2WORD" /></Request>
+typesClient;<Request ID="135" Action="CREATE"><FB Name="AllTypes_2.DWORD2DWORD" Type="DWORD2DWORD" /></Request>
+typesClient;<Request ID="136" Action="CREATE"><FB Name="AllTypes_2.F_LWORD_TO_INT" Type="F_LWORD_TO_INT" /></Request>
+typesClient;<Request ID="137" Action="CREATE"><FB Name="AllTypes_2.MISSING_DATE" Type="F_DT_TO_DATE" /></Request>
+typesClient;<Request ID="138" Action="CREATE"><FB Name="AllTypes_2.MISSING_DATE_AND_TIME" Type="F_DT_TO_TOD" /></Request>
+typesClient;<Request ID="139" Action="CREATE"><FB Name="AllTypes_2.TIME2TIME" Type="TIME2TIME" /></Request>
+typesClient;<Request ID="140" Action="CREATE"><FB Name="AllTypes_2.REAL2REAL" Type="REAL2REAL" /></Request>
+typesClient;<Request ID="141" Action="CREATE"><FB Name="AllTypes_2.LREAL2LREAL" Type="LREAL2LREAL" /></Request>
+typesClient;<Request ID="142" Action="CREATE"><FB Name="AllTypes_2.STRING2STRING" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="143" Action="CREATE"><FB Name="AllTypes_2.WSTRING2WSTRING" Type="WSTRING2WSTRING" /></Request>
+typesClient;<Request ID="144" Action="CREATE"><FB Name="AllTypes_2.Time_of_day" Type="F_ADD_TOD_TIME" /></Request>
+typesClient;<Request ID="145" Action="CREATE"><FB Name="AllTypes_2.F_INT_TO_LINT" Type="F_INT_TO_LINT" /></Request>
+typesClient;<Request ID="146" Action="CREATE"><FB Name="AllTypes_2.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesClient;<Request ID="147" Action="CREATE"><FB Name="AllTypes_2.F_INT_TO_LWORD" Type="F_INT_TO_LWORD" /></Request>
+typesClient;<Request ID="148" Action="CREATE"><FB Name="AllTypes_2.BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="149" Action="CREATE"><FB Name="AllTypes_2.BOOL2BOOL_2" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="150" Action="CREATE"><FB Name="AllTypes_2.BOOL2BOOL_3" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="151" Action="CREATE"><FB Name="AllTypes_2.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesClient;<Request ID="152" Action="CREATE"><FB Name="AllTypes_3.SINT2SINT" Type="SINT2SINT" /></Request>
+typesClient;<Request ID="153" Action="CREATE"><FB Name="AllTypes_3.UINT2UINT" Type="UINT2UINT" /></Request>
+typesClient;<Request ID="154" Action="CREATE"><FB Name="AllTypes_3.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="155" Action="CREATE"><FB Name="AllTypes_3.UDINT2UDINT" Type="UDINT2UDINT" /></Request>
+typesClient;<Request ID="156" Action="CREATE"><FB Name="AllTypes_3.DINT2DINT" Type="DINT2DINT" /></Request>
+typesClient;<Request ID="157" Action="CREATE"><FB Name="AllTypes_3.F_LINT_TO_INT" Type="F_LINT_TO_INT" /></Request>
+typesClient;<Request ID="158" Action="CREATE"><FB Name="AllTypes_3.INT2INT" Type="INT2INT" /></Request>
+typesClient;<Request ID="159" Action="CREATE"><FB Name="AllTypes_3.USINT2USINT" Type="USINT2USINT" /></Request>
+typesClient;<Request ID="160" Action="CREATE"><FB Name="AllTypes_3.F_ULINT_TO_INT" Type="F_ULINT_TO_INT" /></Request>
+typesClient;<Request ID="161" Action="CREATE"><FB Name="AllTypes_3.BYTE2BYTE" Type="BYTE2BYTE" /></Request>
+typesClient;<Request ID="162" Action="CREATE"><FB Name="AllTypes_3.WORD2WORD" Type="WORD2WORD" /></Request>
+typesClient;<Request ID="163" Action="CREATE"><FB Name="AllTypes_3.DWORD2DWORD" Type="DWORD2DWORD" /></Request>
+typesClient;<Request ID="164" Action="CREATE"><FB Name="AllTypes_3.F_LWORD_TO_INT" Type="F_LWORD_TO_INT" /></Request>
+typesClient;<Request ID="165" Action="CREATE"><FB Name="AllTypes_3.MISSING_DATE" Type="F_DT_TO_DATE" /></Request>
+typesClient;<Request ID="166" Action="CREATE"><FB Name="AllTypes_3.MISSING_DATE_AND_TIME" Type="F_DT_TO_TOD" /></Request>
+typesClient;<Request ID="167" Action="CREATE"><FB Name="AllTypes_3.TIME2TIME" Type="TIME2TIME" /></Request>
+typesClient;<Request ID="168" Action="CREATE"><FB Name="AllTypes_3.REAL2REAL" Type="REAL2REAL" /></Request>
+typesClient;<Request ID="169" Action="CREATE"><FB Name="AllTypes_3.LREAL2LREAL" Type="LREAL2LREAL" /></Request>
+typesClient;<Request ID="170" Action="CREATE"><FB Name="AllTypes_3.STRING2STRING" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="171" Action="CREATE"><FB Name="AllTypes_3.WSTRING2WSTRING" Type="WSTRING2WSTRING" /></Request>
+typesClient;<Request ID="172" Action="CREATE"><FB Name="AllTypes_3.Time_of_day" Type="F_ADD_TOD_TIME" /></Request>
+typesClient;<Request ID="173" Action="CREATE"><FB Name="AllTypes_3.F_INT_TO_LINT" Type="F_INT_TO_LINT" /></Request>
+typesClient;<Request ID="174" Action="CREATE"><FB Name="AllTypes_3.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesClient;<Request ID="175" Action="CREATE"><FB Name="AllTypes_3.F_INT_TO_LWORD" Type="F_INT_TO_LWORD" /></Request>
+typesClient;<Request ID="176" Action="CREATE"><FB Name="AllTypes_3.BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="177" Action="CREATE"><FB Name="AllTypes_3.BOOL2BOOL_2" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="178" Action="CREATE"><FB Name="AllTypes_3.BOOL2BOOL_3" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="179" Action="CREATE"><FB Name="AllTypes_3.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesClient;<Request ID="180" Action="CREATE"><FB Name="TypeTest_2.BollType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="181" Action="CREATE"><FB Name="TypeTest_2.F_EQ_Bool" Type="F_EQ" /></Request>
+typesClient;<Request ID="182" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_2.F_EQ_Bool.IN2" /></Request>
+typesClient;<Request ID="183" Action="CREATE"><FB Name="TypeTest_2.SINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="184" Action="CREATE"><FB Name="TypeTest_2.F_EQ_SINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="185" Action="WRITE"><Connection Source="SINT#121" Destination="TypeTest_2.F_EQ_SINT.IN2" /></Request>
+typesClient;<Request ID="186" Action="CREATE"><FB Name="TypeTest_2.INTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="187" Action="CREATE"><FB Name="TypeTest_2.F_EQ_INT" Type="F_EQ" /></Request>
+typesClient;<Request ID="188" Action="WRITE"><Connection Source="INT#234" Destination="TypeTest_2.F_EQ_INT.IN2" /></Request>
+typesClient;<Request ID="189" Action="CREATE"><FB Name="TypeTest_2.DINType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="190" Action="CREATE"><FB Name="TypeTest_2.F_EQ_DINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="191" Action="WRITE"><Connection Source="DINT#345" Destination="TypeTest_2.F_EQ_DINT.IN2" /></Request>
+typesClient;<Request ID="192" Action="CREATE"><FB Name="TypeTest_2.F_EQ_USINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="193" Action="WRITE"><Connection Source="USINT#122" Destination="TypeTest_2.F_EQ_USINT.IN2" /></Request>
+typesClient;<Request ID="194" Action="CREATE"><FB Name="TypeTest_2.USINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="195" Action="CREATE"><FB Name="TypeTest_2.F_EQ_UINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="196" Action="WRITE"><Connection Source="UINT#678" Destination="TypeTest_2.F_EQ_UINT.IN2" /></Request>
+typesClient;<Request ID="197" Action="CREATE"><FB Name="TypeTest_2.LINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="198" Action="CREATE"><FB Name="TypeTest_2.UINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="199" Action="CREATE"><FB Name="TypeTest_2.UDINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="200" Action="CREATE"><FB Name="TypeTest_2.F_EQ_UDINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="201" Action="WRITE"><Connection Source="UDINT#789" Destination="TypeTest_2.F_EQ_UDINT.IN2" /></Request>
+typesClient;<Request ID="202" Action="CREATE"><FB Name="TypeTest_2.F_EQ_LINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="203" Action="WRITE"><Connection Source="LINT#456" Destination="TypeTest_2.F_EQ_LINT.IN2" /></Request>
+typesClient;<Request ID="204" Action="CREATE"><FB Name="TypeTest_2.F_EQ_BYTE" Type="F_EQ" /></Request>
+typesClient;<Request ID="205" Action="WRITE"><Connection Source="BYTE#123" Destination="TypeTest_2.F_EQ_BYTE.IN2" /></Request>
+typesClient;<Request ID="206" Action="CREATE"><FB Name="TypeTest_2.BYTEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="207" Action="CREATE"><FB Name="TypeTest_2.F_EQ_WORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="208" Action="WRITE"><Connection Source="WORD#765" Destination="TypeTest_2.F_EQ_WORD.IN2" /></Request>
+typesClient;<Request ID="209" Action="CREATE"><FB Name="TypeTest_2.ULINTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="210" Action="CREATE"><FB Name="TypeTest_2.WORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="211" Action="CREATE"><FB Name="TypeTest_2.DWORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="212" Action="CREATE"><FB Name="TypeTest_2.F_EQ_DWORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="213" Action="WRITE"><Connection Source="DWORD#654" Destination="TypeTest_2.F_EQ_DWORD.IN2" /></Request>
+typesClient;<Request ID="214" Action="CREATE"><FB Name="TypeTest_2.F_EQ_ULINT" Type="F_EQ" /></Request>
+typesClient;<Request ID="215" Action="WRITE"><Connection Source="ULINT#987" Destination="TypeTest_2.F_EQ_ULINT.IN2" /></Request>
+typesClient;<Request ID="216" Action="CREATE"><FB Name="TypeTest_2.F_EQ_DATE" Type="F_EQ" /></Request>
+typesClient;<Request ID="217" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_2.F_EQ_DATE.IN2" /></Request>
+typesClient;<Request ID="218" Action="CREATE"><FB Name="TypeTest_2.DATEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="219" Action="CREATE"><FB Name="TypeTest_2.F_EQ_LREAL" Type="F_EQ" /></Request>
+typesClient;<Request ID="220" Action="WRITE"><Connection Source="LREAL#3.21" Destination="TypeTest_2.F_EQ_LREAL.IN2" /></Request>
+typesClient;<Request ID="221" Action="CREATE"><FB Name="TypeTest_2.LWORDType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="222" Action="CREATE"><FB Name="TypeTest_2.TODType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="223" Action="CREATE"><FB Name="TypeTest_2.DTType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="224" Action="CREATE"><FB Name="TypeTest_2.F_EQ_DT" Type="F_EQ" /></Request>
+typesClient;<Request ID="225" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_2.F_EQ_DT.IN2" /></Request>
+typesClient;<Request ID="226" Action="CREATE"><FB Name="TypeTest_2.REALType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="227" Action="CREATE"><FB Name="TypeTest_2.LREALType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="228" Action="CREATE"><FB Name="TypeTest_2.F_EQ_REAL" Type="F_EQ" /></Request>
+typesClient;<Request ID="229" Action="WRITE"><Connection Source="REAL#1.23" Destination="TypeTest_2.F_EQ_REAL.IN2" /></Request>
+typesClient;<Request ID="230" Action="CREATE"><FB Name="TypeTest_2.F_EQ_LWORD" Type="F_EQ" /></Request>
+typesClient;<Request ID="231" Action="WRITE"><Connection Source="LWORD#543" Destination="TypeTest_2.F_EQ_LWORD.IN2" /></Request>
+typesClient;<Request ID="232" Action="CREATE"><FB Name="TypeTest_2.WSTRINGType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="233" Action="CREATE"><FB Name="TypeTest_2.F_EQ_TIME" Type="F_EQ" /></Request>
+typesClient;<Request ID="234" Action="WRITE"><Connection Source="TIME#1450ms" Destination="TypeTest_2.F_EQ_TIME.IN2" /></Request>
+typesClient;<Request ID="235" Action="CREATE"><FB Name="TypeTest_2.STRINGType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="236" Action="CREATE"><FB Name="TypeTest_2.F_EQ_TOD" Type="F_EQ" /></Request>
+typesClient;<Request ID="237" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_2.F_EQ_TOD.IN2" /></Request>
+typesClient;<Request ID="238" Action="CREATE"><FB Name="TypeTest_2.F_EQ_Bool_STRING" Type="F_EQ" /></Request>
+typesClient;<Request ID="239" Action="WRITE"><Connection Source="STRING#TestString" Destination="TypeTest_2.F_EQ_Bool_STRING.IN2" /></Request>
+typesClient;<Request ID="240" Action="CREATE"><FB Name="TypeTest_2.F_EQ_Bool_WSTRING" Type="F_EQ" /></Request>
+typesClient;<Request ID="241" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="TypeTest_2.F_EQ_Bool_WSTRING.IN2" /></Request>
+typesClient;<Request ID="242" Action="CREATE"><FB Name="TypeTest_2.TIMEType" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="243" Action="CREATE"><FB Name="TypeTest_2.STRING2STRING" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="244" Action="CREATE"><FB Name="TypeTest_2.GET_STRUCT_VALUE_1" Type="GET_STRUCT_VALUE" /></Request>
+typesClient;<Request ID="245" Action="WRITE"><Connection Source="STRING#locale" Destination="TypeTest_2.GET_STRUCT_VALUE_1.member" /></Request>
+typesClient;<Request ID="246" Action="CREATE"><FB Name="TypeTest_2.localizedTextTestLocale" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="247" Action="CREATE"><FB Name="TypeTest_2.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="248" Action="CREATE"><FB Name="TypeTest_2.GET_STRUCT_VALUE" Type="GET_STRUCT_VALUE" /></Request>
+typesClient;<Request ID="249" Action="WRITE"><Connection Source="STRING#text" Destination="TypeTest_2.GET_STRUCT_VALUE.member" /></Request>
+typesClient;<Request ID="250" Action="CREATE"><FB Name="TypeTest_2.F_EQ_Text" Type="F_EQ" /></Request>
+typesClient;<Request ID="251" Action="WRITE"><Connection Source="STRING#JustAText" Destination="TypeTest_2.F_EQ_Text.IN2" /></Request>
+typesClient;<Request ID="252" Action="CREATE"><FB Name="TypeTest_2.localizedTextTestText" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="253" Action="CREATE"><FB Name="TypeTest_2.F_EQ_Text_2" Type="F_EQ" /></Request>
+typesClient;<Request ID="254" Action="WRITE"><Connection Source="STRING#de-DE" Destination="TypeTest_2.F_EQ_Text_2.IN2" /></Request>
+typesClient;<Request ID="255" Action="CREATE"><FB Name="HandleInit.STEST_END_1" Type="STEST_END" /></Request>
+typesClient;<Request ID="256" Action="CREATE"><FB Name="HandleInit.E_DEMUX_2_1" Type="E_DEMUX_2" /></Request>
+typesClient;<Request ID="257" Action="CREATE"><FB Name="HandleInit.F_BOOL_TO_UINT_1" Type="F_BOOL_TO_UINT" /></Request>
+typesClient;<Request ID="258" Action="CREATE"><FB Name="HandleInit.PUBLISH_0_1" Type="PUBLISH_0" /></Request>
+typesClient;<Request ID="259" Action="WRITE"><Connection Source="1" Destination="HandleInit.PUBLISH_0_1.QI" /></Request>
+typesClient;<Request ID="260" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="HandleInit.PUBLISH_0_1.ID" /></Request>
+typesClient;<Request ID="261" Action="CREATE"><FB Name="HandleInit.E_DELAY" Type="E_DELAY" /></Request>
+typesClient;<Request ID="262" Action="WRITE"><Connection Source="T#1s" Destination="HandleInit.E_DELAY.DT" /></Request>
+typesClient;<Request ID="263" Action="CREATE"><FB Name="E_SR_1" Type="E_SR" /></Request>
+typesClient;<Request ID="264" Action="CREATE"><FB Name="InitFinishedSignal" Type="SUBSCRIBE_0" /></Request>
+typesClient;<Request ID="265" Action="WRITE"><Connection Source="1" Destination="InitFinishedSignal.QI" /></Request>
+typesClient;<Request ID="266" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="InitFinishedSignal.ID" /></Request>
+typesClient;<Request ID="267" Action="CREATE"><FB Name="E_PERMIT" Type="E_PERMIT" /></Request>
+typesClient;<Request ID="268" Action="CREATE"><FB Name="SubApp.INT2INT_1" Type="INT2INT" /></Request>
+typesClient;<Request ID="269" Action="WRITE"><Connection Source="INT#234" Destination="SubApp.INT2INT_1.IN" /></Request>
+typesClient;<Request ID="270" Action="CREATE"><FB Name="SubApp.BOOL2BOOL_2_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="271" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp.BOOL2BOOL_2_1.IN" /></Request>
+typesClient;<Request ID="272" Action="CREATE"><FB Name="SubApp.UDINT2UDINT_1" Type="UDINT2UDINT" /></Request>
+typesClient;<Request ID="273" Action="WRITE"><Connection Source="UDINT#789" Destination="SubApp.UDINT2UDINT_1.IN" /></Request>
+typesClient;<Request ID="274" Action="CREATE"><FB Name="SubApp.SINT2SINT_1" Type="SINT2SINT" /></Request>
+typesClient;<Request ID="275" Action="WRITE"><Connection Source="SINT#121" Destination="SubApp.SINT2SINT_1.IN" /></Request>
+typesClient;<Request ID="276" Action="CREATE"><FB Name="SubApp.F_INT_TO_LWORD_1" Type="F_INT_TO_LWORD" /></Request>
+typesClient;<Request ID="277" Action="CREATE"><FB Name="SubApp.F_INT_TO_LINT_1" Type="F_INT_TO_LINT" /></Request>
+typesClient;<Request ID="278" Action="CREATE"><FB Name="SubApp.REAL2REAL_1" Type="REAL2REAL" /></Request>
+typesClient;<Request ID="279" Action="WRITE"><Connection Source="REAL#1.23" Destination="SubApp.REAL2REAL_1.IN" /></Request>
+typesClient;<Request ID="280" Action="CREATE"><FB Name="SubApp.WSTRING2WSTRING_1" Type="WSTRING2WSTRING" /></Request>
+typesClient;<Request ID="281" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="SubApp.WSTRING2WSTRING_1.IN" /></Request>
+typesClient;<Request ID="282" Action="CREATE"><FB Name="SubApp.BYTE2BYTE_1" Type="BYTE2BYTE" /></Request>
+typesClient;<Request ID="283" Action="WRITE"><Connection Source="BYTE#123" Destination="SubApp.BYTE2BYTE_1.IN" /></Request>
+typesClient;<Request ID="284" Action="CREATE"><FB Name="SubApp.BOOL2BOOL_4" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="285" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp.BOOL2BOOL_4.IN" /></Request>
+typesClient;<Request ID="286" Action="CREATE"><FB Name="SubApp.BOOL2BOOL_1_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="287" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp.BOOL2BOOL_1_1.IN" /></Request>
+typesClient;<Request ID="288" Action="CREATE"><FB Name="SubApp.BOOL2BOOL_3_1" Type="BOOL2BOOL" /></Request>
+typesClient;<Request ID="289" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp.BOOL2BOOL_3_1.IN" /></Request>
+typesClient;<Request ID="290" Action="CREATE"><FB Name="SubApp.F_LINT_TO_INT_1" Type="F_LINT_TO_INT" /></Request>
+typesClient;<Request ID="291" Action="WRITE"><Connection Source="LINT#456" Destination="SubApp.F_LINT_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="292" Action="CREATE"><FB Name="SubApp.UINT2UINT_1" Type="UINT2UINT" /></Request>
+typesClient;<Request ID="293" Action="WRITE"><Connection Source="UINT#678" Destination="SubApp.UINT2UINT_1.IN" /></Request>
+typesClient;<Request ID="294" Action="CREATE"><FB Name="SubApp.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesClient;<Request ID="295" Action="WRITE"><Connection Source="STRING#TestString" Destination="SubApp.STRING2STRING_1.IN" /></Request>
+typesClient;<Request ID="296" Action="CREATE"><FB Name="SubApp.F_ULINT_TO_INT_1" Type="F_ULINT_TO_INT" /></Request>
+typesClient;<Request ID="297" Action="WRITE"><Connection Source="ULINT#987" Destination="SubApp.F_ULINT_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="298" Action="CREATE"><FB Name="SubApp.DINT2DINT_1" Type="DINT2DINT" /></Request>
+typesClient;<Request ID="299" Action="WRITE"><Connection Source="DINT#345" Destination="SubApp.DINT2DINT_1.IN" /></Request>
+typesClient;<Request ID="300" Action="CREATE"><FB Name="SubApp.LREAL2LREAL_1" Type="LREAL2LREAL" /></Request>
+typesClient;<Request ID="301" Action="WRITE"><Connection Source="LREAL#3.21" Destination="SubApp.LREAL2LREAL_1.IN" /></Request>
+typesClient;<Request ID="302" Action="CREATE"><FB Name="SubApp.WORD2WORD_1" Type="WORD2WORD" /></Request>
+typesClient;<Request ID="303" Action="WRITE"><Connection Source="WORD#765" Destination="SubApp.WORD2WORD_1.IN" /></Request>
+typesClient;<Request ID="304" Action="CREATE"><FB Name="SubApp.F_LWORD_TO_INT_1" Type="F_LWORD_TO_INT" /></Request>
+typesClient;<Request ID="305" Action="WRITE"><Connection Source="LWORD#543" Destination="SubApp.F_LWORD_TO_INT_1.IN" /></Request>
+typesClient;<Request ID="306" Action="CREATE"><FB Name="SubApp.USINT2USINT_1" Type="USINT2USINT" /></Request>
+typesClient;<Request ID="307" Action="WRITE"><Connection Source="USINT#122" Destination="SubApp.USINT2USINT_1.IN" /></Request>
+typesClient;<Request ID="308" Action="CREATE"><FB Name="SubApp.TIME2TIME_1" Type="TIME2TIME" /></Request>
+typesClient;<Request ID="309" Action="WRITE"><Connection Source="TIME#1450ms" Destination="SubApp.TIME2TIME_1.IN" /></Request>
+typesClient;<Request ID="310" Action="CREATE"><FB Name="SubApp.DWORD2DWORD_1" Type="DWORD2DWORD" /></Request>
+typesClient;<Request ID="311" Action="WRITE"><Connection Source="DWORD#654" Destination="SubApp.DWORD2DWORD_1.IN" /></Request>
+typesClient;<Request ID="312" Action="CREATE"><FB Name="SubApp.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesClient;<Request ID="313" Action="CREATE"><FB Name="SubApp.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesClient;<Request ID="314" Action="WRITE"><Connection Source="(text:='JustAText',locale:='de-DE')" Destination="SubApp.LocalizedText2LocalizedText.IN" /></Request>
+typesClient;<Request ID="315" Action="CREATE"><FB Name="E_SR_2" Type="E_SR" /></Request>
+typesClient;<Request ID="316" Action="CREATE"><FB Name="PUBLISH_0" Type="PUBLISH_0" /></Request>
+typesClient;<Request ID="317" Action="WRITE"><Connection Source="1" Destination="PUBLISH_0.QI" /></Request>
+typesClient;<Request ID="318" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="PUBLISH_0.ID" /></Request>
+typesClient;<Request ID="319" Action="CREATE"><FB Name="RemoteWriteAll" Type="TEST_CONDITION" /></Request>
+typesClient;<Request ID="320" Action="CREATE"><FB Name="RemoteWrite" Type="CLIENT_22_0" /></Request>
+typesClient;<Request ID="321" Action="WRITE"><Connection Source="opc_ua[WRITE;opc.tcp://localhost:4840#;/Objects/types/BOOL;/Objects/types/SINT;/Objects/types/INT;/Objects/types/DINT;/Objects/types/LINT;/Objects/types/USINT;/Objects/types/UINT;/Objects/types/UDINT;/Objects/types/ULINT;/Objects/types/BYTE;/Objects/types/WORD;/Objects/types/DWORD;/Objects/types/LWORD;/Objects/types/DATE;/Objects/types/TIME_OF_DAY;/Objects/types/DATE_AND_TIME;/Objects/types/TIME;/Objects/types/REAL;/Objects/types/LREAL;/Objects/types/STRING;/Objects/types/WSTRING;/Objects/types/LocalizedText]" Destination="RemoteWrite.ID" /></Request>
+typesClient;<Request ID="322" Action="CREATE"><FB Name="RemoteRead" Type="CLIENT_0_22" /></Request>
+typesClient;<Request ID="323" Action="WRITE"><Connection Source="opc_ua[READ;opc.tcp://localhost:4840#;/Objects/types/BOOL;/Objects/types/SINT;/Objects/types/INT;/Objects/types/DINT;/Objects/types/LINT;/Objects/types/USINT;/Objects/types/UINT;/Objects/types/UDINT;/Objects/types/ULINT;/Objects/types/BYTE;/Objects/types/WORD;/Objects/types/DWORD;/Objects/types/LWORD;/Objects/types/DATE;/Objects/types/TIME_OF_DAY;/Objects/types/DATE_AND_TIME;/Objects/types/TIME;/Objects/types/REAL;/Objects/types/LREAL;/Objects/types/STRING;/Objects/types/WSTRING;/Objects/types/LocalizedText]" Destination="RemoteRead.ID" /></Request>
+typesClient;<Request ID="324" Action="CREATE"><FB Name="RemoteCall" Type="CLIENT_22" /></Request>
+typesClient;<Request ID="325" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;opc.tcp://localhost:4840#;/Objects/types/method]" Destination="RemoteCall.ID" /></Request>
+typesClient;<Request ID="326" Action="CREATE"><Connection Source="SubApp_2.SINT2SINT_1.CNF" Destination="SubApp_2.INT2INT_1.REQ" /></Request>
+typesClient;<Request ID="327" Action="CREATE"><Connection Source="SubApp_2.INT2INT_1.CNF" Destination="SubApp_2.DINT2DINT_1.REQ" /></Request>
+typesClient;<Request ID="328" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_1_1.CNF" Destination="SubApp_2.BOOL2BOOL_2_1.REQ" /></Request>
+typesClient;<Request ID="329" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_2_1.CNF" Destination="SubApp_2.BOOL2BOOL_3_1.REQ" /></Request>
+typesClient;<Request ID="330" Action="CREATE"><Connection Source="SubApp_2.UINT2UINT_1.CNF" Destination="SubApp_2.UDINT2UDINT_1.REQ" /></Request>
+typesClient;<Request ID="331" Action="CREATE"><Connection Source="SubApp_2.UDINT2UDINT_1.CNF" Destination="SubApp_2.F_ULINT_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="332" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_4.CNF" Destination="SubApp_2.SINT2SINT_1.REQ" /></Request>
+typesClient;<Request ID="333" Action="CREATE"><Connection Source="SubApp_2.F_LWORD_TO_INT_1.CNF" Destination="SubApp_2.F_INT_TO_LWORD_1.REQ" /></Request>
+typesClient;<Request ID="334" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_LWORD_1.CNF" Destination="SubApp_2.BOOL2BOOL_1_1.REQ" /></Request>
+typesClient;<Request ID="335" Action="CREATE"><Connection Source="SubApp_2.F_LINT_TO_INT_1.CNF" Destination="SubApp_2.F_INT_TO_LINT_1.REQ" /></Request>
+typesClient;<Request ID="336" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_LINT_1.CNF" Destination="SubApp_2.USINT2USINT_1.REQ" /></Request>
+typesClient;<Request ID="337" Action="CREATE"><Connection Source="SubApp_2.TIME2TIME_1.CNF" Destination="SubApp_2.REAL2REAL_1.REQ" /></Request>
+typesClient;<Request ID="338" Action="CREATE"><Connection Source="SubApp_2.REAL2REAL_1.CNF" Destination="SubApp_2.LREAL2LREAL_1.REQ" /></Request>
+typesClient;<Request ID="339" Action="CREATE"><Connection Source="SubApp_2.STRING2STRING_1.CNF" Destination="SubApp_2.WSTRING2WSTRING_1.REQ" /></Request>
+typesClient;<Request ID="340" Action="CREATE"><Connection Source="SubApp_2.BYTE2BYTE_1.CNF" Destination="SubApp_2.WORD2WORD_1.REQ" /></Request>
+typesClient;<Request ID="341" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_3_1.CNF" Destination="SubApp_2.TIME2TIME_1.REQ" /></Request>
+typesClient;<Request ID="342" Action="CREATE"><Connection Source="SubApp_2.DINT2DINT_1.CNF" Destination="SubApp_2.F_LINT_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="343" Action="CREATE"><Connection Source="SubApp_2.USINT2USINT_1.CNF" Destination="SubApp_2.UINT2UINT_1.REQ" /></Request>
+typesClient;<Request ID="344" Action="CREATE"><Connection Source="SubApp_2.LREAL2LREAL_1.CNF" Destination="SubApp_2.STRING2STRING_1.REQ" /></Request>
+typesClient;<Request ID="345" Action="CREATE"><Connection Source="SubApp_2.WORD2WORD_1.CNF" Destination="SubApp_2.DWORD2DWORD_1.REQ" /></Request>
+typesClient;<Request ID="346" Action="CREATE"><Connection Source="SubApp_2.DWORD2DWORD_1.CNF" Destination="SubApp_2.F_LWORD_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="347" Action="CREATE"><Connection Source="SubApp_2.F_ULINT_TO_INT_1.CNF" Destination="SubApp_2.F_INT_TO_ULINT.REQ" /></Request>
+typesClient;<Request ID="348" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_ULINT.CNF" Destination="SubApp_2.BYTE2BYTE_1.REQ" /></Request>
+typesClient;<Request ID="349" Action="CREATE"><Connection Source="SubApp_2.LocalizedText2LocalizedText.CNF" Destination="RemoteCall.REQ" /></Request>
+typesClient;<Request ID="350" Action="CREATE"><Connection Source="SubApp_2.WSTRING2WSTRING_1.CNF" Destination="SubApp_2.LocalizedText2LocalizedText.REQ" /></Request>
+typesClient;<Request ID="351" Action="CREATE"><Connection Source="SubApp_2.F_LWORD_TO_INT_1.OUT" Destination="SubApp_2.F_INT_TO_LWORD_1.IN" /></Request>
+typesClient;<Request ID="352" Action="CREATE"><Connection Source="SubApp_2.F_LINT_TO_INT_1.OUT" Destination="SubApp_2.F_INT_TO_LINT_1.IN" /></Request>
+typesClient;<Request ID="353" Action="CREATE"><Connection Source="SubApp_2.INT2INT_1.OUT" Destination="RemoteCall.SD_3" /></Request>
+typesClient;<Request ID="354" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_2_1.OUT" Destination="RemoteCall.SD_15" /></Request>
+typesClient;<Request ID="355" Action="CREATE"><Connection Source="SubApp_2.UDINT2UDINT_1.OUT" Destination="RemoteCall.SD_8" /></Request>
+typesClient;<Request ID="356" Action="CREATE"><Connection Source="SubApp_2.SINT2SINT_1.OUT" Destination="RemoteCall.SD_2" /></Request>
+typesClient;<Request ID="357" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_LWORD_1.OUT" Destination="RemoteCall.SD_13" /></Request>
+typesClient;<Request ID="358" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_LINT_1.OUT" Destination="RemoteCall.SD_5" /></Request>
+typesClient;<Request ID="359" Action="CREATE"><Connection Source="SubApp_2.REAL2REAL_1.OUT" Destination="RemoteCall.SD_18" /></Request>
+typesClient;<Request ID="360" Action="CREATE"><Connection Source="SubApp_2.WSTRING2WSTRING_1.OUT" Destination="RemoteCall.SD_21" /></Request>
+typesClient;<Request ID="361" Action="CREATE"><Connection Source="SubApp_2.BYTE2BYTE_1.OUT" Destination="RemoteCall.SD_10" /></Request>
+typesClient;<Request ID="362" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_4.OUT" Destination="RemoteCall.SD_1" /></Request>
+typesClient;<Request ID="363" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_1_1.OUT" Destination="RemoteCall.SD_14" /></Request>
+typesClient;<Request ID="364" Action="CREATE"><Connection Source="SubApp_2.BOOL2BOOL_3_1.OUT" Destination="RemoteCall.SD_16" /></Request>
+typesClient;<Request ID="365" Action="CREATE"><Connection Source="SubApp_2.UINT2UINT_1.OUT" Destination="RemoteCall.SD_7" /></Request>
+typesClient;<Request ID="366" Action="CREATE"><Connection Source="SubApp_2.STRING2STRING_1.OUT" Destination="RemoteCall.SD_20" /></Request>
+typesClient;<Request ID="367" Action="CREATE"><Connection Source="SubApp_2.DINT2DINT_1.OUT" Destination="RemoteCall.SD_4" /></Request>
+typesClient;<Request ID="368" Action="CREATE"><Connection Source="SubApp_2.LREAL2LREAL_1.OUT" Destination="RemoteCall.SD_19" /></Request>
+typesClient;<Request ID="369" Action="CREATE"><Connection Source="SubApp_2.WORD2WORD_1.OUT" Destination="RemoteCall.SD_11" /></Request>
+typesClient;<Request ID="370" Action="CREATE"><Connection Source="SubApp_2.USINT2USINT_1.OUT" Destination="RemoteCall.SD_6" /></Request>
+typesClient;<Request ID="371" Action="CREATE"><Connection Source="SubApp_2.TIME2TIME_1.OUT" Destination="RemoteCall.SD_17" /></Request>
+typesClient;<Request ID="372" Action="CREATE"><Connection Source="SubApp_2.DWORD2DWORD_1.OUT" Destination="RemoteCall.SD_12" /></Request>
+typesClient;<Request ID="373" Action="CREATE"><Connection Source="SubApp_2.F_INT_TO_ULINT.OUT" Destination="RemoteCall.SD_9" /></Request>
+typesClient;<Request ID="374" Action="CREATE"><Connection Source="SubApp_2.F_ULINT_TO_INT_1.OUT" Destination="SubApp_2.F_INT_TO_ULINT.IN" /></Request>
+typesClient;<Request ID="375" Action="CREATE"><Connection Source="SubApp_2.LocalizedText2LocalizedText.OUT" Destination="RemoteCall.SD_22" /></Request>
+typesClient;<Request ID="376" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool.CNF" Destination="TypeTest_3.BollType.REQ" /></Request>
+typesClient;<Request ID="377" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_SINT.CNF" Destination="TypeTest_3.SINTType.REQ" /></Request>
+typesClient;<Request ID="378" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_INT.CNF" Destination="TypeTest_3.INTType.REQ" /></Request>
+typesClient;<Request ID="379" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DINT.CNF" Destination="TypeTest_3.DINType.REQ" /></Request>
+typesClient;<Request ID="380" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_UINT.CNF" Destination="TypeTest_3.UINTType.REQ" /></Request>
+typesClient;<Request ID="381" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_UDINT.CNF" Destination="TypeTest_3.UDINTType.REQ" /></Request>
+typesClient;<Request ID="382" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_USINT.CNF" Destination="TypeTest_3.USINTType.REQ" /></Request>
+typesClient;<Request ID="383" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LINT.CNF" Destination="TypeTest_3.LINTType.REQ" /></Request>
+typesClient;<Request ID="384" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_WORD.CNF" Destination="TypeTest_3.WORDType.REQ" /></Request>
+typesClient;<Request ID="385" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DWORD.CNF" Destination="TypeTest_3.DWORDType.REQ" /></Request>
+typesClient;<Request ID="386" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_BYTE.CNF" Destination="TypeTest_3.BYTEType.REQ" /></Request>
+typesClient;<Request ID="387" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_ULINT.CNF" Destination="TypeTest_3.ULINTType.REQ" /></Request>
+typesClient;<Request ID="388" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_REAL.CNF" Destination="TypeTest_3.REALType.REQ" /></Request>
+typesClient;<Request ID="389" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_TOD.CNF" Destination="TypeTest_3.TODType.REQ" /></Request>
+typesClient;<Request ID="390" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool_STRING.CNF" Destination="TypeTest_3.STRINGType.REQ" /></Request>
+typesClient;<Request ID="391" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LREAL.CNF" Destination="TypeTest_3.LREALType.REQ" /></Request>
+typesClient;<Request ID="392" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DT.CNF" Destination="TypeTest_3.DTType.REQ" /></Request>
+typesClient;<Request ID="393" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool_WSTRING.CNF" Destination="TypeTest_3.WSTRINGType.REQ" /></Request>
+typesClient;<Request ID="394" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LWORD.CNF" Destination="TypeTest_3.LWORDType.REQ" /></Request>
+typesClient;<Request ID="395" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DATE.CNF" Destination="TypeTest_3.DATEType.REQ" /></Request>
+typesClient;<Request ID="396" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_TIME.CNF" Destination="TypeTest_3.TIMEType.REQ" /></Request>
+typesClient;<Request ID="397" Action="CREATE"><Connection Source="TypeTest_3.BollType.CNF" Destination="TypeTest_3.F_EQ_SINT.REQ" /></Request>
+typesClient;<Request ID="398" Action="CREATE"><Connection Source="TypeTest_3.SINTType.CNF" Destination="TypeTest_3.F_EQ_INT.REQ" /></Request>
+typesClient;<Request ID="399" Action="CREATE"><Connection Source="TypeTest_3.INTType.CNF" Destination="TypeTest_3.F_EQ_DINT.REQ" /></Request>
+typesClient;<Request ID="400" Action="CREATE"><Connection Source="TypeTest_3.DINType.CNF" Destination="TypeTest_3.F_EQ_LINT.REQ" /></Request>
+typesClient;<Request ID="401" Action="CREATE"><Connection Source="TypeTest_3.LINTType.CNF" Destination="TypeTest_3.F_EQ_USINT.REQ" /></Request>
+typesClient;<Request ID="402" Action="CREATE"><Connection Source="TypeTest_3.USINTType.CNF" Destination="TypeTest_3.F_EQ_UINT.REQ" /></Request>
+typesClient;<Request ID="403" Action="CREATE"><Connection Source="TypeTest_3.UINTType.CNF" Destination="TypeTest_3.F_EQ_UDINT.REQ" /></Request>
+typesClient;<Request ID="404" Action="CREATE"><Connection Source="TypeTest_3.UDINTType.CNF" Destination="TypeTest_3.F_EQ_ULINT.REQ" /></Request>
+typesClient;<Request ID="405" Action="CREATE"><Connection Source="TypeTest_3.ULINTType.CNF" Destination="TypeTest_3.F_EQ_BYTE.REQ" /></Request>
+typesClient;<Request ID="406" Action="CREATE"><Connection Source="TypeTest_3.BYTEType.CNF" Destination="TypeTest_3.F_EQ_WORD.REQ" /></Request>
+typesClient;<Request ID="407" Action="CREATE"><Connection Source="TypeTest_3.WORDType.CNF" Destination="TypeTest_3.F_EQ_DWORD.REQ" /></Request>
+typesClient;<Request ID="408" Action="CREATE"><Connection Source="TypeTest_3.DWORDType.CNF" Destination="TypeTest_3.F_EQ_LWORD.REQ" /></Request>
+typesClient;<Request ID="409" Action="CREATE"><Connection Source="TypeTest_3.DATEType.CNF" Destination="TypeTest_3.F_EQ_TOD.REQ" /></Request>
+typesClient;<Request ID="410" Action="CREATE"><Connection Source="TypeTest_3.TODType.CNF" Destination="TypeTest_3.F_EQ_DT.REQ" /></Request>
+typesClient;<Request ID="411" Action="CREATE"><Connection Source="TypeTest_3.DTType.CNF" Destination="TypeTest_3.F_EQ_TIME.REQ" /></Request>
+typesClient;<Request ID="412" Action="CREATE"><Connection Source="TypeTest_3.TIMEType.CNF" Destination="TypeTest_3.F_EQ_REAL.REQ" /></Request>
+typesClient;<Request ID="413" Action="CREATE"><Connection Source="TypeTest_3.REALType.CNF" Destination="TypeTest_3.F_EQ_LREAL.REQ" /></Request>
+typesClient;<Request ID="414" Action="CREATE"><Connection Source="TypeTest_3.LREALType.CNF" Destination="TypeTest_3.F_EQ_Bool_STRING.REQ" /></Request>
+typesClient;<Request ID="415" Action="CREATE"><Connection Source="TypeTest_3.STRINGType.CNF" Destination="TypeTest_3.F_EQ_Bool_WSTRING.REQ" /></Request>
+typesClient;<Request ID="416" Action="CREATE"><Connection Source="TypeTest_3.LWORDType.CNF" Destination="TypeTest_3.F_EQ_REAL.REQ" /></Request>
+typesClient;<Request ID="417" Action="CREATE"><Connection Source="TypeTest_3.STRING2STRING_1.CNF" Destination="TypeTest_3.F_EQ_Text.REQ" /></Request>
+typesClient;<Request ID="418" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Text.CNF" Destination="TypeTest_3.localizedTextTestText.REQ" /></Request>
+typesClient;<Request ID="419" Action="CREATE"><Connection Source="TypeTest_3.localizedTextTestText.CNF" Destination="TypeTest_3.F_EQ_Text_2.REQ" /></Request>
+typesClient;<Request ID="420" Action="CREATE"><Connection Source="TypeTest_3.GET_STRUCT_VALUE_1.CNF" Destination="TypeTest_3.STRING2STRING_1.REQ" /></Request>
+typesClient;<Request ID="421" Action="CREATE"><Connection Source="TypeTest_3.STRING2STRING.CNF" Destination="TypeTest_3.GET_STRUCT_VALUE_1.REQ" /></Request>
+typesClient;<Request ID="422" Action="CREATE"><Connection Source="TypeTest_3.GET_STRUCT_VALUE.CNF" Destination="TypeTest_3.STRING2STRING.REQ" /></Request>
+typesClient;<Request ID="423" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Text_2.CNF" Destination="TypeTest_3.localizedTextTestLocale.REQ" /></Request>
+typesClient;<Request ID="424" Action="CREATE"><Connection Source="TypeTest_3.localizedTextTestLocale.CNF" Destination="E_SR_1.R" /></Request>
+typesClient;<Request ID="425" Action="CREATE"><Connection Source="TypeTest_3.WSTRINGType.CNF" Destination="TypeTest_3.GET_STRUCT_VALUE.REQ" /></Request>
+typesClient;<Request ID="426" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool.OUT" Destination="TypeTest_3.BollType.check" /></Request>
+typesClient;<Request ID="427" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_SINT.OUT" Destination="TypeTest_3.SINTType.check" /></Request>
+typesClient;<Request ID="428" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_INT.OUT" Destination="TypeTest_3.INTType.check" /></Request>
+typesClient;<Request ID="429" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DINT.OUT" Destination="TypeTest_3.DINType.check" /></Request>
+typesClient;<Request ID="430" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_UINT.OUT" Destination="TypeTest_3.UINTType.check" /></Request>
+typesClient;<Request ID="431" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LINT.OUT" Destination="TypeTest_3.LINTType.check" /></Request>
+typesClient;<Request ID="432" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_USINT.OUT" Destination="TypeTest_3.USINTType.check" /></Request>
+typesClient;<Request ID="433" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_UDINT.OUT" Destination="TypeTest_3.UDINTType.check" /></Request>
+typesClient;<Request ID="434" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_WORD.OUT" Destination="TypeTest_3.WORDType.check" /></Request>
+typesClient;<Request ID="435" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_ULINT.OUT" Destination="TypeTest_3.ULINTType.check" /></Request>
+typesClient;<Request ID="436" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_BYTE.OUT" Destination="TypeTest_3.BYTEType.check" /></Request>
+typesClient;<Request ID="437" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DWORD.OUT" Destination="TypeTest_3.DWORDType.check" /></Request>
+typesClient;<Request ID="438" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_TOD.OUT" Destination="TypeTest_3.TODType.check" /></Request>
+typesClient;<Request ID="439" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LWORD.OUT" Destination="TypeTest_3.LWORDType.check" /></Request>
+typesClient;<Request ID="440" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool_WSTRING.OUT" Destination="TypeTest_3.WSTRINGType.check" /></Request>
+typesClient;<Request ID="441" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_LREAL.OUT" Destination="TypeTest_3.LREALType.check" /></Request>
+typesClient;<Request ID="442" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DATE.OUT" Destination="TypeTest_3.DATEType.check" /></Request>
+typesClient;<Request ID="443" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Bool_STRING.OUT" Destination="TypeTest_3.STRINGType.check" /></Request>
+typesClient;<Request ID="444" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_TIME.OUT" Destination="TypeTest_3.TIMEType.check" /></Request>
+typesClient;<Request ID="445" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_REAL.OUT" Destination="TypeTest_3.REALType.check" /></Request>
+typesClient;<Request ID="446" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_DT.OUT" Destination="TypeTest_3.DTType.check" /></Request>
+typesClient;<Request ID="447" Action="CREATE"><Connection Source="TypeTest_3.GET_STRUCT_VALUE_1.output" Destination="TypeTest_3.STRING2STRING_1.IN" /></Request>
+typesClient;<Request ID="448" Action="CREATE"><Connection Source="TypeTest_3.STRING2STRING.OUT" Destination="TypeTest_3.F_EQ_Text.IN1" /></Request>
+typesClient;<Request ID="449" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Text.OUT" Destination="TypeTest_3.localizedTextTestText.check" /></Request>
+typesClient;<Request ID="450" Action="CREATE"><Connection Source="TypeTest_3.GET_STRUCT_VALUE.output" Destination="TypeTest_3.STRING2STRING.IN" /></Request>
+typesClient;<Request ID="451" Action="CREATE"><Connection Source="TypeTest_3.F_EQ_Text_2.OUT" Destination="TypeTest_3.localizedTextTestLocale.check" /></Request>
+typesClient;<Request ID="452" Action="CREATE"><Connection Source="TypeTest_3.STRING2STRING_1.OUT" Destination="TypeTest_3.F_EQ_Text_2.IN1" /></Request>
+typesClient;<Request ID="453" Action="CREATE"><Connection Source="AllTypes_2.F_LINT_TO_INT.CNF" Destination="AllTypes_2.F_INT_TO_LINT.REQ" /></Request>
+typesClient;<Request ID="454" Action="CREATE"><Connection Source="AllTypes_2.F_ULINT_TO_INT.CNF" Destination="AllTypes_2.F_INT_TO_ULINT.REQ" /></Request>
+typesClient;<Request ID="455" Action="CREATE"><Connection Source="AllTypes_2.F_LWORD_TO_INT.CNF" Destination="AllTypes_2.F_INT_TO_LWORD.REQ" /></Request>
+typesClient;<Request ID="456" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL.CNF" Destination="AllTypes_2.SINT2SINT.REQ" /></Request>
+typesClient;<Request ID="457" Action="CREATE"><Connection Source="AllTypes_2.SINT2SINT.CNF" Destination="AllTypes_2.INT2INT.REQ" /></Request>
+typesClient;<Request ID="458" Action="CREATE"><Connection Source="AllTypes_2.INT2INT.CNF" Destination="AllTypes_2.DINT2DINT.REQ" /></Request>
+typesClient;<Request ID="459" Action="CREATE"><Connection Source="AllTypes_2.DINT2DINT.CNF" Destination="AllTypes_2.F_LINT_TO_INT.REQ" /></Request>
+typesClient;<Request ID="460" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_LINT.CNF" Destination="AllTypes_2.USINT2USINT.REQ" /></Request>
+typesClient;<Request ID="461" Action="CREATE"><Connection Source="AllTypes_2.USINT2USINT.CNF" Destination="AllTypes_2.UINT2UINT.REQ" /></Request>
+typesClient;<Request ID="462" Action="CREATE"><Connection Source="AllTypes_2.UINT2UINT.CNF" Destination="AllTypes_2.UDINT2UDINT.REQ" /></Request>
+typesClient;<Request ID="463" Action="CREATE"><Connection Source="AllTypes_2.UDINT2UDINT.CNF" Destination="AllTypes_2.F_ULINT_TO_INT.REQ" /></Request>
+typesClient;<Request ID="464" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_ULINT.CNF" Destination="AllTypes_2.BYTE2BYTE.REQ" /></Request>
+typesClient;<Request ID="465" Action="CREATE"><Connection Source="AllTypes_2.BYTE2BYTE.CNF" Destination="AllTypes_2.WORD2WORD.REQ" /></Request>
+typesClient;<Request ID="466" Action="CREATE"><Connection Source="AllTypes_2.WORD2WORD.CNF" Destination="AllTypes_2.DWORD2DWORD.REQ" /></Request>
+typesClient;<Request ID="467" Action="CREATE"><Connection Source="AllTypes_2.DWORD2DWORD.CNF" Destination="AllTypes_2.F_LWORD_TO_INT.REQ" /></Request>
+typesClient;<Request ID="468" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_LWORD.CNF" Destination="AllTypes_2.BOOL2BOOL_1.REQ" /></Request>
+typesClient;<Request ID="469" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_1.CNF" Destination="AllTypes_2.BOOL2BOOL_2.REQ" /></Request>
+typesClient;<Request ID="470" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_2.CNF" Destination="AllTypes_2.BOOL2BOOL_3.REQ" /></Request>
+typesClient;<Request ID="471" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_3.CNF" Destination="AllTypes_2.TIME2TIME.REQ" /></Request>
+typesClient;<Request ID="472" Action="CREATE"><Connection Source="AllTypes_2.TIME2TIME.CNF" Destination="AllTypes_2.REAL2REAL.REQ" /></Request>
+typesClient;<Request ID="473" Action="CREATE"><Connection Source="AllTypes_2.REAL2REAL.CNF" Destination="AllTypes_2.LREAL2LREAL.REQ" /></Request>
+typesClient;<Request ID="474" Action="CREATE"><Connection Source="AllTypes_2.LREAL2LREAL.CNF" Destination="AllTypes_2.STRING2STRING.REQ" /></Request>
+typesClient;<Request ID="475" Action="CREATE"><Connection Source="AllTypes_2.STRING2STRING.CNF" Destination="AllTypes_2.WSTRING2WSTRING.REQ" /></Request>
+typesClient;<Request ID="476" Action="CREATE"><Connection Source="AllTypes_2.LocalizedText2LocalizedText.CNF" Destination="TypeTest_2.F_EQ_Bool.REQ" /></Request>
+typesClient;<Request ID="477" Action="CREATE"><Connection Source="AllTypes_2.WSTRING2WSTRING.CNF" Destination="AllTypes_2.LocalizedText2LocalizedText.REQ" /></Request>
+typesClient;<Request ID="478" Action="CREATE"><Connection Source="AllTypes_2.SINT2SINT.OUT" Destination="TypeTest_2.F_EQ_SINT.IN1" /></Request>
+typesClient;<Request ID="479" Action="CREATE"><Connection Source="AllTypes_2.INT2INT.OUT" Destination="TypeTest_2.F_EQ_INT.IN1" /></Request>
+typesClient;<Request ID="480" Action="CREATE"><Connection Source="AllTypes_2.DINT2DINT.OUT" Destination="TypeTest_2.F_EQ_DINT.IN1" /></Request>
+typesClient;<Request ID="481" Action="CREATE"><Connection Source="AllTypes_2.F_LINT_TO_INT.OUT" Destination="AllTypes_2.F_INT_TO_LINT.IN" /></Request>
+typesClient;<Request ID="482" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_LINT.OUT" Destination="TypeTest_2.F_EQ_LINT.IN1" /></Request>
+typesClient;<Request ID="483" Action="CREATE"><Connection Source="AllTypes_2.USINT2USINT.OUT" Destination="TypeTest_2.F_EQ_USINT.IN1" /></Request>
+typesClient;<Request ID="484" Action="CREATE"><Connection Source="AllTypes_2.UINT2UINT.OUT" Destination="TypeTest_2.F_EQ_UINT.IN1" /></Request>
+typesClient;<Request ID="485" Action="CREATE"><Connection Source="AllTypes_2.UDINT2UDINT.OUT" Destination="TypeTest_2.F_EQ_UDINT.IN1" /></Request>
+typesClient;<Request ID="486" Action="CREATE"><Connection Source="AllTypes_2.F_ULINT_TO_INT.OUT" Destination="AllTypes_2.F_INT_TO_ULINT.IN" /></Request>
+typesClient;<Request ID="487" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_ULINT.OUT" Destination="TypeTest_2.F_EQ_ULINT.IN1" /></Request>
+typesClient;<Request ID="488" Action="CREATE"><Connection Source="AllTypes_2.BYTE2BYTE.OUT" Destination="TypeTest_2.F_EQ_BYTE.IN1" /></Request>
+typesClient;<Request ID="489" Action="CREATE"><Connection Source="AllTypes_2.WORD2WORD.OUT" Destination="TypeTest_2.F_EQ_WORD.IN1" /></Request>
+typesClient;<Request ID="490" Action="CREATE"><Connection Source="AllTypes_2.DWORD2DWORD.OUT" Destination="TypeTest_2.F_EQ_DWORD.IN1" /></Request>
+typesClient;<Request ID="491" Action="CREATE"><Connection Source="AllTypes_2.F_LWORD_TO_INT.OUT" Destination="AllTypes_2.F_INT_TO_LWORD.IN" /></Request>
+typesClient;<Request ID="492" Action="CREATE"><Connection Source="AllTypes_2.F_INT_TO_LWORD.OUT" Destination="TypeTest_2.F_EQ_LWORD.IN1" /></Request>
+typesClient;<Request ID="493" Action="CREATE"><Connection Source="AllTypes_2.WSTRING2WSTRING.OUT" Destination="TypeTest_2.F_EQ_Bool_WSTRING.IN1" /></Request>
+typesClient;<Request ID="494" Action="CREATE"><Connection Source="AllTypes_2.STRING2STRING.OUT" Destination="TypeTest_2.F_EQ_Bool_STRING.IN1" /></Request>
+typesClient;<Request ID="495" Action="CREATE"><Connection Source="AllTypes_2.LREAL2LREAL.OUT" Destination="TypeTest_2.F_EQ_LREAL.IN1" /></Request>
+typesClient;<Request ID="496" Action="CREATE"><Connection Source="AllTypes_2.REAL2REAL.OUT" Destination="TypeTest_2.F_EQ_REAL.IN1" /></Request>
+typesClient;<Request ID="497" Action="CREATE"><Connection Source="AllTypes_2.TIME2TIME.OUT" Destination="TypeTest_2.F_EQ_TIME.IN1" /></Request>
+typesClient;<Request ID="498" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_1.OUT" Destination="TypeTest_2.F_EQ_DATE.IN1" /></Request>
+typesClient;<Request ID="499" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_2.OUT" Destination="TypeTest_2.F_EQ_TOD.IN1" /></Request>
+typesClient;<Request ID="500" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL_3.OUT" Destination="TypeTest_2.F_EQ_DT.IN1" /></Request>
+typesClient;<Request ID="501" Action="CREATE"><Connection Source="AllTypes_2.BOOL2BOOL.OUT" Destination="TypeTest_2.F_EQ_Bool.IN1" /></Request>
+typesClient;<Request ID="502" Action="CREATE"><Connection Source="AllTypes_2.LocalizedText2LocalizedText.OUT" Destination="TypeTest_2.GET_STRUCT_VALUE_1.in_struct" /></Request>
+typesClient;<Request ID="503" Action="CREATE"><Connection Source="AllTypes_2.LocalizedText2LocalizedText.OUT" Destination="TypeTest_2.GET_STRUCT_VALUE.in_struct" /></Request>
+typesClient;<Request ID="504" Action="CREATE"><Connection Source="AllTypes_3.F_LINT_TO_INT.CNF" Destination="AllTypes_3.F_INT_TO_LINT.REQ" /></Request>
+typesClient;<Request ID="505" Action="CREATE"><Connection Source="AllTypes_3.F_ULINT_TO_INT.CNF" Destination="AllTypes_3.F_INT_TO_ULINT.REQ" /></Request>
+typesClient;<Request ID="506" Action="CREATE"><Connection Source="AllTypes_3.F_LWORD_TO_INT.CNF" Destination="AllTypes_3.F_INT_TO_LWORD.REQ" /></Request>
+typesClient;<Request ID="507" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL.CNF" Destination="AllTypes_3.SINT2SINT.REQ" /></Request>
+typesClient;<Request ID="508" Action="CREATE"><Connection Source="AllTypes_3.SINT2SINT.CNF" Destination="AllTypes_3.INT2INT.REQ" /></Request>
+typesClient;<Request ID="509" Action="CREATE"><Connection Source="AllTypes_3.INT2INT.CNF" Destination="AllTypes_3.DINT2DINT.REQ" /></Request>
+typesClient;<Request ID="510" Action="CREATE"><Connection Source="AllTypes_3.DINT2DINT.CNF" Destination="AllTypes_3.F_LINT_TO_INT.REQ" /></Request>
+typesClient;<Request ID="511" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_LINT.CNF" Destination="AllTypes_3.USINT2USINT.REQ" /></Request>
+typesClient;<Request ID="512" Action="CREATE"><Connection Source="AllTypes_3.USINT2USINT.CNF" Destination="AllTypes_3.UINT2UINT.REQ" /></Request>
+typesClient;<Request ID="513" Action="CREATE"><Connection Source="AllTypes_3.UINT2UINT.CNF" Destination="AllTypes_3.UDINT2UDINT.REQ" /></Request>
+typesClient;<Request ID="514" Action="CREATE"><Connection Source="AllTypes_3.UDINT2UDINT.CNF" Destination="AllTypes_3.F_ULINT_TO_INT.REQ" /></Request>
+typesClient;<Request ID="515" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_ULINT.CNF" Destination="AllTypes_3.BYTE2BYTE.REQ" /></Request>
+typesClient;<Request ID="516" Action="CREATE"><Connection Source="AllTypes_3.BYTE2BYTE.CNF" Destination="AllTypes_3.WORD2WORD.REQ" /></Request>
+typesClient;<Request ID="517" Action="CREATE"><Connection Source="AllTypes_3.WORD2WORD.CNF" Destination="AllTypes_3.DWORD2DWORD.REQ" /></Request>
+typesClient;<Request ID="518" Action="CREATE"><Connection Source="AllTypes_3.DWORD2DWORD.CNF" Destination="AllTypes_3.F_LWORD_TO_INT.REQ" /></Request>
+typesClient;<Request ID="519" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_LWORD.CNF" Destination="AllTypes_3.BOOL2BOOL_1.REQ" /></Request>
+typesClient;<Request ID="520" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_1.CNF" Destination="AllTypes_3.BOOL2BOOL_2.REQ" /></Request>
+typesClient;<Request ID="521" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_2.CNF" Destination="AllTypes_3.BOOL2BOOL_3.REQ" /></Request>
+typesClient;<Request ID="522" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_3.CNF" Destination="AllTypes_3.TIME2TIME.REQ" /></Request>
+typesClient;<Request ID="523" Action="CREATE"><Connection Source="AllTypes_3.TIME2TIME.CNF" Destination="AllTypes_3.REAL2REAL.REQ" /></Request>
+typesClient;<Request ID="524" Action="CREATE"><Connection Source="AllTypes_3.REAL2REAL.CNF" Destination="AllTypes_3.LREAL2LREAL.REQ" /></Request>
+typesClient;<Request ID="525" Action="CREATE"><Connection Source="AllTypes_3.LREAL2LREAL.CNF" Destination="AllTypes_3.STRING2STRING.REQ" /></Request>
+typesClient;<Request ID="526" Action="CREATE"><Connection Source="AllTypes_3.STRING2STRING.CNF" Destination="AllTypes_3.WSTRING2WSTRING.REQ" /></Request>
+typesClient;<Request ID="527" Action="CREATE"><Connection Source="AllTypes_3.LocalizedText2LocalizedText.CNF" Destination="TypeTest_3.F_EQ_Bool.REQ" /></Request>
+typesClient;<Request ID="528" Action="CREATE"><Connection Source="AllTypes_3.WSTRING2WSTRING.CNF" Destination="AllTypes_3.LocalizedText2LocalizedText.REQ" /></Request>
+typesClient;<Request ID="529" Action="CREATE"><Connection Source="AllTypes_3.SINT2SINT.OUT" Destination="TypeTest_3.F_EQ_SINT.IN1" /></Request>
+typesClient;<Request ID="530" Action="CREATE"><Connection Source="AllTypes_3.INT2INT.OUT" Destination="TypeTest_3.F_EQ_INT.IN1" /></Request>
+typesClient;<Request ID="531" Action="CREATE"><Connection Source="AllTypes_3.DINT2DINT.OUT" Destination="TypeTest_3.F_EQ_DINT.IN1" /></Request>
+typesClient;<Request ID="532" Action="CREATE"><Connection Source="AllTypes_3.F_LINT_TO_INT.OUT" Destination="AllTypes_3.F_INT_TO_LINT.IN" /></Request>
+typesClient;<Request ID="533" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_LINT.OUT" Destination="TypeTest_3.F_EQ_LINT.IN1" /></Request>
+typesClient;<Request ID="534" Action="CREATE"><Connection Source="AllTypes_3.USINT2USINT.OUT" Destination="TypeTest_3.F_EQ_USINT.IN1" /></Request>
+typesClient;<Request ID="535" Action="CREATE"><Connection Source="AllTypes_3.UINT2UINT.OUT" Destination="TypeTest_3.F_EQ_UINT.IN1" /></Request>
+typesClient;<Request ID="536" Action="CREATE"><Connection Source="AllTypes_3.UDINT2UDINT.OUT" Destination="TypeTest_3.F_EQ_UDINT.IN1" /></Request>
+typesClient;<Request ID="537" Action="CREATE"><Connection Source="AllTypes_3.F_ULINT_TO_INT.OUT" Destination="AllTypes_3.F_INT_TO_ULINT.IN" /></Request>
+typesClient;<Request ID="538" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_ULINT.OUT" Destination="TypeTest_3.F_EQ_ULINT.IN1" /></Request>
+typesClient;<Request ID="539" Action="CREATE"><Connection Source="AllTypes_3.BYTE2BYTE.OUT" Destination="TypeTest_3.F_EQ_BYTE.IN1" /></Request>
+typesClient;<Request ID="540" Action="CREATE"><Connection Source="AllTypes_3.WORD2WORD.OUT" Destination="TypeTest_3.F_EQ_WORD.IN1" /></Request>
+typesClient;<Request ID="541" Action="CREATE"><Connection Source="AllTypes_3.DWORD2DWORD.OUT" Destination="TypeTest_3.F_EQ_DWORD.IN1" /></Request>
+typesClient;<Request ID="542" Action="CREATE"><Connection Source="AllTypes_3.F_LWORD_TO_INT.OUT" Destination="AllTypes_3.F_INT_TO_LWORD.IN" /></Request>
+typesClient;<Request ID="543" Action="CREATE"><Connection Source="AllTypes_3.F_INT_TO_LWORD.OUT" Destination="TypeTest_3.F_EQ_LWORD.IN1" /></Request>
+typesClient;<Request ID="544" Action="CREATE"><Connection Source="AllTypes_3.WSTRING2WSTRING.OUT" Destination="TypeTest_3.F_EQ_Bool_WSTRING.IN1" /></Request>
+typesClient;<Request ID="545" Action="CREATE"><Connection Source="AllTypes_3.STRING2STRING.OUT" Destination="TypeTest_3.F_EQ_Bool_STRING.IN1" /></Request>
+typesClient;<Request ID="546" Action="CREATE"><Connection Source="AllTypes_3.LREAL2LREAL.OUT" Destination="TypeTest_3.F_EQ_LREAL.IN1" /></Request>
+typesClient;<Request ID="547" Action="CREATE"><Connection Source="AllTypes_3.REAL2REAL.OUT" Destination="TypeTest_3.F_EQ_REAL.IN1" /></Request>
+typesClient;<Request ID="548" Action="CREATE"><Connection Source="AllTypes_3.TIME2TIME.OUT" Destination="TypeTest_3.F_EQ_TIME.IN1" /></Request>
+typesClient;<Request ID="549" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_1.OUT" Destination="TypeTest_3.F_EQ_DATE.IN1" /></Request>
+typesClient;<Request ID="550" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_2.OUT" Destination="TypeTest_3.F_EQ_TOD.IN1" /></Request>
+typesClient;<Request ID="551" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL_3.OUT" Destination="TypeTest_3.F_EQ_DT.IN1" /></Request>
+typesClient;<Request ID="552" Action="CREATE"><Connection Source="AllTypes_3.BOOL2BOOL.OUT" Destination="TypeTest_3.F_EQ_Bool.IN1" /></Request>
+typesClient;<Request ID="553" Action="CREATE"><Connection Source="AllTypes_3.LocalizedText2LocalizedText.OUT" Destination="TypeTest_3.GET_STRUCT_VALUE.in_struct" /></Request>
+typesClient;<Request ID="554" Action="CREATE"><Connection Source="AllTypes_3.LocalizedText2LocalizedText.OUT" Destination="TypeTest_3.GET_STRUCT_VALUE_1.in_struct" /></Request>
+typesClient;<Request ID="555" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool.CNF" Destination="TypeTest_2.BollType.REQ" /></Request>
+typesClient;<Request ID="556" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_SINT.CNF" Destination="TypeTest_2.SINTType.REQ" /></Request>
+typesClient;<Request ID="557" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_INT.CNF" Destination="TypeTest_2.INTType.REQ" /></Request>
+typesClient;<Request ID="558" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DINT.CNF" Destination="TypeTest_2.DINType.REQ" /></Request>
+typesClient;<Request ID="559" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_UINT.CNF" Destination="TypeTest_2.UINTType.REQ" /></Request>
+typesClient;<Request ID="560" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_UDINT.CNF" Destination="TypeTest_2.UDINTType.REQ" /></Request>
+typesClient;<Request ID="561" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_USINT.CNF" Destination="TypeTest_2.USINTType.REQ" /></Request>
+typesClient;<Request ID="562" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LINT.CNF" Destination="TypeTest_2.LINTType.REQ" /></Request>
+typesClient;<Request ID="563" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_WORD.CNF" Destination="TypeTest_2.WORDType.REQ" /></Request>
+typesClient;<Request ID="564" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DWORD.CNF" Destination="TypeTest_2.DWORDType.REQ" /></Request>
+typesClient;<Request ID="565" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_BYTE.CNF" Destination="TypeTest_2.BYTEType.REQ" /></Request>
+typesClient;<Request ID="566" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_ULINT.CNF" Destination="TypeTest_2.ULINTType.REQ" /></Request>
+typesClient;<Request ID="567" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_REAL.CNF" Destination="TypeTest_2.REALType.REQ" /></Request>
+typesClient;<Request ID="568" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_TOD.CNF" Destination="TypeTest_2.TODType.REQ" /></Request>
+typesClient;<Request ID="569" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool_STRING.CNF" Destination="TypeTest_2.STRINGType.REQ" /></Request>
+typesClient;<Request ID="570" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LREAL.CNF" Destination="TypeTest_2.LREALType.REQ" /></Request>
+typesClient;<Request ID="571" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DT.CNF" Destination="TypeTest_2.DTType.REQ" /></Request>
+typesClient;<Request ID="572" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool_WSTRING.CNF" Destination="TypeTest_2.WSTRINGType.REQ" /></Request>
+typesClient;<Request ID="573" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LWORD.CNF" Destination="TypeTest_2.LWORDType.REQ" /></Request>
+typesClient;<Request ID="574" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DATE.CNF" Destination="TypeTest_2.DATEType.REQ" /></Request>
+typesClient;<Request ID="575" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_TIME.CNF" Destination="TypeTest_2.TIMEType.REQ" /></Request>
+typesClient;<Request ID="576" Action="CREATE"><Connection Source="TypeTest_2.BollType.CNF" Destination="TypeTest_2.F_EQ_SINT.REQ" /></Request>
+typesClient;<Request ID="577" Action="CREATE"><Connection Source="TypeTest_2.SINTType.CNF" Destination="TypeTest_2.F_EQ_INT.REQ" /></Request>
+typesClient;<Request ID="578" Action="CREATE"><Connection Source="TypeTest_2.INTType.CNF" Destination="TypeTest_2.F_EQ_DINT.REQ" /></Request>
+typesClient;<Request ID="579" Action="CREATE"><Connection Source="TypeTest_2.DINType.CNF" Destination="TypeTest_2.F_EQ_LINT.REQ" /></Request>
+typesClient;<Request ID="580" Action="CREATE"><Connection Source="TypeTest_2.LINTType.CNF" Destination="TypeTest_2.F_EQ_USINT.REQ" /></Request>
+typesClient;<Request ID="581" Action="CREATE"><Connection Source="TypeTest_2.USINTType.CNF" Destination="TypeTest_2.F_EQ_UINT.REQ" /></Request>
+typesClient;<Request ID="582" Action="CREATE"><Connection Source="TypeTest_2.UINTType.CNF" Destination="TypeTest_2.F_EQ_UDINT.REQ" /></Request>
+typesClient;<Request ID="583" Action="CREATE"><Connection Source="TypeTest_2.UDINTType.CNF" Destination="TypeTest_2.F_EQ_ULINT.REQ" /></Request>
+typesClient;<Request ID="584" Action="CREATE"><Connection Source="TypeTest_2.ULINTType.CNF" Destination="TypeTest_2.F_EQ_BYTE.REQ" /></Request>
+typesClient;<Request ID="585" Action="CREATE"><Connection Source="TypeTest_2.BYTEType.CNF" Destination="TypeTest_2.F_EQ_WORD.REQ" /></Request>
+typesClient;<Request ID="586" Action="CREATE"><Connection Source="TypeTest_2.WORDType.CNF" Destination="TypeTest_2.F_EQ_DWORD.REQ" /></Request>
+typesClient;<Request ID="587" Action="CREATE"><Connection Source="TypeTest_2.DWORDType.CNF" Destination="TypeTest_2.F_EQ_LWORD.REQ" /></Request>
+typesClient;<Request ID="588" Action="CREATE"><Connection Source="TypeTest_2.DATEType.CNF" Destination="TypeTest_2.F_EQ_TOD.REQ" /></Request>
+typesClient;<Request ID="589" Action="CREATE"><Connection Source="TypeTest_2.TODType.CNF" Destination="TypeTest_2.F_EQ_DT.REQ" /></Request>
+typesClient;<Request ID="590" Action="CREATE"><Connection Source="TypeTest_2.DTType.CNF" Destination="TypeTest_2.F_EQ_TIME.REQ" /></Request>
+typesClient;<Request ID="591" Action="CREATE"><Connection Source="TypeTest_2.TIMEType.CNF" Destination="TypeTest_2.F_EQ_REAL.REQ" /></Request>
+typesClient;<Request ID="592" Action="CREATE"><Connection Source="TypeTest_2.REALType.CNF" Destination="TypeTest_2.F_EQ_LREAL.REQ" /></Request>
+typesClient;<Request ID="593" Action="CREATE"><Connection Source="TypeTest_2.LREALType.CNF" Destination="TypeTest_2.F_EQ_Bool_STRING.REQ" /></Request>
+typesClient;<Request ID="594" Action="CREATE"><Connection Source="TypeTest_2.STRINGType.CNF" Destination="TypeTest_2.F_EQ_Bool_WSTRING.REQ" /></Request>
+typesClient;<Request ID="595" Action="CREATE"><Connection Source="TypeTest_2.LWORDType.CNF" Destination="TypeTest_2.F_EQ_REAL.REQ" /></Request>
+typesClient;<Request ID="596" Action="CREATE"><Connection Source="TypeTest_2.GET_STRUCT_VALUE_1.CNF" Destination="TypeTest_2.STRING2STRING_1.REQ" /></Request>
+typesClient;<Request ID="597" Action="CREATE"><Connection Source="TypeTest_2.STRING2STRING_1.CNF" Destination="TypeTest_2.F_EQ_Text.REQ" /></Request>
+typesClient;<Request ID="598" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Text_2.CNF" Destination="TypeTest_2.localizedTextTestLocale.REQ" /></Request>
+typesClient;<Request ID="599" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Text.CNF" Destination="TypeTest_2.localizedTextTestText.REQ" /></Request>
+typesClient;<Request ID="600" Action="CREATE"><Connection Source="TypeTest_2.STRING2STRING.CNF" Destination="TypeTest_2.GET_STRUCT_VALUE_1.REQ" /></Request>
+typesClient;<Request ID="601" Action="CREATE"><Connection Source="TypeTest_2.localizedTextTestText.CNF" Destination="TypeTest_2.F_EQ_Text_2.REQ" /></Request>
+typesClient;<Request ID="602" Action="CREATE"><Connection Source="TypeTest_2.GET_STRUCT_VALUE.CNF" Destination="TypeTest_2.STRING2STRING.REQ" /></Request>
+typesClient;<Request ID="603" Action="CREATE"><Connection Source="TypeTest_2.localizedTextTestLocale.CNF" Destination="SubApp_2.BOOL2BOOL_4.REQ" /></Request>
+typesClient;<Request ID="604" Action="CREATE"><Connection Source="TypeTest_2.WSTRINGType.CNF" Destination="TypeTest_2.GET_STRUCT_VALUE.REQ" /></Request>
+typesClient;<Request ID="605" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool.OUT" Destination="TypeTest_2.BollType.check" /></Request>
+typesClient;<Request ID="606" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_SINT.OUT" Destination="TypeTest_2.SINTType.check" /></Request>
+typesClient;<Request ID="607" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_INT.OUT" Destination="TypeTest_2.INTType.check" /></Request>
+typesClient;<Request ID="608" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DINT.OUT" Destination="TypeTest_2.DINType.check" /></Request>
+typesClient;<Request ID="609" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_UINT.OUT" Destination="TypeTest_2.UINTType.check" /></Request>
+typesClient;<Request ID="610" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LINT.OUT" Destination="TypeTest_2.LINTType.check" /></Request>
+typesClient;<Request ID="611" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_USINT.OUT" Destination="TypeTest_2.USINTType.check" /></Request>
+typesClient;<Request ID="612" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_UDINT.OUT" Destination="TypeTest_2.UDINTType.check" /></Request>
+typesClient;<Request ID="613" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_WORD.OUT" Destination="TypeTest_2.WORDType.check" /></Request>
+typesClient;<Request ID="614" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_ULINT.OUT" Destination="TypeTest_2.ULINTType.check" /></Request>
+typesClient;<Request ID="615" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_BYTE.OUT" Destination="TypeTest_2.BYTEType.check" /></Request>
+typesClient;<Request ID="616" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DWORD.OUT" Destination="TypeTest_2.DWORDType.check" /></Request>
+typesClient;<Request ID="617" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_TOD.OUT" Destination="TypeTest_2.TODType.check" /></Request>
+typesClient;<Request ID="618" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LWORD.OUT" Destination="TypeTest_2.LWORDType.check" /></Request>
+typesClient;<Request ID="619" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool_WSTRING.OUT" Destination="TypeTest_2.WSTRINGType.check" /></Request>
+typesClient;<Request ID="620" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_LREAL.OUT" Destination="TypeTest_2.LREALType.check" /></Request>
+typesClient;<Request ID="621" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DATE.OUT" Destination="TypeTest_2.DATEType.check" /></Request>
+typesClient;<Request ID="622" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Bool_STRING.OUT" Destination="TypeTest_2.STRINGType.check" /></Request>
+typesClient;<Request ID="623" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_TIME.OUT" Destination="TypeTest_2.TIMEType.check" /></Request>
+typesClient;<Request ID="624" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_REAL.OUT" Destination="TypeTest_2.REALType.check" /></Request>
+typesClient;<Request ID="625" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_DT.OUT" Destination="TypeTest_2.DTType.check" /></Request>
+typesClient;<Request ID="626" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Text_2.OUT" Destination="TypeTest_2.localizedTextTestLocale.check" /></Request>
+typesClient;<Request ID="627" Action="CREATE"><Connection Source="TypeTest_2.STRING2STRING.OUT" Destination="TypeTest_2.F_EQ_Text.IN1" /></Request>
+typesClient;<Request ID="628" Action="CREATE"><Connection Source="TypeTest_2.GET_STRUCT_VALUE_1.output" Destination="TypeTest_2.STRING2STRING_1.IN" /></Request>
+typesClient;<Request ID="629" Action="CREATE"><Connection Source="TypeTest_2.STRING2STRING_1.OUT" Destination="TypeTest_2.F_EQ_Text_2.IN1" /></Request>
+typesClient;<Request ID="630" Action="CREATE"><Connection Source="TypeTest_2.F_EQ_Text.OUT" Destination="TypeTest_2.localizedTextTestText.check" /></Request>
+typesClient;<Request ID="631" Action="CREATE"><Connection Source="TypeTest_2.GET_STRUCT_VALUE.output" Destination="TypeTest_2.STRING2STRING.IN" /></Request>
+typesClient;<Request ID="632" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.CNF" Destination="HandleInit.E_DEMUX_2_1.EI" /></Request>
+typesClient;<Request ID="633" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO1" Destination="HandleInit.PUBLISH_0_1.INIT" /></Request>
+typesClient;<Request ID="634" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.INITO" Destination="HandleInit.PUBLISH_0_1.REQ" /></Request>
+typesClient;<Request ID="635" Action="CREATE"><Connection Source="HandleInit.PUBLISH_0_1.CNF" Destination="HandleInit.STEST_END_1.REQ" /></Request>
+typesClient;<Request ID="636" Action="CREATE"><Connection Source="HandleInit.E_DELAY.EO" Destination="SubApp.BOOL2BOOL_4.REQ" /></Request>
+typesClient;<Request ID="637" Action="CREATE"><Connection Source="HandleInit.E_DEMUX_2_1.EO2" Destination="HandleInit.E_DELAY.START" /></Request>
+typesClient;<Request ID="638" Action="CREATE"><Connection Source="HandleInit.F_BOOL_TO_UINT_1.OUT" Destination="HandleInit.E_DEMUX_2_1.K" /></Request>
+typesClient;<Request ID="639" Action="CREATE"><Connection Source="SubApp.SINT2SINT_1.CNF" Destination="SubApp.INT2INT_1.REQ" /></Request>
+typesClient;<Request ID="640" Action="CREATE"><Connection Source="SubApp.INT2INT_1.CNF" Destination="SubApp.DINT2DINT_1.REQ" /></Request>
+typesClient;<Request ID="641" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_1_1.CNF" Destination="SubApp.BOOL2BOOL_2_1.REQ" /></Request>
+typesClient;<Request ID="642" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_2_1.CNF" Destination="SubApp.BOOL2BOOL_3_1.REQ" /></Request>
+typesClient;<Request ID="643" Action="CREATE"><Connection Source="SubApp.UINT2UINT_1.CNF" Destination="SubApp.UDINT2UDINT_1.REQ" /></Request>
+typesClient;<Request ID="644" Action="CREATE"><Connection Source="SubApp.UDINT2UDINT_1.CNF" Destination="SubApp.F_ULINT_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="645" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_4.CNF" Destination="SubApp.SINT2SINT_1.REQ" /></Request>
+typesClient;<Request ID="646" Action="CREATE"><Connection Source="SubApp.F_LWORD_TO_INT_1.CNF" Destination="SubApp.F_INT_TO_LWORD_1.REQ" /></Request>
+typesClient;<Request ID="647" Action="CREATE"><Connection Source="SubApp.F_INT_TO_LWORD_1.CNF" Destination="SubApp.BOOL2BOOL_1_1.REQ" /></Request>
+typesClient;<Request ID="648" Action="CREATE"><Connection Source="SubApp.F_LINT_TO_INT_1.CNF" Destination="SubApp.F_INT_TO_LINT_1.REQ" /></Request>
+typesClient;<Request ID="649" Action="CREATE"><Connection Source="SubApp.F_INT_TO_LINT_1.CNF" Destination="SubApp.USINT2USINT_1.REQ" /></Request>
+typesClient;<Request ID="650" Action="CREATE"><Connection Source="SubApp.TIME2TIME_1.CNF" Destination="SubApp.REAL2REAL_1.REQ" /></Request>
+typesClient;<Request ID="651" Action="CREATE"><Connection Source="SubApp.REAL2REAL_1.CNF" Destination="SubApp.LREAL2LREAL_1.REQ" /></Request>
+typesClient;<Request ID="652" Action="CREATE"><Connection Source="SubApp.STRING2STRING_1.CNF" Destination="SubApp.WSTRING2WSTRING_1.REQ" /></Request>
+typesClient;<Request ID="653" Action="CREATE"><Connection Source="SubApp.BYTE2BYTE_1.CNF" Destination="SubApp.WORD2WORD_1.REQ" /></Request>
+typesClient;<Request ID="654" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_3_1.CNF" Destination="SubApp.TIME2TIME_1.REQ" /></Request>
+typesClient;<Request ID="655" Action="CREATE"><Connection Source="SubApp.DINT2DINT_1.CNF" Destination="SubApp.F_LINT_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="656" Action="CREATE"><Connection Source="SubApp.USINT2USINT_1.CNF" Destination="SubApp.UINT2UINT_1.REQ" /></Request>
+typesClient;<Request ID="657" Action="CREATE"><Connection Source="SubApp.LREAL2LREAL_1.CNF" Destination="SubApp.STRING2STRING_1.REQ" /></Request>
+typesClient;<Request ID="658" Action="CREATE"><Connection Source="SubApp.WORD2WORD_1.CNF" Destination="SubApp.DWORD2DWORD_1.REQ" /></Request>
+typesClient;<Request ID="659" Action="CREATE"><Connection Source="SubApp.DWORD2DWORD_1.CNF" Destination="SubApp.F_LWORD_TO_INT_1.REQ" /></Request>
+typesClient;<Request ID="660" Action="CREATE"><Connection Source="SubApp.F_ULINT_TO_INT_1.CNF" Destination="SubApp.F_INT_TO_ULINT.REQ" /></Request>
+typesClient;<Request ID="661" Action="CREATE"><Connection Source="SubApp.F_INT_TO_ULINT.CNF" Destination="SubApp.BYTE2BYTE_1.REQ" /></Request>
+typesClient;<Request ID="662" Action="CREATE"><Connection Source="SubApp.LocalizedText2LocalizedText.CNF" Destination="RemoteWrite.REQ" /></Request>
+typesClient;<Request ID="663" Action="CREATE"><Connection Source="SubApp.WSTRING2WSTRING_1.CNF" Destination="SubApp.LocalizedText2LocalizedText.REQ" /></Request>
+typesClient;<Request ID="664" Action="CREATE"><Connection Source="SubApp.F_LWORD_TO_INT_1.OUT" Destination="SubApp.F_INT_TO_LWORD_1.IN" /></Request>
+typesClient;<Request ID="665" Action="CREATE"><Connection Source="SubApp.F_LINT_TO_INT_1.OUT" Destination="SubApp.F_INT_TO_LINT_1.IN" /></Request>
+typesClient;<Request ID="666" Action="CREATE"><Connection Source="SubApp.INT2INT_1.OUT" Destination="RemoteWrite.SD_3" /></Request>
+typesClient;<Request ID="667" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_2_1.OUT" Destination="RemoteWrite.SD_15" /></Request>
+typesClient;<Request ID="668" Action="CREATE"><Connection Source="SubApp.UDINT2UDINT_1.OUT" Destination="RemoteWrite.SD_8" /></Request>
+typesClient;<Request ID="669" Action="CREATE"><Connection Source="SubApp.SINT2SINT_1.OUT" Destination="RemoteWrite.SD_2" /></Request>
+typesClient;<Request ID="670" Action="CREATE"><Connection Source="SubApp.F_INT_TO_LWORD_1.OUT" Destination="RemoteWrite.SD_13" /></Request>
+typesClient;<Request ID="671" Action="CREATE"><Connection Source="SubApp.F_INT_TO_LINT_1.OUT" Destination="RemoteWrite.SD_5" /></Request>
+typesClient;<Request ID="672" Action="CREATE"><Connection Source="SubApp.REAL2REAL_1.OUT" Destination="RemoteWrite.SD_18" /></Request>
+typesClient;<Request ID="673" Action="CREATE"><Connection Source="SubApp.WSTRING2WSTRING_1.OUT" Destination="RemoteWrite.SD_21" /></Request>
+typesClient;<Request ID="674" Action="CREATE"><Connection Source="SubApp.BYTE2BYTE_1.OUT" Destination="RemoteWrite.SD_10" /></Request>
+typesClient;<Request ID="675" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_4.OUT" Destination="RemoteWrite.SD_1" /></Request>
+typesClient;<Request ID="676" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_1_1.OUT" Destination="RemoteWrite.SD_14" /></Request>
+typesClient;<Request ID="677" Action="CREATE"><Connection Source="SubApp.BOOL2BOOL_3_1.OUT" Destination="RemoteWrite.SD_16" /></Request>
+typesClient;<Request ID="678" Action="CREATE"><Connection Source="SubApp.UINT2UINT_1.OUT" Destination="RemoteWrite.SD_7" /></Request>
+typesClient;<Request ID="679" Action="CREATE"><Connection Source="SubApp.STRING2STRING_1.OUT" Destination="RemoteWrite.SD_20" /></Request>
+typesClient;<Request ID="680" Action="CREATE"><Connection Source="SubApp.DINT2DINT_1.OUT" Destination="RemoteWrite.SD_4" /></Request>
+typesClient;<Request ID="681" Action="CREATE"><Connection Source="SubApp.LREAL2LREAL_1.OUT" Destination="RemoteWrite.SD_19" /></Request>
+typesClient;<Request ID="682" Action="CREATE"><Connection Source="SubApp.WORD2WORD_1.OUT" Destination="RemoteWrite.SD_11" /></Request>
+typesClient;<Request ID="683" Action="CREATE"><Connection Source="SubApp.USINT2USINT_1.OUT" Destination="RemoteWrite.SD_6" /></Request>
+typesClient;<Request ID="684" Action="CREATE"><Connection Source="SubApp.TIME2TIME_1.OUT" Destination="RemoteWrite.SD_17" /></Request>
+typesClient;<Request ID="685" Action="CREATE"><Connection Source="SubApp.DWORD2DWORD_1.OUT" Destination="RemoteWrite.SD_12" /></Request>
+typesClient;<Request ID="686" Action="CREATE"><Connection Source="SubApp.F_INT_TO_ULINT.OUT" Destination="RemoteWrite.SD_9" /></Request>
+typesClient;<Request ID="687" Action="CREATE"><Connection Source="SubApp.F_ULINT_TO_INT_1.OUT" Destination="SubApp.F_INT_TO_ULINT.IN" /></Request>
+typesClient;<Request ID="688" Action="CREATE"><Connection Source="SubApp.LocalizedText2LocalizedText.OUT" Destination="RemoteWrite.SD_22" /></Request>
+typesClient;<Request ID="689" Action="CREATE"><Connection Source="E_PERMIT.EO" Destination="E_SR_1.S" /></Request>
+typesClient;<Request ID="690" Action="CREATE"><Connection Source="E_SR_2.EO" Destination="E_PERMIT.EI" /></Request>
+typesClient;<Request ID="691" Action="CREATE"><Connection Source="InitFinishedSignal.INITO" Destination="PUBLISH_0.INIT" /></Request>
+typesClient;<Request ID="692" Action="CREATE"><Connection Source="InitFinishedSignal.IND" Destination="PUBLISH_0.REQ" /></Request>
+typesClient;<Request ID="693" Action="CREATE"><Connection Source="PUBLISH_0.CNF" Destination="E_SR_2.S" /></Request>
+typesClient;<Request ID="694" Action="CREATE"><Connection Source="START.COLD" Destination="InitFinishedSignal.INIT" /></Request>
+typesClient;<Request ID="695" Action="CREATE"><Connection Source="START.WARM" Destination="InitFinishedSignal.INIT" /></Request>
+typesClient;<Request ID="696" Action="CREATE"><Connection Source="E_SR_1.EO" Destination="RemoteWrite.INIT" /></Request>
+typesClient;<Request ID="697" Action="CREATE"><Connection Source="RemoteWrite.CNF" Destination="RemoteWriteAll.REQ" /></Request>
+typesClient;<Request ID="698" Action="CREATE"><Connection Source="RemoteWrite.INITO" Destination="RemoteRead.INIT" /></Request>
+typesClient;<Request ID="699" Action="CREATE"><Connection Source="RemoteWriteAll.CNF" Destination="RemoteRead.REQ" /></Request>
+typesClient;<Request ID="700" Action="CREATE"><Connection Source="RemoteRead.CNF" Destination="AllTypes_2.BOOL2BOOL.REQ" /></Request>
+typesClient;<Request ID="701" Action="CREATE"><Connection Source="RemoteRead.INITO" Destination="RemoteCall.INIT" /></Request>
+typesClient;<Request ID="702" Action="CREATE"><Connection Source="RemoteCall.INITO" Destination="HandleInit.F_BOOL_TO_UINT_1.REQ" /></Request>
+typesClient;<Request ID="703" Action="CREATE"><Connection Source="RemoteCall.CNF" Destination="AllTypes_3.BOOL2BOOL.REQ" /></Request>
+typesClient;<Request ID="704" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="HandleInit.F_BOOL_TO_UINT_1.IN" /></Request>
+typesClient;<Request ID="705" Action="CREATE"><Connection Source="E_SR_2.Q" Destination="E_PERMIT.PERMIT" /></Request>
+typesClient;<Request ID="706" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteWrite.QI" /></Request>
+typesClient;<Request ID="707" Action="CREATE"><Connection Source="RemoteWrite.QO" Destination="RemoteWriteAll.check" /></Request>
+typesClient;<Request ID="708" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteRead.QI" /></Request>
+typesClient;<Request ID="709" Action="CREATE"><Connection Source="E_SR_1.Q" Destination="RemoteCall.QI" /></Request>
+typesClient;<Request ID="710" Action="CREATE"><Connection Source="RemoteRead.RD_1" Destination="AllTypes_2.BOOL2BOOL.IN" /></Request>
+typesClient;<Request ID="711" Action="CREATE"><Connection Source="RemoteRead.RD_2" Destination="AllTypes_2.SINT2SINT.IN" /></Request>
+typesClient;<Request ID="712" Action="CREATE"><Connection Source="RemoteRead.RD_3" Destination="AllTypes_2.INT2INT.IN" /></Request>
+typesClient;<Request ID="713" Action="CREATE"><Connection Source="RemoteRead.RD_4" Destination="AllTypes_2.DINT2DINT.IN" /></Request>
+typesClient;<Request ID="714" Action="CREATE"><Connection Source="RemoteRead.RD_5" Destination="AllTypes_2.F_LINT_TO_INT.IN" /></Request>
+typesClient;<Request ID="715" Action="CREATE"><Connection Source="RemoteRead.RD_6" Destination="AllTypes_2.USINT2USINT.IN" /></Request>
+typesClient;<Request ID="716" Action="CREATE"><Connection Source="RemoteRead.RD_7" Destination="AllTypes_2.UINT2UINT.IN" /></Request>
+typesClient;<Request ID="717" Action="CREATE"><Connection Source="RemoteRead.RD_8" Destination="AllTypes_2.UDINT2UDINT.IN" /></Request>
+typesClient;<Request ID="718" Action="CREATE"><Connection Source="RemoteRead.RD_22" Destination="AllTypes_2.LocalizedText2LocalizedText.IN" /></Request>
+typesClient;<Request ID="719" Action="CREATE"><Connection Source="RemoteRead.RD_21" Destination="AllTypes_2.WSTRING2WSTRING.IN" /></Request>
+typesClient;<Request ID="720" Action="CREATE"><Connection Source="RemoteRead.RD_20" Destination="AllTypes_2.STRING2STRING.IN" /></Request>
+typesClient;<Request ID="721" Action="CREATE"><Connection Source="RemoteRead.RD_19" Destination="AllTypes_2.LREAL2LREAL.IN" /></Request>
+typesClient;<Request ID="722" Action="CREATE"><Connection Source="RemoteRead.RD_18" Destination="AllTypes_2.REAL2REAL.IN" /></Request>
+typesClient;<Request ID="723" Action="CREATE"><Connection Source="RemoteRead.RD_17" Destination="AllTypes_2.TIME2TIME.IN" /></Request>
+typesClient;<Request ID="724" Action="CREATE"><Connection Source="RemoteRead.RD_16" Destination="AllTypes_2.BOOL2BOOL_3.IN" /></Request>
+typesClient;<Request ID="725" Action="CREATE"><Connection Source="RemoteRead.RD_15" Destination="AllTypes_2.BOOL2BOOL_2.IN" /></Request>
+typesClient;<Request ID="726" Action="CREATE"><Connection Source="RemoteRead.RD_14" Destination="AllTypes_2.BOOL2BOOL_1.IN" /></Request>
+typesClient;<Request ID="727" Action="CREATE"><Connection Source="RemoteRead.RD_13" Destination="AllTypes_2.F_LWORD_TO_INT.IN" /></Request>
+typesClient;<Request ID="728" Action="CREATE"><Connection Source="RemoteRead.RD_12" Destination="AllTypes_2.DWORD2DWORD.IN" /></Request>
+typesClient;<Request ID="729" Action="CREATE"><Connection Source="RemoteRead.RD_11" Destination="AllTypes_2.WORD2WORD.IN" /></Request>
+typesClient;<Request ID="730" Action="CREATE"><Connection Source="RemoteRead.RD_10" Destination="AllTypes_2.BYTE2BYTE.IN" /></Request>
+typesClient;<Request ID="731" Action="CREATE"><Connection Source="RemoteRead.RD_9" Destination="AllTypes_2.F_ULINT_TO_INT.IN" /></Request>
+typesClient;<Request ID="732" Action="CREATE"><Connection Source="RemoteCall.RD_22" Destination="AllTypes_3.LocalizedText2LocalizedText.IN" /></Request>
+typesClient;<Request ID="733" Action="CREATE"><Connection Source="RemoteCall.RD_21" Destination="AllTypes_3.WSTRING2WSTRING.IN" /></Request>
+typesClient;<Request ID="734" Action="CREATE"><Connection Source="RemoteCall.RD_20" Destination="AllTypes_3.STRING2STRING.IN" /></Request>
+typesClient;<Request ID="735" Action="CREATE"><Connection Source="RemoteCall.RD_19" Destination="AllTypes_3.LREAL2LREAL.IN" /></Request>
+typesClient;<Request ID="736" Action="CREATE"><Connection Source="RemoteCall.RD_18" Destination="AllTypes_3.REAL2REAL.IN" /></Request>
+typesClient;<Request ID="737" Action="CREATE"><Connection Source="RemoteCall.RD_17" Destination="AllTypes_3.TIME2TIME.IN" /></Request>
+typesClient;<Request ID="738" Action="CREATE"><Connection Source="RemoteCall.RD_16" Destination="AllTypes_3.BOOL2BOOL_3.IN" /></Request>
+typesClient;<Request ID="739" Action="CREATE"><Connection Source="RemoteCall.RD_15" Destination="AllTypes_3.BOOL2BOOL_2.IN" /></Request>
+typesClient;<Request ID="740" Action="CREATE"><Connection Source="RemoteCall.RD_14" Destination="AllTypes_3.BOOL2BOOL_1.IN" /></Request>
+typesClient;<Request ID="741" Action="CREATE"><Connection Source="RemoteCall.RD_13" Destination="AllTypes_3.F_LWORD_TO_INT.IN" /></Request>
+typesClient;<Request ID="742" Action="CREATE"><Connection Source="RemoteCall.RD_12" Destination="AllTypes_3.DWORD2DWORD.IN" /></Request>
+typesClient;<Request ID="743" Action="CREATE"><Connection Source="RemoteCall.RD_11" Destination="AllTypes_3.WORD2WORD.IN" /></Request>
+typesClient;<Request ID="744" Action="CREATE"><Connection Source="RemoteCall.RD_10" Destination="AllTypes_3.BYTE2BYTE.IN" /></Request>
+typesClient;<Request ID="745" Action="CREATE"><Connection Source="RemoteCall.RD_9" Destination="AllTypes_3.F_ULINT_TO_INT.IN" /></Request>
+typesClient;<Request ID="746" Action="CREATE"><Connection Source="RemoteCall.RD_8" Destination="AllTypes_3.UDINT2UDINT.IN" /></Request>
+typesClient;<Request ID="747" Action="CREATE"><Connection Source="RemoteCall.RD_7" Destination="AllTypes_3.UINT2UINT.IN" /></Request>
+typesClient;<Request ID="748" Action="CREATE"><Connection Source="RemoteCall.RD_6" Destination="AllTypes_3.USINT2USINT.IN" /></Request>
+typesClient;<Request ID="749" Action="CREATE"><Connection Source="RemoteCall.RD_5" Destination="AllTypes_3.F_LINT_TO_INT.IN" /></Request>
+typesClient;<Request ID="750" Action="CREATE"><Connection Source="RemoteCall.RD_4" Destination="AllTypes_3.DINT2DINT.IN" /></Request>
+typesClient;<Request ID="751" Action="CREATE"><Connection Source="RemoteCall.RD_3" Destination="AllTypes_3.INT2INT.IN" /></Request>
+typesClient;<Request ID="752" Action="CREATE"><Connection Source="RemoteCall.RD_2" Destination="AllTypes_3.SINT2SINT.IN" /></Request>
+typesClient;<Request ID="753" Action="CREATE"><Connection Source="RemoteCall.RD_1" Destination="AllTypes_3.BOOL2BOOL.IN" /></Request>
+typesClient;<Request ID="754" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/typesServer.fboot b/systemtests/src/modules/opc_ua/typesServer.fboot
new file mode 100644
index 0000000..0be33f6
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/typesServer.fboot
@@ -0,0 +1,677 @@
+;<Request ID="1" Action="CREATE"><FB Name="typesServer" Type="EMB_RES" /></Request>
+typesServer;<Request ID="2" Action="CREATE"><FB Name="AllTypes.SINT2SINT" Type="SINT2SINT" /></Request>
+typesServer;<Request ID="3" Action="CREATE"><FB Name="AllTypes.UINT2UINT" Type="UINT2UINT" /></Request>
+typesServer;<Request ID="4" Action="CREATE"><FB Name="AllTypes.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="5" Action="CREATE"><FB Name="AllTypes.UDINT2UDINT" Type="UDINT2UDINT" /></Request>
+typesServer;<Request ID="6" Action="CREATE"><FB Name="AllTypes.DINT2DINT" Type="DINT2DINT" /></Request>
+typesServer;<Request ID="7" Action="CREATE"><FB Name="AllTypes.F_LINT_TO_INT" Type="F_LINT_TO_INT" /></Request>
+typesServer;<Request ID="8" Action="CREATE"><FB Name="AllTypes.INT2INT" Type="INT2INT" /></Request>
+typesServer;<Request ID="9" Action="CREATE"><FB Name="AllTypes.USINT2USINT" Type="USINT2USINT" /></Request>
+typesServer;<Request ID="10" Action="CREATE"><FB Name="AllTypes.F_ULINT_TO_INT" Type="F_ULINT_TO_INT" /></Request>
+typesServer;<Request ID="11" Action="CREATE"><FB Name="AllTypes.BYTE2BYTE" Type="BYTE2BYTE" /></Request>
+typesServer;<Request ID="12" Action="CREATE"><FB Name="AllTypes.WORD2WORD" Type="WORD2WORD" /></Request>
+typesServer;<Request ID="13" Action="CREATE"><FB Name="AllTypes.DWORD2DWORD" Type="DWORD2DWORD" /></Request>
+typesServer;<Request ID="14" Action="CREATE"><FB Name="AllTypes.F_LWORD_TO_INT" Type="F_LWORD_TO_INT" /></Request>
+typesServer;<Request ID="15" Action="CREATE"><FB Name="AllTypes.MISSING_DATE" Type="F_DT_TO_DATE" /></Request>
+typesServer;<Request ID="16" Action="CREATE"><FB Name="AllTypes.MISSING_DATE_AND_TIME" Type="F_DT_TO_TOD" /></Request>
+typesServer;<Request ID="17" Action="CREATE"><FB Name="AllTypes.TIME2TIME" Type="TIME2TIME" /></Request>
+typesServer;<Request ID="18" Action="CREATE"><FB Name="AllTypes.REAL2REAL" Type="REAL2REAL" /></Request>
+typesServer;<Request ID="19" Action="CREATE"><FB Name="AllTypes.LREAL2LREAL" Type="LREAL2LREAL" /></Request>
+typesServer;<Request ID="20" Action="CREATE"><FB Name="AllTypes.STRING2STRING" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="21" Action="CREATE"><FB Name="AllTypes.WSTRING2WSTRING" Type="WSTRING2WSTRING" /></Request>
+typesServer;<Request ID="22" Action="CREATE"><FB Name="AllTypes.Time_of_day" Type="F_ADD_TOD_TIME" /></Request>
+typesServer;<Request ID="23" Action="CREATE"><FB Name="AllTypes.F_INT_TO_LINT" Type="F_INT_TO_LINT" /></Request>
+typesServer;<Request ID="24" Action="CREATE"><FB Name="AllTypes.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesServer;<Request ID="25" Action="CREATE"><FB Name="AllTypes.F_INT_TO_LWORD" Type="F_INT_TO_LWORD" /></Request>
+typesServer;<Request ID="26" Action="CREATE"><FB Name="AllTypes.BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="27" Action="CREATE"><FB Name="AllTypes.BOOL2BOOL_2" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="28" Action="CREATE"><FB Name="AllTypes.BOOL2BOOL_3" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="29" Action="CREATE"><FB Name="AllTypes.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesServer;<Request ID="30" Action="CREATE"><FB Name="TypeTest.BollType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="31" Action="CREATE"><FB Name="TypeTest.F_EQ_Bool" Type="F_EQ" /></Request>
+typesServer;<Request ID="32" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest.F_EQ_Bool.IN2" /></Request>
+typesServer;<Request ID="33" Action="CREATE"><FB Name="TypeTest.SINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="34" Action="CREATE"><FB Name="TypeTest.F_EQ_SINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="35" Action="WRITE"><Connection Source="SINT#121" Destination="TypeTest.F_EQ_SINT.IN2" /></Request>
+typesServer;<Request ID="36" Action="CREATE"><FB Name="TypeTest.INTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="37" Action="CREATE"><FB Name="TypeTest.F_EQ_INT" Type="F_EQ" /></Request>
+typesServer;<Request ID="38" Action="WRITE"><Connection Source="INT#234" Destination="TypeTest.F_EQ_INT.IN2" /></Request>
+typesServer;<Request ID="39" Action="CREATE"><FB Name="TypeTest.DINType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="40" Action="CREATE"><FB Name="TypeTest.F_EQ_DINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="41" Action="WRITE"><Connection Source="DINT#345" Destination="TypeTest.F_EQ_DINT.IN2" /></Request>
+typesServer;<Request ID="42" Action="CREATE"><FB Name="TypeTest.F_EQ_USINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="43" Action="WRITE"><Connection Source="USINT#122" Destination="TypeTest.F_EQ_USINT.IN2" /></Request>
+typesServer;<Request ID="44" Action="CREATE"><FB Name="TypeTest.USINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="45" Action="CREATE"><FB Name="TypeTest.F_EQ_UINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="46" Action="WRITE"><Connection Source="UINT#678" Destination="TypeTest.F_EQ_UINT.IN2" /></Request>
+typesServer;<Request ID="47" Action="CREATE"><FB Name="TypeTest.LINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="48" Action="CREATE"><FB Name="TypeTest.UINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="49" Action="CREATE"><FB Name="TypeTest.UDINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="50" Action="CREATE"><FB Name="TypeTest.F_EQ_UDINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="51" Action="WRITE"><Connection Source="UDINT#789" Destination="TypeTest.F_EQ_UDINT.IN2" /></Request>
+typesServer;<Request ID="52" Action="CREATE"><FB Name="TypeTest.F_EQ_LINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="53" Action="WRITE"><Connection Source="LINT#456" Destination="TypeTest.F_EQ_LINT.IN2" /></Request>
+typesServer;<Request ID="54" Action="CREATE"><FB Name="TypeTest.F_EQ_BYTE" Type="F_EQ" /></Request>
+typesServer;<Request ID="55" Action="WRITE"><Connection Source="BYTE#123" Destination="TypeTest.F_EQ_BYTE.IN2" /></Request>
+typesServer;<Request ID="56" Action="CREATE"><FB Name="TypeTest.BYTEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="57" Action="CREATE"><FB Name="TypeTest.F_EQ_WORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="58" Action="WRITE"><Connection Source="WORD#765" Destination="TypeTest.F_EQ_WORD.IN2" /></Request>
+typesServer;<Request ID="59" Action="CREATE"><FB Name="TypeTest.ULINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="60" Action="CREATE"><FB Name="TypeTest.WORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="61" Action="CREATE"><FB Name="TypeTest.DWORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="62" Action="CREATE"><FB Name="TypeTest.F_EQ_DWORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="63" Action="WRITE"><Connection Source="DWORD#654" Destination="TypeTest.F_EQ_DWORD.IN2" /></Request>
+typesServer;<Request ID="64" Action="CREATE"><FB Name="TypeTest.F_EQ_ULINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="65" Action="WRITE"><Connection Source="ULINT#987" Destination="TypeTest.F_EQ_ULINT.IN2" /></Request>
+typesServer;<Request ID="66" Action="CREATE"><FB Name="TypeTest.F_EQ_DATE" Type="F_EQ" /></Request>
+typesServer;<Request ID="67" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest.F_EQ_DATE.IN2" /></Request>
+typesServer;<Request ID="68" Action="CREATE"><FB Name="TypeTest.DATEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="69" Action="CREATE"><FB Name="TypeTest.F_EQ_LREAL" Type="F_EQ" /></Request>
+typesServer;<Request ID="70" Action="WRITE"><Connection Source="LREAL#3.21" Destination="TypeTest.F_EQ_LREAL.IN2" /></Request>
+typesServer;<Request ID="71" Action="CREATE"><FB Name="TypeTest.LWORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="72" Action="CREATE"><FB Name="TypeTest.TODType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="73" Action="CREATE"><FB Name="TypeTest.DTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="74" Action="CREATE"><FB Name="TypeTest.F_EQ_DT" Type="F_EQ" /></Request>
+typesServer;<Request ID="75" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest.F_EQ_DT.IN2" /></Request>
+typesServer;<Request ID="76" Action="CREATE"><FB Name="TypeTest.REALType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="77" Action="CREATE"><FB Name="TypeTest.LREALType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="78" Action="CREATE"><FB Name="TypeTest.F_EQ_REAL" Type="F_EQ" /></Request>
+typesServer;<Request ID="79" Action="WRITE"><Connection Source="REAL#1.23" Destination="TypeTest.F_EQ_REAL.IN2" /></Request>
+typesServer;<Request ID="80" Action="CREATE"><FB Name="TypeTest.F_EQ_LWORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="81" Action="WRITE"><Connection Source="LWORD#543" Destination="TypeTest.F_EQ_LWORD.IN2" /></Request>
+typesServer;<Request ID="82" Action="CREATE"><FB Name="TypeTest.WSTRINGType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="83" Action="CREATE"><FB Name="TypeTest.F_EQ_TIME" Type="F_EQ" /></Request>
+typesServer;<Request ID="84" Action="WRITE"><Connection Source="TIME#1450ms" Destination="TypeTest.F_EQ_TIME.IN2" /></Request>
+typesServer;<Request ID="85" Action="CREATE"><FB Name="TypeTest.STRINGType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="86" Action="CREATE"><FB Name="TypeTest.F_EQ_TOD" Type="F_EQ" /></Request>
+typesServer;<Request ID="87" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest.F_EQ_TOD.IN2" /></Request>
+typesServer;<Request ID="88" Action="CREATE"><FB Name="TypeTest.F_EQ_Bool_STRING" Type="F_EQ" /></Request>
+typesServer;<Request ID="89" Action="WRITE"><Connection Source="STRING#TestString" Destination="TypeTest.F_EQ_Bool_STRING.IN2" /></Request>
+typesServer;<Request ID="90" Action="CREATE"><FB Name="TypeTest.F_EQ_Bool_WSTRING" Type="F_EQ" /></Request>
+typesServer;<Request ID="91" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="TypeTest.F_EQ_Bool_WSTRING.IN2" /></Request>
+typesServer;<Request ID="92" Action="CREATE"><FB Name="TypeTest.TIMEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="93" Action="CREATE"><FB Name="TypeTest.STRING2STRING" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="94" Action="CREATE"><FB Name="TypeTest.GET_STRUCT_VALUE_1" Type="GET_STRUCT_VALUE" /></Request>
+typesServer;<Request ID="95" Action="WRITE"><Connection Source="STRING#locale" Destination="TypeTest.GET_STRUCT_VALUE_1.member" /></Request>
+typesServer;<Request ID="96" Action="CREATE"><FB Name="TypeTest.localizedTextTestLocale" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="97" Action="CREATE"><FB Name="TypeTest.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="98" Action="CREATE"><FB Name="TypeTest.GET_STRUCT_VALUE" Type="GET_STRUCT_VALUE" /></Request>
+typesServer;<Request ID="99" Action="WRITE"><Connection Source="STRING#text" Destination="TypeTest.GET_STRUCT_VALUE.member" /></Request>
+typesServer;<Request ID="100" Action="CREATE"><FB Name="TypeTest.F_EQ_Text" Type="F_EQ" /></Request>
+typesServer;<Request ID="101" Action="WRITE"><Connection Source="STRING#JustAText" Destination="TypeTest.F_EQ_Text.IN2" /></Request>
+typesServer;<Request ID="102" Action="CREATE"><FB Name="TypeTest.localizedTextTestText" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="103" Action="CREATE"><FB Name="TypeTest.F_EQ_Text_2" Type="F_EQ" /></Request>
+typesServer;<Request ID="104" Action="WRITE"><Connection Source="STRING#de-DE" Destination="TypeTest.F_EQ_Text_2.IN2" /></Request>
+typesServer;<Request ID="105" Action="CREATE"><FB Name="AllTypes_1.SINT2SINT" Type="SINT2SINT" /></Request>
+typesServer;<Request ID="106" Action="CREATE"><FB Name="AllTypes_1.UINT2UINT" Type="UINT2UINT" /></Request>
+typesServer;<Request ID="107" Action="CREATE"><FB Name="AllTypes_1.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="108" Action="CREATE"><FB Name="AllTypes_1.UDINT2UDINT" Type="UDINT2UDINT" /></Request>
+typesServer;<Request ID="109" Action="CREATE"><FB Name="AllTypes_1.DINT2DINT" Type="DINT2DINT" /></Request>
+typesServer;<Request ID="110" Action="CREATE"><FB Name="AllTypes_1.F_LINT_TO_INT" Type="F_LINT_TO_INT" /></Request>
+typesServer;<Request ID="111" Action="CREATE"><FB Name="AllTypes_1.INT2INT" Type="INT2INT" /></Request>
+typesServer;<Request ID="112" Action="CREATE"><FB Name="AllTypes_1.USINT2USINT" Type="USINT2USINT" /></Request>
+typesServer;<Request ID="113" Action="CREATE"><FB Name="AllTypes_1.F_ULINT_TO_INT" Type="F_ULINT_TO_INT" /></Request>
+typesServer;<Request ID="114" Action="CREATE"><FB Name="AllTypes_1.BYTE2BYTE" Type="BYTE2BYTE" /></Request>
+typesServer;<Request ID="115" Action="CREATE"><FB Name="AllTypes_1.WORD2WORD" Type="WORD2WORD" /></Request>
+typesServer;<Request ID="116" Action="CREATE"><FB Name="AllTypes_1.DWORD2DWORD" Type="DWORD2DWORD" /></Request>
+typesServer;<Request ID="117" Action="CREATE"><FB Name="AllTypes_1.F_LWORD_TO_INT" Type="F_LWORD_TO_INT" /></Request>
+typesServer;<Request ID="118" Action="CREATE"><FB Name="AllTypes_1.MISSING_DATE" Type="F_DT_TO_DATE" /></Request>
+typesServer;<Request ID="119" Action="CREATE"><FB Name="AllTypes_1.MISSING_DATE_AND_TIME" Type="F_DT_TO_TOD" /></Request>
+typesServer;<Request ID="120" Action="CREATE"><FB Name="AllTypes_1.TIME2TIME" Type="TIME2TIME" /></Request>
+typesServer;<Request ID="121" Action="CREATE"><FB Name="AllTypes_1.REAL2REAL" Type="REAL2REAL" /></Request>
+typesServer;<Request ID="122" Action="CREATE"><FB Name="AllTypes_1.LREAL2LREAL" Type="LREAL2LREAL" /></Request>
+typesServer;<Request ID="123" Action="CREATE"><FB Name="AllTypes_1.STRING2STRING" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="124" Action="CREATE"><FB Name="AllTypes_1.WSTRING2WSTRING" Type="WSTRING2WSTRING" /></Request>
+typesServer;<Request ID="125" Action="CREATE"><FB Name="AllTypes_1.Time_of_day" Type="F_ADD_TOD_TIME" /></Request>
+typesServer;<Request ID="126" Action="CREATE"><FB Name="AllTypes_1.F_INT_TO_LINT" Type="F_INT_TO_LINT" /></Request>
+typesServer;<Request ID="127" Action="CREATE"><FB Name="AllTypes_1.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesServer;<Request ID="128" Action="CREATE"><FB Name="AllTypes_1.F_INT_TO_LWORD" Type="F_INT_TO_LWORD" /></Request>
+typesServer;<Request ID="129" Action="CREATE"><FB Name="AllTypes_1.BOOL2BOOL_1" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="130" Action="CREATE"><FB Name="AllTypes_1.BOOL2BOOL_2" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="131" Action="CREATE"><FB Name="AllTypes_1.BOOL2BOOL_3" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="132" Action="CREATE"><FB Name="AllTypes_1.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesServer;<Request ID="133" Action="CREATE"><FB Name="TypeTest_1.BollType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="134" Action="CREATE"><FB Name="TypeTest_1.F_EQ_Bool" Type="F_EQ" /></Request>
+typesServer;<Request ID="135" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_1.F_EQ_Bool.IN2" /></Request>
+typesServer;<Request ID="136" Action="CREATE"><FB Name="TypeTest_1.SINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="137" Action="CREATE"><FB Name="TypeTest_1.F_EQ_SINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="138" Action="WRITE"><Connection Source="SINT#121" Destination="TypeTest_1.F_EQ_SINT.IN2" /></Request>
+typesServer;<Request ID="139" Action="CREATE"><FB Name="TypeTest_1.INTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="140" Action="CREATE"><FB Name="TypeTest_1.F_EQ_INT" Type="F_EQ" /></Request>
+typesServer;<Request ID="141" Action="WRITE"><Connection Source="INT#234" Destination="TypeTest_1.F_EQ_INT.IN2" /></Request>
+typesServer;<Request ID="142" Action="CREATE"><FB Name="TypeTest_1.DINType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="143" Action="CREATE"><FB Name="TypeTest_1.F_EQ_DINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="144" Action="WRITE"><Connection Source="DINT#345" Destination="TypeTest_1.F_EQ_DINT.IN2" /></Request>
+typesServer;<Request ID="145" Action="CREATE"><FB Name="TypeTest_1.F_EQ_USINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="146" Action="WRITE"><Connection Source="USINT#122" Destination="TypeTest_1.F_EQ_USINT.IN2" /></Request>
+typesServer;<Request ID="147" Action="CREATE"><FB Name="TypeTest_1.USINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="148" Action="CREATE"><FB Name="TypeTest_1.F_EQ_UINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="149" Action="WRITE"><Connection Source="UINT#678" Destination="TypeTest_1.F_EQ_UINT.IN2" /></Request>
+typesServer;<Request ID="150" Action="CREATE"><FB Name="TypeTest_1.LINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="151" Action="CREATE"><FB Name="TypeTest_1.UINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="152" Action="CREATE"><FB Name="TypeTest_1.UDINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="153" Action="CREATE"><FB Name="TypeTest_1.F_EQ_UDINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="154" Action="WRITE"><Connection Source="UDINT#789" Destination="TypeTest_1.F_EQ_UDINT.IN2" /></Request>
+typesServer;<Request ID="155" Action="CREATE"><FB Name="TypeTest_1.F_EQ_LINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="156" Action="WRITE"><Connection Source="LINT#456" Destination="TypeTest_1.F_EQ_LINT.IN2" /></Request>
+typesServer;<Request ID="157" Action="CREATE"><FB Name="TypeTest_1.F_EQ_BYTE" Type="F_EQ" /></Request>
+typesServer;<Request ID="158" Action="WRITE"><Connection Source="BYTE#123" Destination="TypeTest_1.F_EQ_BYTE.IN2" /></Request>
+typesServer;<Request ID="159" Action="CREATE"><FB Name="TypeTest_1.BYTEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="160" Action="CREATE"><FB Name="TypeTest_1.F_EQ_WORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="161" Action="WRITE"><Connection Source="WORD#765" Destination="TypeTest_1.F_EQ_WORD.IN2" /></Request>
+typesServer;<Request ID="162" Action="CREATE"><FB Name="TypeTest_1.ULINTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="163" Action="CREATE"><FB Name="TypeTest_1.WORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="164" Action="CREATE"><FB Name="TypeTest_1.DWORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="165" Action="CREATE"><FB Name="TypeTest_1.F_EQ_DWORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="166" Action="WRITE"><Connection Source="DWORD#654" Destination="TypeTest_1.F_EQ_DWORD.IN2" /></Request>
+typesServer;<Request ID="167" Action="CREATE"><FB Name="TypeTest_1.F_EQ_ULINT" Type="F_EQ" /></Request>
+typesServer;<Request ID="168" Action="WRITE"><Connection Source="ULINT#987" Destination="TypeTest_1.F_EQ_ULINT.IN2" /></Request>
+typesServer;<Request ID="169" Action="CREATE"><FB Name="TypeTest_1.F_EQ_DATE" Type="F_EQ" /></Request>
+typesServer;<Request ID="170" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_1.F_EQ_DATE.IN2" /></Request>
+typesServer;<Request ID="171" Action="CREATE"><FB Name="TypeTest_1.DATEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="172" Action="CREATE"><FB Name="TypeTest_1.F_EQ_LREAL" Type="F_EQ" /></Request>
+typesServer;<Request ID="173" Action="WRITE"><Connection Source="LREAL#3.21" Destination="TypeTest_1.F_EQ_LREAL.IN2" /></Request>
+typesServer;<Request ID="174" Action="CREATE"><FB Name="TypeTest_1.LWORDType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="175" Action="CREATE"><FB Name="TypeTest_1.TODType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="176" Action="CREATE"><FB Name="TypeTest_1.DTType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="177" Action="CREATE"><FB Name="TypeTest_1.F_EQ_DT" Type="F_EQ" /></Request>
+typesServer;<Request ID="178" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_1.F_EQ_DT.IN2" /></Request>
+typesServer;<Request ID="179" Action="CREATE"><FB Name="TypeTest_1.REALType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="180" Action="CREATE"><FB Name="TypeTest_1.LREALType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="181" Action="CREATE"><FB Name="TypeTest_1.F_EQ_REAL" Type="F_EQ" /></Request>
+typesServer;<Request ID="182" Action="WRITE"><Connection Source="REAL#1.23" Destination="TypeTest_1.F_EQ_REAL.IN2" /></Request>
+typesServer;<Request ID="183" Action="CREATE"><FB Name="TypeTest_1.F_EQ_LWORD" Type="F_EQ" /></Request>
+typesServer;<Request ID="184" Action="WRITE"><Connection Source="LWORD#543" Destination="TypeTest_1.F_EQ_LWORD.IN2" /></Request>
+typesServer;<Request ID="185" Action="CREATE"><FB Name="TypeTest_1.WSTRINGType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="186" Action="CREATE"><FB Name="TypeTest_1.F_EQ_TIME" Type="F_EQ" /></Request>
+typesServer;<Request ID="187" Action="WRITE"><Connection Source="TIME#1450ms" Destination="TypeTest_1.F_EQ_TIME.IN2" /></Request>
+typesServer;<Request ID="188" Action="CREATE"><FB Name="TypeTest_1.STRINGType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="189" Action="CREATE"><FB Name="TypeTest_1.F_EQ_TOD" Type="F_EQ" /></Request>
+typesServer;<Request ID="190" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="TypeTest_1.F_EQ_TOD.IN2" /></Request>
+typesServer;<Request ID="191" Action="CREATE"><FB Name="TypeTest_1.F_EQ_Bool_STRING" Type="F_EQ" /></Request>
+typesServer;<Request ID="192" Action="WRITE"><Connection Source="STRING#TestString" Destination="TypeTest_1.F_EQ_Bool_STRING.IN2" /></Request>
+typesServer;<Request ID="193" Action="CREATE"><FB Name="TypeTest_1.F_EQ_Bool_WSTRING" Type="F_EQ" /></Request>
+typesServer;<Request ID="194" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="TypeTest_1.F_EQ_Bool_WSTRING.IN2" /></Request>
+typesServer;<Request ID="195" Action="CREATE"><FB Name="TypeTest_1.TIMEType" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="196" Action="CREATE"><FB Name="TypeTest_1.localizedTextTestText" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="197" Action="CREATE"><FB Name="TypeTest_1.F_EQ_Text" Type="F_EQ" /></Request>
+typesServer;<Request ID="198" Action="WRITE"><Connection Source="STRING#JustAText" Destination="TypeTest_1.F_EQ_Text.IN2" /></Request>
+typesServer;<Request ID="199" Action="CREATE"><FB Name="TypeTest_1.GET_STRUCT_VALUE" Type="GET_STRUCT_VALUE" /></Request>
+typesServer;<Request ID="200" Action="WRITE"><Connection Source="STRING#text" Destination="TypeTest_1.GET_STRUCT_VALUE.member" /></Request>
+typesServer;<Request ID="201" Action="CREATE"><FB Name="TypeTest_1.GET_STRUCT_VALUE_1" Type="GET_STRUCT_VALUE" /></Request>
+typesServer;<Request ID="202" Action="WRITE"><Connection Source="STRING#locale" Destination="TypeTest_1.GET_STRUCT_VALUE_1.member" /></Request>
+typesServer;<Request ID="203" Action="CREATE"><FB Name="TypeTest_1.F_EQ_Text_2" Type="F_EQ" /></Request>
+typesServer;<Request ID="204" Action="WRITE"><Connection Source="STRING#de-DE" Destination="TypeTest_1.F_EQ_Text_2.IN2" /></Request>
+typesServer;<Request ID="205" Action="CREATE"><FB Name="TypeTest_1.localizedTextTestLocale" Type="TEST_CONDITION" /></Request>
+typesServer;<Request ID="206" Action="CREATE"><FB Name="TypeTest_1.STRING2STRING" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="207" Action="CREATE"><FB Name="TypeTest_1.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="208" Action="CREATE"><FB Name="E_SR" Type="E_SR" /></Request>
+typesServer;<Request ID="209" Action="CREATE"><FB Name="HandleInitLocal.InitFinished" Type="PUBLISH_0" /></Request>
+typesServer;<Request ID="210" Action="WRITE"><Connection Source="239.192.0.2:61499" Destination="HandleInitLocal.InitFinished.ID" /></Request>
+typesServer;<Request ID="211" Action="CREATE"><FB Name="HandleInitLocal.SUBSCRIBE_0" Type="SUBSCRIBE_0" /></Request>
+typesServer;<Request ID="212" Action="WRITE"><Connection Source="239.192.0.2:61500" Destination="HandleInitLocal.SUBSCRIBE_0.ID" /></Request>
+typesServer;<Request ID="213" Action="CREATE"><FB Name="HandleInitLocal.E_CYCLE" Type="E_CYCLE" /></Request>
+typesServer;<Request ID="214" Action="WRITE"><Connection Source="T#1000ms" Destination="HandleInitLocal.E_CYCLE.DT" /></Request>
+typesServer;<Request ID="215" Action="CREATE"><FB Name="HandleInitLocal.E_DEMUX_2" Type="E_DEMUX_2" /></Request>
+typesServer;<Request ID="216" Action="CREATE"><FB Name="HandleInitLocal.STEST_END" Type="STEST_END" /></Request>
+typesServer;<Request ID="217" Action="CREATE"><FB Name="HandleInitLocal.F_BOOL_TO_UINT" Type="F_BOOL_TO_UINT" /></Request>
+typesServer;<Request ID="218" Action="CREATE"><FB Name="SUBSCRIBE_0_1" Type="SUBSCRIBE_0" /></Request>
+typesServer;<Request ID="219" Action="WRITE"><Connection Source="1" Destination="SUBSCRIBE_0_1.QI" /></Request>
+typesServer;<Request ID="220" Action="WRITE"><Connection Source="239.192.0.2:61501" Destination="SUBSCRIBE_0_1.ID" /></Request>
+typesServer;<Request ID="221" Action="CREATE"><FB Name="E_SWITCH" Type="E_SWITCH" /></Request>
+typesServer;<Request ID="222" Action="CREATE"><FB Name="E_DELAY" Type="E_DELAY" /></Request>
+typesServer;<Request ID="223" Action="WRITE"><Connection Source="T#1500ms" Destination="E_DELAY.DT" /></Request>
+typesServer;<Request ID="224" Action="CREATE"><FB Name="SubApp_1.INT2INT_1" Type="INT2INT" /></Request>
+typesServer;<Request ID="225" Action="WRITE"><Connection Source="INT#234" Destination="SubApp_1.INT2INT_1.IN" /></Request>
+typesServer;<Request ID="226" Action="CREATE"><FB Name="SubApp_1.BOOL2BOOL_2_1" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="227" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_1.BOOL2BOOL_2_1.IN" /></Request>
+typesServer;<Request ID="228" Action="CREATE"><FB Name="SubApp_1.UDINT2UDINT_1" Type="UDINT2UDINT" /></Request>
+typesServer;<Request ID="229" Action="WRITE"><Connection Source="UDINT#789" Destination="SubApp_1.UDINT2UDINT_1.IN" /></Request>
+typesServer;<Request ID="230" Action="CREATE"><FB Name="SubApp_1.SINT2SINT_1" Type="SINT2SINT" /></Request>
+typesServer;<Request ID="231" Action="WRITE"><Connection Source="SINT#121" Destination="SubApp_1.SINT2SINT_1.IN" /></Request>
+typesServer;<Request ID="232" Action="CREATE"><FB Name="SubApp_1.F_INT_TO_LWORD_1" Type="F_INT_TO_LWORD" /></Request>
+typesServer;<Request ID="233" Action="CREATE"><FB Name="SubApp_1.F_INT_TO_LINT_1" Type="F_INT_TO_LINT" /></Request>
+typesServer;<Request ID="234" Action="CREATE"><FB Name="SubApp_1.REAL2REAL_1" Type="REAL2REAL" /></Request>
+typesServer;<Request ID="235" Action="WRITE"><Connection Source="REAL#1.23" Destination="SubApp_1.REAL2REAL_1.IN" /></Request>
+typesServer;<Request ID="236" Action="CREATE"><FB Name="SubApp_1.WSTRING2WSTRING_1" Type="WSTRING2WSTRING" /></Request>
+typesServer;<Request ID="237" Action="WRITE"><Connection Source="WSTRING#TestWString" Destination="SubApp_1.WSTRING2WSTRING_1.IN" /></Request>
+typesServer;<Request ID="238" Action="CREATE"><FB Name="SubApp_1.BYTE2BYTE_1" Type="BYTE2BYTE" /></Request>
+typesServer;<Request ID="239" Action="WRITE"><Connection Source="BYTE#123" Destination="SubApp_1.BYTE2BYTE_1.IN" /></Request>
+typesServer;<Request ID="240" Action="CREATE"><FB Name="SubApp_1.BOOL2BOOL_4" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="241" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_1.BOOL2BOOL_4.IN" /></Request>
+typesServer;<Request ID="242" Action="CREATE"><FB Name="SubApp_1.BOOL2BOOL_1_1" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="243" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_1.BOOL2BOOL_1_1.IN" /></Request>
+typesServer;<Request ID="244" Action="CREATE"><FB Name="SubApp_1.BOOL2BOOL_3_1" Type="BOOL2BOOL" /></Request>
+typesServer;<Request ID="245" Action="WRITE"><Connection Source="BOOL#TRUE" Destination="SubApp_1.BOOL2BOOL_3_1.IN" /></Request>
+typesServer;<Request ID="246" Action="CREATE"><FB Name="SubApp_1.F_LINT_TO_INT_1" Type="F_LINT_TO_INT" /></Request>
+typesServer;<Request ID="247" Action="WRITE"><Connection Source="LINT#456" Destination="SubApp_1.F_LINT_TO_INT_1.IN" /></Request>
+typesServer;<Request ID="248" Action="CREATE"><FB Name="SubApp_1.UINT2UINT_1" Type="UINT2UINT" /></Request>
+typesServer;<Request ID="249" Action="WRITE"><Connection Source="UINT#678" Destination="SubApp_1.UINT2UINT_1.IN" /></Request>
+typesServer;<Request ID="250" Action="CREATE"><FB Name="SubApp_1.STRING2STRING_1" Type="STRING2STRING" /></Request>
+typesServer;<Request ID="251" Action="WRITE"><Connection Source="STRING#TestString" Destination="SubApp_1.STRING2STRING_1.IN" /></Request>
+typesServer;<Request ID="252" Action="CREATE"><FB Name="SubApp_1.F_ULINT_TO_INT_1" Type="F_ULINT_TO_INT" /></Request>
+typesServer;<Request ID="253" Action="WRITE"><Connection Source="ULINT#987" Destination="SubApp_1.F_ULINT_TO_INT_1.IN" /></Request>
+typesServer;<Request ID="254" Action="CREATE"><FB Name="SubApp_1.DINT2DINT_1" Type="DINT2DINT" /></Request>
+typesServer;<Request ID="255" Action="WRITE"><Connection Source="DINT#345" Destination="SubApp_1.DINT2DINT_1.IN" /></Request>
+typesServer;<Request ID="256" Action="CREATE"><FB Name="SubApp_1.LREAL2LREAL_1" Type="LREAL2LREAL" /></Request>
+typesServer;<Request ID="257" Action="WRITE"><Connection Source="LREAL#3.21" Destination="SubApp_1.LREAL2LREAL_1.IN" /></Request>
+typesServer;<Request ID="258" Action="CREATE"><FB Name="SubApp_1.WORD2WORD_1" Type="WORD2WORD" /></Request>
+typesServer;<Request ID="259" Action="WRITE"><Connection Source="WORD#765" Destination="SubApp_1.WORD2WORD_1.IN" /></Request>
+typesServer;<Request ID="260" Action="CREATE"><FB Name="SubApp_1.F_LWORD_TO_INT_1" Type="F_LWORD_TO_INT" /></Request>
+typesServer;<Request ID="261" Action="WRITE"><Connection Source="LWORD#543" Destination="SubApp_1.F_LWORD_TO_INT_1.IN" /></Request>
+typesServer;<Request ID="262" Action="CREATE"><FB Name="SubApp_1.USINT2USINT_1" Type="USINT2USINT" /></Request>
+typesServer;<Request ID="263" Action="WRITE"><Connection Source="USINT#122" Destination="SubApp_1.USINT2USINT_1.IN" /></Request>
+typesServer;<Request ID="264" Action="CREATE"><FB Name="SubApp_1.TIME2TIME_1" Type="TIME2TIME" /></Request>
+typesServer;<Request ID="265" Action="WRITE"><Connection Source="TIME#1450ms" Destination="SubApp_1.TIME2TIME_1.IN" /></Request>
+typesServer;<Request ID="266" Action="CREATE"><FB Name="SubApp_1.DWORD2DWORD_1" Type="DWORD2DWORD" /></Request>
+typesServer;<Request ID="267" Action="WRITE"><Connection Source="DWORD#654" Destination="SubApp_1.DWORD2DWORD_1.IN" /></Request>
+typesServer;<Request ID="268" Action="CREATE"><FB Name="SubApp_1.F_INT_TO_ULINT" Type="F_INT_TO_ULINT" /></Request>
+typesServer;<Request ID="269" Action="CREATE"><FB Name="SubApp_1.LocalizedText2LocalizedText" Type="LocalizedText2LocalizedText" /></Request>
+typesServer;<Request ID="270" Action="WRITE"><Connection Source="(text:='JustAText',locale:='de-DE')" Destination="SubApp_1.LocalizedText2LocalizedText.IN" /></Request>
+typesServer;<Request ID="271" Action="CREATE"><FB Name="LocalWrite" Type="PUBLISH_22" /></Request>
+typesServer;<Request ID="272" Action="WRITE"><Connection Source="opc_ua[WRITE;/Objects/types/BOOL;/Objects/types/SINT;/Objects/types/INT;/Objects/types/DINT;/Objects/types/LINT;/Objects/types/USINT;/Objects/types/UINT;/Objects/types/UDINT;/Objects/types/ULINT;/Objects/types/BYTE;/Objects/types/WORD;/Objects/types/DWORD;/Objects/types/LWORD;/Objects/types/DATE;/Objects/types/TIME_OF_DAY;/Objects/types/DATE_AND_TIME;/Objects/types/TIME;/Objects/types/REAL;/Objects/types/LREAL;/Objects/types/STRING;/Objects/types/WSTRING;/Objects/types/LocalizedText]" Destination="LocalWrite.ID" /></Request>
+typesServer;<Request ID="273" Action="CREATE"><FB Name="Method" Type="SERVER_22" /></Request>
+typesServer;<Request ID="274" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/types/method]" Destination="Method.ID" /></Request>
+typesServer;<Request ID="275" Action="CREATE"><FB Name="Read" Type="SUBSCRIBE_22" /></Request>
+typesServer;<Request ID="276" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/types/BOOL;/Objects/types/SINT;/Objects/types/INT;/Objects/types/DINT;/Objects/types/LINT;/Objects/types/USINT;/Objects/types/UINT;/Objects/types/UDINT;/Objects/types/ULINT;/Objects/types/BYTE;/Objects/types/WORD;/Objects/types/DWORD;/Objects/types/LWORD;/Objects/types/DATE;/Objects/types/TIME_OF_DAY;/Objects/types/DATE_AND_TIME;/Objects/types/TIME;/Objects/types/REAL;/Objects/types/LREAL;/Objects/types/STRING;/Objects/types/WSTRING;/Objects/types/LocalizedText]" Destination="Read.ID" /></Request>
+typesServer;<Request ID="277" Action="CREATE"><Connection Source="AllTypes.F_LINT_TO_INT.CNF" Destination="AllTypes.F_INT_TO_LINT.REQ" /></Request>
+typesServer;<Request ID="278" Action="CREATE"><Connection Source="AllTypes.F_ULINT_TO_INT.CNF" Destination="AllTypes.F_INT_TO_ULINT.REQ" /></Request>
+typesServer;<Request ID="279" Action="CREATE"><Connection Source="AllTypes.F_LWORD_TO_INT.CNF" Destination="AllTypes.F_INT_TO_LWORD.REQ" /></Request>
+typesServer;<Request ID="280" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL.CNF" Destination="AllTypes.SINT2SINT.REQ" /></Request>
+typesServer;<Request ID="281" Action="CREATE"><Connection Source="AllTypes.SINT2SINT.CNF" Destination="AllTypes.INT2INT.REQ" /></Request>
+typesServer;<Request ID="282" Action="CREATE"><Connection Source="AllTypes.INT2INT.CNF" Destination="AllTypes.DINT2DINT.REQ" /></Request>
+typesServer;<Request ID="283" Action="CREATE"><Connection Source="AllTypes.DINT2DINT.CNF" Destination="AllTypes.F_LINT_TO_INT.REQ" /></Request>
+typesServer;<Request ID="284" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_LINT.CNF" Destination="AllTypes.USINT2USINT.REQ" /></Request>
+typesServer;<Request ID="285" Action="CREATE"><Connection Source="AllTypes.USINT2USINT.CNF" Destination="AllTypes.UINT2UINT.REQ" /></Request>
+typesServer;<Request ID="286" Action="CREATE"><Connection Source="AllTypes.UINT2UINT.CNF" Destination="AllTypes.UDINT2UDINT.REQ" /></Request>
+typesServer;<Request ID="287" Action="CREATE"><Connection Source="AllTypes.UDINT2UDINT.CNF" Destination="AllTypes.F_ULINT_TO_INT.REQ" /></Request>
+typesServer;<Request ID="288" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_ULINT.CNF" Destination="AllTypes.BYTE2BYTE.REQ" /></Request>
+typesServer;<Request ID="289" Action="CREATE"><Connection Source="AllTypes.BYTE2BYTE.CNF" Destination="AllTypes.WORD2WORD.REQ" /></Request>
+typesServer;<Request ID="290" Action="CREATE"><Connection Source="AllTypes.WORD2WORD.CNF" Destination="AllTypes.DWORD2DWORD.REQ" /></Request>
+typesServer;<Request ID="291" Action="CREATE"><Connection Source="AllTypes.DWORD2DWORD.CNF" Destination="AllTypes.F_LWORD_TO_INT.REQ" /></Request>
+typesServer;<Request ID="292" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_LWORD.CNF" Destination="AllTypes.BOOL2BOOL_1.REQ" /></Request>
+typesServer;<Request ID="293" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_1.CNF" Destination="AllTypes.BOOL2BOOL_2.REQ" /></Request>
+typesServer;<Request ID="294" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_2.CNF" Destination="AllTypes.BOOL2BOOL_3.REQ" /></Request>
+typesServer;<Request ID="295" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_3.CNF" Destination="AllTypes.TIME2TIME.REQ" /></Request>
+typesServer;<Request ID="296" Action="CREATE"><Connection Source="AllTypes.TIME2TIME.CNF" Destination="AllTypes.REAL2REAL.REQ" /></Request>
+typesServer;<Request ID="297" Action="CREATE"><Connection Source="AllTypes.REAL2REAL.CNF" Destination="AllTypes.LREAL2LREAL.REQ" /></Request>
+typesServer;<Request ID="298" Action="CREATE"><Connection Source="AllTypes.LREAL2LREAL.CNF" Destination="AllTypes.STRING2STRING.REQ" /></Request>
+typesServer;<Request ID="299" Action="CREATE"><Connection Source="AllTypes.STRING2STRING.CNF" Destination="AllTypes.WSTRING2WSTRING.REQ" /></Request>
+typesServer;<Request ID="300" Action="CREATE"><Connection Source="AllTypes.LocalizedText2LocalizedText.CNF" Destination="TypeTest.F_EQ_Bool.REQ" /></Request>
+typesServer;<Request ID="301" Action="CREATE"><Connection Source="AllTypes.WSTRING2WSTRING.CNF" Destination="AllTypes.LocalizedText2LocalizedText.REQ" /></Request>
+typesServer;<Request ID="302" Action="CREATE"><Connection Source="AllTypes.SINT2SINT.OUT" Destination="TypeTest.F_EQ_SINT.IN1" /></Request>
+typesServer;<Request ID="303" Action="CREATE"><Connection Source="AllTypes.INT2INT.OUT" Destination="TypeTest.F_EQ_INT.IN1" /></Request>
+typesServer;<Request ID="304" Action="CREATE"><Connection Source="AllTypes.DINT2DINT.OUT" Destination="TypeTest.F_EQ_DINT.IN1" /></Request>
+typesServer;<Request ID="305" Action="CREATE"><Connection Source="AllTypes.F_LINT_TO_INT.OUT" Destination="AllTypes.F_INT_TO_LINT.IN" /></Request>
+typesServer;<Request ID="306" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_LINT.OUT" Destination="TypeTest.F_EQ_LINT.IN1" /></Request>
+typesServer;<Request ID="307" Action="CREATE"><Connection Source="AllTypes.USINT2USINT.OUT" Destination="TypeTest.F_EQ_USINT.IN1" /></Request>
+typesServer;<Request ID="308" Action="CREATE"><Connection Source="AllTypes.UINT2UINT.OUT" Destination="TypeTest.F_EQ_UINT.IN1" /></Request>
+typesServer;<Request ID="309" Action="CREATE"><Connection Source="AllTypes.UDINT2UDINT.OUT" Destination="TypeTest.F_EQ_UDINT.IN1" /></Request>
+typesServer;<Request ID="310" Action="CREATE"><Connection Source="AllTypes.F_ULINT_TO_INT.OUT" Destination="AllTypes.F_INT_TO_ULINT.IN" /></Request>
+typesServer;<Request ID="311" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_ULINT.OUT" Destination="TypeTest.F_EQ_ULINT.IN1" /></Request>
+typesServer;<Request ID="312" Action="CREATE"><Connection Source="AllTypes.BYTE2BYTE.OUT" Destination="TypeTest.F_EQ_BYTE.IN1" /></Request>
+typesServer;<Request ID="313" Action="CREATE"><Connection Source="AllTypes.WORD2WORD.OUT" Destination="TypeTest.F_EQ_WORD.IN1" /></Request>
+typesServer;<Request ID="314" Action="CREATE"><Connection Source="AllTypes.DWORD2DWORD.OUT" Destination="TypeTest.F_EQ_DWORD.IN1" /></Request>
+typesServer;<Request ID="315" Action="CREATE"><Connection Source="AllTypes.F_LWORD_TO_INT.OUT" Destination="AllTypes.F_INT_TO_LWORD.IN" /></Request>
+typesServer;<Request ID="316" Action="CREATE"><Connection Source="AllTypes.F_INT_TO_LWORD.OUT" Destination="TypeTest.F_EQ_LWORD.IN1" /></Request>
+typesServer;<Request ID="317" Action="CREATE"><Connection Source="AllTypes.WSTRING2WSTRING.OUT" Destination="TypeTest.F_EQ_Bool_WSTRING.IN1" /></Request>
+typesServer;<Request ID="318" Action="CREATE"><Connection Source="AllTypes.STRING2STRING.OUT" Destination="TypeTest.F_EQ_Bool_STRING.IN1" /></Request>
+typesServer;<Request ID="319" Action="CREATE"><Connection Source="AllTypes.LREAL2LREAL.OUT" Destination="TypeTest.F_EQ_LREAL.IN1" /></Request>
+typesServer;<Request ID="320" Action="CREATE"><Connection Source="AllTypes.REAL2REAL.OUT" Destination="TypeTest.F_EQ_REAL.IN1" /></Request>
+typesServer;<Request ID="321" Action="CREATE"><Connection Source="AllTypes.TIME2TIME.OUT" Destination="TypeTest.F_EQ_TIME.IN1" /></Request>
+typesServer;<Request ID="322" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_1.OUT" Destination="TypeTest.F_EQ_DATE.IN1" /></Request>
+typesServer;<Request ID="323" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_2.OUT" Destination="TypeTest.F_EQ_TOD.IN1" /></Request>
+typesServer;<Request ID="324" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL_3.OUT" Destination="TypeTest.F_EQ_DT.IN1" /></Request>
+typesServer;<Request ID="325" Action="CREATE"><Connection Source="AllTypes.BOOL2BOOL.OUT" Destination="TypeTest.F_EQ_Bool.IN1" /></Request>
+typesServer;<Request ID="326" Action="CREATE"><Connection Source="AllTypes.LocalizedText2LocalizedText.OUT" Destination="TypeTest.GET_STRUCT_VALUE.in_struct" /></Request>
+typesServer;<Request ID="327" Action="CREATE"><Connection Source="AllTypes.LocalizedText2LocalizedText.OUT" Destination="TypeTest.GET_STRUCT_VALUE_1.in_struct" /></Request>
+typesServer;<Request ID="328" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool.CNF" Destination="TypeTest.BollType.REQ" /></Request>
+typesServer;<Request ID="329" Action="CREATE"><Connection Source="TypeTest.F_EQ_SINT.CNF" Destination="TypeTest.SINTType.REQ" /></Request>
+typesServer;<Request ID="330" Action="CREATE"><Connection Source="TypeTest.F_EQ_INT.CNF" Destination="TypeTest.INTType.REQ" /></Request>
+typesServer;<Request ID="331" Action="CREATE"><Connection Source="TypeTest.F_EQ_DINT.CNF" Destination="TypeTest.DINType.REQ" /></Request>
+typesServer;<Request ID="332" Action="CREATE"><Connection Source="TypeTest.F_EQ_UINT.CNF" Destination="TypeTest.UINTType.REQ" /></Request>
+typesServer;<Request ID="333" Action="CREATE"><Connection Source="TypeTest.F_EQ_UDINT.CNF" Destination="TypeTest.UDINTType.REQ" /></Request>
+typesServer;<Request ID="334" Action="CREATE"><Connection Source="TypeTest.F_EQ_USINT.CNF" Destination="TypeTest.USINTType.REQ" /></Request>
+typesServer;<Request ID="335" Action="CREATE"><Connection Source="TypeTest.F_EQ_LINT.CNF" Destination="TypeTest.LINTType.REQ" /></Request>
+typesServer;<Request ID="336" Action="CREATE"><Connection Source="TypeTest.F_EQ_WORD.CNF" Destination="TypeTest.WORDType.REQ" /></Request>
+typesServer;<Request ID="337" Action="CREATE"><Connection Source="TypeTest.F_EQ_DWORD.CNF" Destination="TypeTest.DWORDType.REQ" /></Request>
+typesServer;<Request ID="338" Action="CREATE"><Connection Source="TypeTest.F_EQ_BYTE.CNF" Destination="TypeTest.BYTEType.REQ" /></Request>
+typesServer;<Request ID="339" Action="CREATE"><Connection Source="TypeTest.F_EQ_ULINT.CNF" Destination="TypeTest.ULINTType.REQ" /></Request>
+typesServer;<Request ID="340" Action="CREATE"><Connection Source="TypeTest.F_EQ_REAL.CNF" Destination="TypeTest.REALType.REQ" /></Request>
+typesServer;<Request ID="341" Action="CREATE"><Connection Source="TypeTest.F_EQ_TOD.CNF" Destination="TypeTest.TODType.REQ" /></Request>
+typesServer;<Request ID="342" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool_STRING.CNF" Destination="TypeTest.STRINGType.REQ" /></Request>
+typesServer;<Request ID="343" Action="CREATE"><Connection Source="TypeTest.F_EQ_LREAL.CNF" Destination="TypeTest.LREALType.REQ" /></Request>
+typesServer;<Request ID="344" Action="CREATE"><Connection Source="TypeTest.F_EQ_DT.CNF" Destination="TypeTest.DTType.REQ" /></Request>
+typesServer;<Request ID="345" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool_WSTRING.CNF" Destination="TypeTest.WSTRINGType.REQ" /></Request>
+typesServer;<Request ID="346" Action="CREATE"><Connection Source="TypeTest.F_EQ_LWORD.CNF" Destination="TypeTest.LWORDType.REQ" /></Request>
+typesServer;<Request ID="347" Action="CREATE"><Connection Source="TypeTest.F_EQ_DATE.CNF" Destination="TypeTest.DATEType.REQ" /></Request>
+typesServer;<Request ID="348" Action="CREATE"><Connection Source="TypeTest.F_EQ_TIME.CNF" Destination="TypeTest.TIMEType.REQ" /></Request>
+typesServer;<Request ID="349" Action="CREATE"><Connection Source="TypeTest.BollType.CNF" Destination="TypeTest.F_EQ_SINT.REQ" /></Request>
+typesServer;<Request ID="350" Action="CREATE"><Connection Source="TypeTest.SINTType.CNF" Destination="TypeTest.F_EQ_INT.REQ" /></Request>
+typesServer;<Request ID="351" Action="CREATE"><Connection Source="TypeTest.INTType.CNF" Destination="TypeTest.F_EQ_DINT.REQ" /></Request>
+typesServer;<Request ID="352" Action="CREATE"><Connection Source="TypeTest.DINType.CNF" Destination="TypeTest.F_EQ_LINT.REQ" /></Request>
+typesServer;<Request ID="353" Action="CREATE"><Connection Source="TypeTest.LINTType.CNF" Destination="TypeTest.F_EQ_USINT.REQ" /></Request>
+typesServer;<Request ID="354" Action="CREATE"><Connection Source="TypeTest.USINTType.CNF" Destination="TypeTest.F_EQ_UINT.REQ" /></Request>
+typesServer;<Request ID="355" Action="CREATE"><Connection Source="TypeTest.UINTType.CNF" Destination="TypeTest.F_EQ_UDINT.REQ" /></Request>
+typesServer;<Request ID="356" Action="CREATE"><Connection Source="TypeTest.UDINTType.CNF" Destination="TypeTest.F_EQ_ULINT.REQ" /></Request>
+typesServer;<Request ID="357" Action="CREATE"><Connection Source="TypeTest.ULINTType.CNF" Destination="TypeTest.F_EQ_BYTE.REQ" /></Request>
+typesServer;<Request ID="358" Action="CREATE"><Connection Source="TypeTest.BYTEType.CNF" Destination="TypeTest.F_EQ_WORD.REQ" /></Request>
+typesServer;<Request ID="359" Action="CREATE"><Connection Source="TypeTest.WORDType.CNF" Destination="TypeTest.F_EQ_DWORD.REQ" /></Request>
+typesServer;<Request ID="360" Action="CREATE"><Connection Source="TypeTest.DWORDType.CNF" Destination="TypeTest.F_EQ_LWORD.REQ" /></Request>
+typesServer;<Request ID="361" Action="CREATE"><Connection Source="TypeTest.DATEType.CNF" Destination="TypeTest.F_EQ_TOD.REQ" /></Request>
+typesServer;<Request ID="362" Action="CREATE"><Connection Source="TypeTest.TODType.CNF" Destination="TypeTest.F_EQ_DT.REQ" /></Request>
+typesServer;<Request ID="363" Action="CREATE"><Connection Source="TypeTest.DTType.CNF" Destination="TypeTest.F_EQ_TIME.REQ" /></Request>
+typesServer;<Request ID="364" Action="CREATE"><Connection Source="TypeTest.TIMEType.CNF" Destination="TypeTest.F_EQ_REAL.REQ" /></Request>
+typesServer;<Request ID="365" Action="CREATE"><Connection Source="TypeTest.REALType.CNF" Destination="TypeTest.F_EQ_LREAL.REQ" /></Request>
+typesServer;<Request ID="366" Action="CREATE"><Connection Source="TypeTest.LREALType.CNF" Destination="TypeTest.F_EQ_Bool_STRING.REQ" /></Request>
+typesServer;<Request ID="367" Action="CREATE"><Connection Source="TypeTest.STRINGType.CNF" Destination="TypeTest.F_EQ_Bool_WSTRING.REQ" /></Request>
+typesServer;<Request ID="368" Action="CREATE"><Connection Source="TypeTest.LWORDType.CNF" Destination="TypeTest.F_EQ_REAL.REQ" /></Request>
+typesServer;<Request ID="369" Action="CREATE"><Connection Source="TypeTest.GET_STRUCT_VALUE_1.CNF" Destination="TypeTest.STRING2STRING_1.REQ" /></Request>
+typesServer;<Request ID="370" Action="CREATE"><Connection Source="TypeTest.STRING2STRING_1.CNF" Destination="TypeTest.F_EQ_Text.REQ" /></Request>
+typesServer;<Request ID="371" Action="CREATE"><Connection Source="TypeTest.F_EQ_Text_2.CNF" Destination="TypeTest.localizedTextTestLocale.REQ" /></Request>
+typesServer;<Request ID="372" Action="CREATE"><Connection Source="TypeTest.F_EQ_Text.CNF" Destination="TypeTest.localizedTextTestText.REQ" /></Request>
+typesServer;<Request ID="373" Action="CREATE"><Connection Source="TypeTest.STRING2STRING.CNF" Destination="TypeTest.GET_STRUCT_VALUE_1.REQ" /></Request>
+typesServer;<Request ID="374" Action="CREATE"><Connection Source="TypeTest.localizedTextTestText.CNF" Destination="TypeTest.F_EQ_Text_2.REQ" /></Request>
+typesServer;<Request ID="375" Action="CREATE"><Connection Source="TypeTest.GET_STRUCT_VALUE.CNF" Destination="TypeTest.STRING2STRING.REQ" /></Request>
+typesServer;<Request ID="376" Action="CREATE"><Connection Source="TypeTest.WSTRINGType.CNF" Destination="TypeTest.GET_STRUCT_VALUE.REQ" /></Request>
+typesServer;<Request ID="377" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool.OUT" Destination="TypeTest.BollType.check" /></Request>
+typesServer;<Request ID="378" Action="CREATE"><Connection Source="TypeTest.F_EQ_SINT.OUT" Destination="TypeTest.SINTType.check" /></Request>
+typesServer;<Request ID="379" Action="CREATE"><Connection Source="TypeTest.F_EQ_INT.OUT" Destination="TypeTest.INTType.check" /></Request>
+typesServer;<Request ID="380" Action="CREATE"><Connection Source="TypeTest.F_EQ_DINT.OUT" Destination="TypeTest.DINType.check" /></Request>
+typesServer;<Request ID="381" Action="CREATE"><Connection Source="TypeTest.F_EQ_UINT.OUT" Destination="TypeTest.UINTType.check" /></Request>
+typesServer;<Request ID="382" Action="CREATE"><Connection Source="TypeTest.F_EQ_LINT.OUT" Destination="TypeTest.LINTType.check" /></Request>
+typesServer;<Request ID="383" Action="CREATE"><Connection Source="TypeTest.F_EQ_USINT.OUT" Destination="TypeTest.USINTType.check" /></Request>
+typesServer;<Request ID="384" Action="CREATE"><Connection Source="TypeTest.F_EQ_UDINT.OUT" Destination="TypeTest.UDINTType.check" /></Request>
+typesServer;<Request ID="385" Action="CREATE"><Connection Source="TypeTest.F_EQ_WORD.OUT" Destination="TypeTest.WORDType.check" /></Request>
+typesServer;<Request ID="386" Action="CREATE"><Connection Source="TypeTest.F_EQ_ULINT.OUT" Destination="TypeTest.ULINTType.check" /></Request>
+typesServer;<Request ID="387" Action="CREATE"><Connection Source="TypeTest.F_EQ_BYTE.OUT" Destination="TypeTest.BYTEType.check" /></Request>
+typesServer;<Request ID="388" Action="CREATE"><Connection Source="TypeTest.F_EQ_DWORD.OUT" Destination="TypeTest.DWORDType.check" /></Request>
+typesServer;<Request ID="389" Action="CREATE"><Connection Source="TypeTest.F_EQ_TOD.OUT" Destination="TypeTest.TODType.check" /></Request>
+typesServer;<Request ID="390" Action="CREATE"><Connection Source="TypeTest.F_EQ_LWORD.OUT" Destination="TypeTest.LWORDType.check" /></Request>
+typesServer;<Request ID="391" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool_WSTRING.OUT" Destination="TypeTest.WSTRINGType.check" /></Request>
+typesServer;<Request ID="392" Action="CREATE"><Connection Source="TypeTest.F_EQ_LREAL.OUT" Destination="TypeTest.LREALType.check" /></Request>
+typesServer;<Request ID="393" Action="CREATE"><Connection Source="TypeTest.F_EQ_DATE.OUT" Destination="TypeTest.DATEType.check" /></Request>
+typesServer;<Request ID="394" Action="CREATE"><Connection Source="TypeTest.F_EQ_Bool_STRING.OUT" Destination="TypeTest.STRINGType.check" /></Request>
+typesServer;<Request ID="395" Action="CREATE"><Connection Source="TypeTest.F_EQ_TIME.OUT" Destination="TypeTest.TIMEType.check" /></Request>
+typesServer;<Request ID="396" Action="CREATE"><Connection Source="TypeTest.F_EQ_REAL.OUT" Destination="TypeTest.REALType.check" /></Request>
+typesServer;<Request ID="397" Action="CREATE"><Connection Source="TypeTest.F_EQ_DT.OUT" Destination="TypeTest.DTType.check" /></Request>
+typesServer;<Request ID="398" Action="CREATE"><Connection Source="TypeTest.F_EQ_Text_2.OUT" Destination="TypeTest.localizedTextTestLocale.check" /></Request>
+typesServer;<Request ID="399" Action="CREATE"><Connection Source="TypeTest.STRING2STRING.OUT" Destination="TypeTest.F_EQ_Text.IN1" /></Request>
+typesServer;<Request ID="400" Action="CREATE"><Connection Source="TypeTest.GET_STRUCT_VALUE_1.output" Destination="TypeTest.STRING2STRING_1.IN" /></Request>
+typesServer;<Request ID="401" Action="CREATE"><Connection Source="TypeTest.STRING2STRING_1.OUT" Destination="TypeTest.F_EQ_Text_2.IN1" /></Request>
+typesServer;<Request ID="402" Action="CREATE"><Connection Source="TypeTest.F_EQ_Text.OUT" Destination="TypeTest.localizedTextTestText.check" /></Request>
+typesServer;<Request ID="403" Action="CREATE"><Connection Source="TypeTest.GET_STRUCT_VALUE.output" Destination="TypeTest.STRING2STRING.IN" /></Request>
+typesServer;<Request ID="404" Action="CREATE"><Connection Source="AllTypes_1.F_LINT_TO_INT.CNF" Destination="AllTypes_1.F_INT_TO_LINT.REQ" /></Request>
+typesServer;<Request ID="405" Action="CREATE"><Connection Source="AllTypes_1.F_ULINT_TO_INT.CNF" Destination="AllTypes_1.F_INT_TO_ULINT.REQ" /></Request>
+typesServer;<Request ID="406" Action="CREATE"><Connection Source="AllTypes_1.F_LWORD_TO_INT.CNF" Destination="AllTypes_1.F_INT_TO_LWORD.REQ" /></Request>
+typesServer;<Request ID="407" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL.CNF" Destination="AllTypes_1.SINT2SINT.REQ" /></Request>
+typesServer;<Request ID="408" Action="CREATE"><Connection Source="AllTypes_1.SINT2SINT.CNF" Destination="AllTypes_1.INT2INT.REQ" /></Request>
+typesServer;<Request ID="409" Action="CREATE"><Connection Source="AllTypes_1.INT2INT.CNF" Destination="AllTypes_1.DINT2DINT.REQ" /></Request>
+typesServer;<Request ID="410" Action="CREATE"><Connection Source="AllTypes_1.DINT2DINT.CNF" Destination="AllTypes_1.F_LINT_TO_INT.REQ" /></Request>
+typesServer;<Request ID="411" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LINT.CNF" Destination="AllTypes_1.USINT2USINT.REQ" /></Request>
+typesServer;<Request ID="412" Action="CREATE"><Connection Source="AllTypes_1.USINT2USINT.CNF" Destination="AllTypes_1.UINT2UINT.REQ" /></Request>
+typesServer;<Request ID="413" Action="CREATE"><Connection Source="AllTypes_1.UINT2UINT.CNF" Destination="AllTypes_1.UDINT2UDINT.REQ" /></Request>
+typesServer;<Request ID="414" Action="CREATE"><Connection Source="AllTypes_1.UDINT2UDINT.CNF" Destination="AllTypes_1.F_ULINT_TO_INT.REQ" /></Request>
+typesServer;<Request ID="415" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_ULINT.CNF" Destination="AllTypes_1.BYTE2BYTE.REQ" /></Request>
+typesServer;<Request ID="416" Action="CREATE"><Connection Source="AllTypes_1.BYTE2BYTE.CNF" Destination="AllTypes_1.WORD2WORD.REQ" /></Request>
+typesServer;<Request ID="417" Action="CREATE"><Connection Source="AllTypes_1.WORD2WORD.CNF" Destination="AllTypes_1.DWORD2DWORD.REQ" /></Request>
+typesServer;<Request ID="418" Action="CREATE"><Connection Source="AllTypes_1.DWORD2DWORD.CNF" Destination="AllTypes_1.F_LWORD_TO_INT.REQ" /></Request>
+typesServer;<Request ID="419" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LWORD.CNF" Destination="AllTypes_1.BOOL2BOOL_1.REQ" /></Request>
+typesServer;<Request ID="420" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_1.CNF" Destination="AllTypes_1.BOOL2BOOL_2.REQ" /></Request>
+typesServer;<Request ID="421" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_2.CNF" Destination="AllTypes_1.BOOL2BOOL_3.REQ" /></Request>
+typesServer;<Request ID="422" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_3.CNF" Destination="AllTypes_1.TIME2TIME.REQ" /></Request>
+typesServer;<Request ID="423" Action="CREATE"><Connection Source="AllTypes_1.TIME2TIME.CNF" Destination="AllTypes_1.REAL2REAL.REQ" /></Request>
+typesServer;<Request ID="424" Action="CREATE"><Connection Source="AllTypes_1.REAL2REAL.CNF" Destination="AllTypes_1.LREAL2LREAL.REQ" /></Request>
+typesServer;<Request ID="425" Action="CREATE"><Connection Source="AllTypes_1.LREAL2LREAL.CNF" Destination="AllTypes_1.STRING2STRING.REQ" /></Request>
+typesServer;<Request ID="426" Action="CREATE"><Connection Source="AllTypes_1.STRING2STRING.CNF" Destination="AllTypes_1.WSTRING2WSTRING.REQ" /></Request>
+typesServer;<Request ID="427" Action="CREATE"><Connection Source="AllTypes_1.LocalizedText2LocalizedText.CNF" Destination="TypeTest_1.F_EQ_Bool.REQ" /></Request>
+typesServer;<Request ID="428" Action="CREATE"><Connection Source="AllTypes_1.WSTRING2WSTRING.CNF" Destination="AllTypes_1.LocalizedText2LocalizedText.REQ" /></Request>
+typesServer;<Request ID="429" Action="CREATE"><Connection Source="AllTypes_1.SINT2SINT.OUT" Destination="TypeTest_1.F_EQ_SINT.IN1" /></Request>
+typesServer;<Request ID="430" Action="CREATE"><Connection Source="AllTypes_1.SINT2SINT.OUT" Destination="Method.SD_2" /></Request>
+typesServer;<Request ID="431" Action="CREATE"><Connection Source="AllTypes_1.INT2INT.OUT" Destination="TypeTest_1.F_EQ_INT.IN1" /></Request>
+typesServer;<Request ID="432" Action="CREATE"><Connection Source="AllTypes_1.INT2INT.OUT" Destination="Method.SD_3" /></Request>
+typesServer;<Request ID="433" Action="CREATE"><Connection Source="AllTypes_1.DINT2DINT.OUT" Destination="TypeTest_1.F_EQ_DINT.IN1" /></Request>
+typesServer;<Request ID="434" Action="CREATE"><Connection Source="AllTypes_1.DINT2DINT.OUT" Destination="Method.SD_4" /></Request>
+typesServer;<Request ID="435" Action="CREATE"><Connection Source="AllTypes_1.F_LINT_TO_INT.OUT" Destination="AllTypes_1.F_INT_TO_LINT.IN" /></Request>
+typesServer;<Request ID="436" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LINT.OUT" Destination="TypeTest_1.F_EQ_LINT.IN1" /></Request>
+typesServer;<Request ID="437" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LINT.OUT" Destination="Method.SD_5" /></Request>
+typesServer;<Request ID="438" Action="CREATE"><Connection Source="AllTypes_1.USINT2USINT.OUT" Destination="TypeTest_1.F_EQ_USINT.IN1" /></Request>
+typesServer;<Request ID="439" Action="CREATE"><Connection Source="AllTypes_1.USINT2USINT.OUT" Destination="Method.SD_6" /></Request>
+typesServer;<Request ID="440" Action="CREATE"><Connection Source="AllTypes_1.UINT2UINT.OUT" Destination="TypeTest_1.F_EQ_UINT.IN1" /></Request>
+typesServer;<Request ID="441" Action="CREATE"><Connection Source="AllTypes_1.UINT2UINT.OUT" Destination="Method.SD_7" /></Request>
+typesServer;<Request ID="442" Action="CREATE"><Connection Source="AllTypes_1.UDINT2UDINT.OUT" Destination="TypeTest_1.F_EQ_UDINT.IN1" /></Request>
+typesServer;<Request ID="443" Action="CREATE"><Connection Source="AllTypes_1.UDINT2UDINT.OUT" Destination="Method.SD_8" /></Request>
+typesServer;<Request ID="444" Action="CREATE"><Connection Source="AllTypes_1.F_ULINT_TO_INT.OUT" Destination="AllTypes_1.F_INT_TO_ULINT.IN" /></Request>
+typesServer;<Request ID="445" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_ULINT.OUT" Destination="TypeTest_1.F_EQ_ULINT.IN1" /></Request>
+typesServer;<Request ID="446" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_ULINT.OUT" Destination="Method.SD_9" /></Request>
+typesServer;<Request ID="447" Action="CREATE"><Connection Source="AllTypes_1.BYTE2BYTE.OUT" Destination="TypeTest_1.F_EQ_BYTE.IN1" /></Request>
+typesServer;<Request ID="448" Action="CREATE"><Connection Source="AllTypes_1.BYTE2BYTE.OUT" Destination="Method.SD_10" /></Request>
+typesServer;<Request ID="449" Action="CREATE"><Connection Source="AllTypes_1.WORD2WORD.OUT" Destination="TypeTest_1.F_EQ_WORD.IN1" /></Request>
+typesServer;<Request ID="450" Action="CREATE"><Connection Source="AllTypes_1.WORD2WORD.OUT" Destination="Method.SD_11" /></Request>
+typesServer;<Request ID="451" Action="CREATE"><Connection Source="AllTypes_1.DWORD2DWORD.OUT" Destination="TypeTest_1.F_EQ_DWORD.IN1" /></Request>
+typesServer;<Request ID="452" Action="CREATE"><Connection Source="AllTypes_1.DWORD2DWORD.OUT" Destination="Method.SD_12" /></Request>
+typesServer;<Request ID="453" Action="CREATE"><Connection Source="AllTypes_1.F_LWORD_TO_INT.OUT" Destination="AllTypes_1.F_INT_TO_LWORD.IN" /></Request>
+typesServer;<Request ID="454" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LWORD.OUT" Destination="TypeTest_1.F_EQ_LWORD.IN1" /></Request>
+typesServer;<Request ID="455" Action="CREATE"><Connection Source="AllTypes_1.F_INT_TO_LWORD.OUT" Destination="Method.SD_13" /></Request>
+typesServer;<Request ID="456" Action="CREATE"><Connection Source="AllTypes_1.WSTRING2WSTRING.OUT" Destination="TypeTest_1.F_EQ_Bool_WSTRING.IN1" /></Request>
+typesServer;<Request ID="457" Action="CREATE"><Connection Source="AllTypes_1.WSTRING2WSTRING.OUT" Destination="Method.SD_21" /></Request>
+typesServer;<Request ID="458" Action="CREATE"><Connection Source="AllTypes_1.STRING2STRING.OUT" Destination="TypeTest_1.F_EQ_Bool_STRING.IN1" /></Request>
+typesServer;<Request ID="459" Action="CREATE"><Connection Source="AllTypes_1.STRING2STRING.OUT" Destination="Method.SD_20" /></Request>
+typesServer;<Request ID="460" Action="CREATE"><Connection Source="AllTypes_1.LREAL2LREAL.OUT" Destination="TypeTest_1.F_EQ_LREAL.IN1" /></Request>
+typesServer;<Request ID="461" Action="CREATE"><Connection Source="AllTypes_1.LREAL2LREAL.OUT" Destination="Method.SD_19" /></Request>
+typesServer;<Request ID="462" Action="CREATE"><Connection Source="AllTypes_1.REAL2REAL.OUT" Destination="TypeTest_1.F_EQ_REAL.IN1" /></Request>
+typesServer;<Request ID="463" Action="CREATE"><Connection Source="AllTypes_1.REAL2REAL.OUT" Destination="Method.SD_18" /></Request>
+typesServer;<Request ID="464" Action="CREATE"><Connection Source="AllTypes_1.TIME2TIME.OUT" Destination="TypeTest_1.F_EQ_TIME.IN1" /></Request>
+typesServer;<Request ID="465" Action="CREATE"><Connection Source="AllTypes_1.TIME2TIME.OUT" Destination="Method.SD_17" /></Request>
+typesServer;<Request ID="466" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_1.OUT" Destination="TypeTest_1.F_EQ_DATE.IN1" /></Request>
+typesServer;<Request ID="467" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_1.OUT" Destination="Method.SD_14" /></Request>
+typesServer;<Request ID="468" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_2.OUT" Destination="TypeTest_1.F_EQ_TOD.IN1" /></Request>
+typesServer;<Request ID="469" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_2.OUT" Destination="Method.SD_15" /></Request>
+typesServer;<Request ID="470" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_3.OUT" Destination="TypeTest_1.F_EQ_DT.IN1" /></Request>
+typesServer;<Request ID="471" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL_3.OUT" Destination="Method.SD_16" /></Request>
+typesServer;<Request ID="472" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL.OUT" Destination="TypeTest_1.F_EQ_Bool.IN1" /></Request>
+typesServer;<Request ID="473" Action="CREATE"><Connection Source="AllTypes_1.BOOL2BOOL.OUT" Destination="Method.SD_1" /></Request>
+typesServer;<Request ID="474" Action="CREATE"><Connection Source="AllTypes_1.LocalizedText2LocalizedText.OUT" Destination="TypeTest_1.GET_STRUCT_VALUE.in_struct" /></Request>
+typesServer;<Request ID="475" Action="CREATE"><Connection Source="AllTypes_1.LocalizedText2LocalizedText.OUT" Destination="TypeTest_1.GET_STRUCT_VALUE_1.in_struct" /></Request>
+typesServer;<Request ID="476" Action="CREATE"><Connection Source="AllTypes_1.LocalizedText2LocalizedText.OUT" Destination="Method.SD_22" /></Request>
+typesServer;<Request ID="477" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool.CNF" Destination="TypeTest_1.BollType.REQ" /></Request>
+typesServer;<Request ID="478" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_SINT.CNF" Destination="TypeTest_1.SINTType.REQ" /></Request>
+typesServer;<Request ID="479" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_INT.CNF" Destination="TypeTest_1.INTType.REQ" /></Request>
+typesServer;<Request ID="480" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DINT.CNF" Destination="TypeTest_1.DINType.REQ" /></Request>
+typesServer;<Request ID="481" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_UINT.CNF" Destination="TypeTest_1.UINTType.REQ" /></Request>
+typesServer;<Request ID="482" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_UDINT.CNF" Destination="TypeTest_1.UDINTType.REQ" /></Request>
+typesServer;<Request ID="483" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_USINT.CNF" Destination="TypeTest_1.USINTType.REQ" /></Request>
+typesServer;<Request ID="484" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LINT.CNF" Destination="TypeTest_1.LINTType.REQ" /></Request>
+typesServer;<Request ID="485" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_WORD.CNF" Destination="TypeTest_1.WORDType.REQ" /></Request>
+typesServer;<Request ID="486" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DWORD.CNF" Destination="TypeTest_1.DWORDType.REQ" /></Request>
+typesServer;<Request ID="487" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_BYTE.CNF" Destination="TypeTest_1.BYTEType.REQ" /></Request>
+typesServer;<Request ID="488" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_ULINT.CNF" Destination="TypeTest_1.ULINTType.REQ" /></Request>
+typesServer;<Request ID="489" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_REAL.CNF" Destination="TypeTest_1.REALType.REQ" /></Request>
+typesServer;<Request ID="490" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_TOD.CNF" Destination="TypeTest_1.TODType.REQ" /></Request>
+typesServer;<Request ID="491" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool_STRING.CNF" Destination="TypeTest_1.STRINGType.REQ" /></Request>
+typesServer;<Request ID="492" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LREAL.CNF" Destination="TypeTest_1.LREALType.REQ" /></Request>
+typesServer;<Request ID="493" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DT.CNF" Destination="TypeTest_1.DTType.REQ" /></Request>
+typesServer;<Request ID="494" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool_WSTRING.CNF" Destination="TypeTest_1.WSTRINGType.REQ" /></Request>
+typesServer;<Request ID="495" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LWORD.CNF" Destination="TypeTest_1.LWORDType.REQ" /></Request>
+typesServer;<Request ID="496" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DATE.CNF" Destination="TypeTest_1.DATEType.REQ" /></Request>
+typesServer;<Request ID="497" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_TIME.CNF" Destination="TypeTest_1.TIMEType.REQ" /></Request>
+typesServer;<Request ID="498" Action="CREATE"><Connection Source="TypeTest_1.BollType.CNF" Destination="TypeTest_1.F_EQ_SINT.REQ" /></Request>
+typesServer;<Request ID="499" Action="CREATE"><Connection Source="TypeTest_1.SINTType.CNF" Destination="TypeTest_1.F_EQ_INT.REQ" /></Request>
+typesServer;<Request ID="500" Action="CREATE"><Connection Source="TypeTest_1.INTType.CNF" Destination="TypeTest_1.F_EQ_DINT.REQ" /></Request>
+typesServer;<Request ID="501" Action="CREATE"><Connection Source="TypeTest_1.DINType.CNF" Destination="TypeTest_1.F_EQ_LINT.REQ" /></Request>
+typesServer;<Request ID="502" Action="CREATE"><Connection Source="TypeTest_1.LINTType.CNF" Destination="TypeTest_1.F_EQ_USINT.REQ" /></Request>
+typesServer;<Request ID="503" Action="CREATE"><Connection Source="TypeTest_1.USINTType.CNF" Destination="TypeTest_1.F_EQ_UINT.REQ" /></Request>
+typesServer;<Request ID="504" Action="CREATE"><Connection Source="TypeTest_1.UINTType.CNF" Destination="TypeTest_1.F_EQ_UDINT.REQ" /></Request>
+typesServer;<Request ID="505" Action="CREATE"><Connection Source="TypeTest_1.UDINTType.CNF" Destination="TypeTest_1.F_EQ_ULINT.REQ" /></Request>
+typesServer;<Request ID="506" Action="CREATE"><Connection Source="TypeTest_1.ULINTType.CNF" Destination="TypeTest_1.F_EQ_BYTE.REQ" /></Request>
+typesServer;<Request ID="507" Action="CREATE"><Connection Source="TypeTest_1.BYTEType.CNF" Destination="TypeTest_1.F_EQ_WORD.REQ" /></Request>
+typesServer;<Request ID="508" Action="CREATE"><Connection Source="TypeTest_1.WORDType.CNF" Destination="TypeTest_1.F_EQ_DWORD.REQ" /></Request>
+typesServer;<Request ID="509" Action="CREATE"><Connection Source="TypeTest_1.DWORDType.CNF" Destination="TypeTest_1.F_EQ_LWORD.REQ" /></Request>
+typesServer;<Request ID="510" Action="CREATE"><Connection Source="TypeTest_1.DATEType.CNF" Destination="TypeTest_1.F_EQ_TOD.REQ" /></Request>
+typesServer;<Request ID="511" Action="CREATE"><Connection Source="TypeTest_1.TODType.CNF" Destination="TypeTest_1.F_EQ_DT.REQ" /></Request>
+typesServer;<Request ID="512" Action="CREATE"><Connection Source="TypeTest_1.DTType.CNF" Destination="TypeTest_1.F_EQ_TIME.REQ" /></Request>
+typesServer;<Request ID="513" Action="CREATE"><Connection Source="TypeTest_1.TIMEType.CNF" Destination="TypeTest_1.F_EQ_REAL.REQ" /></Request>
+typesServer;<Request ID="514" Action="CREATE"><Connection Source="TypeTest_1.REALType.CNF" Destination="TypeTest_1.F_EQ_LREAL.REQ" /></Request>
+typesServer;<Request ID="515" Action="CREATE"><Connection Source="TypeTest_1.LREALType.CNF" Destination="TypeTest_1.F_EQ_Bool_STRING.REQ" /></Request>
+typesServer;<Request ID="516" Action="CREATE"><Connection Source="TypeTest_1.STRINGType.CNF" Destination="TypeTest_1.F_EQ_Bool_WSTRING.REQ" /></Request>
+typesServer;<Request ID="517" Action="CREATE"><Connection Source="TypeTest_1.LWORDType.CNF" Destination="TypeTest_1.F_EQ_REAL.REQ" /></Request>
+typesServer;<Request ID="518" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Text.CNF" Destination="TypeTest_1.localizedTextTestText.REQ" /></Request>
+typesServer;<Request ID="519" Action="CREATE"><Connection Source="TypeTest_1.WSTRINGType.CNF" Destination="TypeTest_1.GET_STRUCT_VALUE.REQ" /></Request>
+typesServer;<Request ID="520" Action="CREATE"><Connection Source="TypeTest_1.localizedTextTestLocale.CNF" Destination="Method.RSP" /></Request>
+typesServer;<Request ID="521" Action="CREATE"><Connection Source="TypeTest_1.localizedTextTestText.CNF" Destination="TypeTest_1.F_EQ_Text_2.REQ" /></Request>
+typesServer;<Request ID="522" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Text_2.CNF" Destination="TypeTest_1.localizedTextTestLocale.REQ" /></Request>
+typesServer;<Request ID="523" Action="CREATE"><Connection Source="TypeTest_1.GET_STRUCT_VALUE.CNF" Destination="TypeTest_1.STRING2STRING.REQ" /></Request>
+typesServer;<Request ID="524" Action="CREATE"><Connection Source="TypeTest_1.STRING2STRING.CNF" Destination="TypeTest_1.GET_STRUCT_VALUE_1.REQ" /></Request>
+typesServer;<Request ID="525" Action="CREATE"><Connection Source="TypeTest_1.GET_STRUCT_VALUE_1.CNF" Destination="TypeTest_1.STRING2STRING_1.REQ" /></Request>
+typesServer;<Request ID="526" Action="CREATE"><Connection Source="TypeTest_1.STRING2STRING_1.CNF" Destination="TypeTest_1.F_EQ_Text.REQ" /></Request>
+typesServer;<Request ID="527" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool.OUT" Destination="TypeTest_1.BollType.check" /></Request>
+typesServer;<Request ID="528" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_SINT.OUT" Destination="TypeTest_1.SINTType.check" /></Request>
+typesServer;<Request ID="529" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_INT.OUT" Destination="TypeTest_1.INTType.check" /></Request>
+typesServer;<Request ID="530" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DINT.OUT" Destination="TypeTest_1.DINType.check" /></Request>
+typesServer;<Request ID="531" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_UINT.OUT" Destination="TypeTest_1.UINTType.check" /></Request>
+typesServer;<Request ID="532" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LINT.OUT" Destination="TypeTest_1.LINTType.check" /></Request>
+typesServer;<Request ID="533" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_USINT.OUT" Destination="TypeTest_1.USINTType.check" /></Request>
+typesServer;<Request ID="534" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_UDINT.OUT" Destination="TypeTest_1.UDINTType.check" /></Request>
+typesServer;<Request ID="535" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_WORD.OUT" Destination="TypeTest_1.WORDType.check" /></Request>
+typesServer;<Request ID="536" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_ULINT.OUT" Destination="TypeTest_1.ULINTType.check" /></Request>
+typesServer;<Request ID="537" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_BYTE.OUT" Destination="TypeTest_1.BYTEType.check" /></Request>
+typesServer;<Request ID="538" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DWORD.OUT" Destination="TypeTest_1.DWORDType.check" /></Request>
+typesServer;<Request ID="539" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_TOD.OUT" Destination="TypeTest_1.TODType.check" /></Request>
+typesServer;<Request ID="540" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LWORD.OUT" Destination="TypeTest_1.LWORDType.check" /></Request>
+typesServer;<Request ID="541" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool_WSTRING.OUT" Destination="TypeTest_1.WSTRINGType.check" /></Request>
+typesServer;<Request ID="542" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_LREAL.OUT" Destination="TypeTest_1.LREALType.check" /></Request>
+typesServer;<Request ID="543" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DATE.OUT" Destination="TypeTest_1.DATEType.check" /></Request>
+typesServer;<Request ID="544" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Bool_STRING.OUT" Destination="TypeTest_1.STRINGType.check" /></Request>
+typesServer;<Request ID="545" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_TIME.OUT" Destination="TypeTest_1.TIMEType.check" /></Request>
+typesServer;<Request ID="546" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_REAL.OUT" Destination="TypeTest_1.REALType.check" /></Request>
+typesServer;<Request ID="547" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_DT.OUT" Destination="TypeTest_1.DTType.check" /></Request>
+typesServer;<Request ID="548" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Text.OUT" Destination="TypeTest_1.localizedTextTestText.check" /></Request>
+typesServer;<Request ID="549" Action="CREATE"><Connection Source="TypeTest_1.F_EQ_Text_2.OUT" Destination="TypeTest_1.localizedTextTestLocale.check" /></Request>
+typesServer;<Request ID="550" Action="CREATE"><Connection Source="TypeTest_1.GET_STRUCT_VALUE.output" Destination="TypeTest_1.STRING2STRING.IN" /></Request>
+typesServer;<Request ID="551" Action="CREATE"><Connection Source="TypeTest_1.GET_STRUCT_VALUE_1.output" Destination="TypeTest_1.STRING2STRING_1.IN" /></Request>
+typesServer;<Request ID="552" Action="CREATE"><Connection Source="TypeTest_1.STRING2STRING_1.OUT" Destination="TypeTest_1.F_EQ_Text_2.IN1" /></Request>
+typesServer;<Request ID="553" Action="CREATE"><Connection Source="TypeTest_1.STRING2STRING.OUT" Destination="TypeTest_1.F_EQ_Text.IN1" /></Request>
+typesServer;<Request ID="554" Action="CREATE"><Connection Source="HandleInitLocal.E_CYCLE.EO" Destination="HandleInitLocal.InitFinished.REQ" /></Request>
+typesServer;<Request ID="555" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.IND" Destination="HandleInitLocal.E_CYCLE.STOP" /></Request>
+typesServer;<Request ID="556" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.CNF" Destination="HandleInitLocal.E_DEMUX_2.EI" /></Request>
+typesServer;<Request ID="557" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO1" Destination="HandleInitLocal.STEST_END.REQ" /></Request>
+typesServer;<Request ID="558" Action="CREATE"><Connection Source="HandleInitLocal.SUBSCRIBE_0.INITO" Destination="HandleInitLocal.InitFinished.INIT" /></Request>
+typesServer;<Request ID="559" Action="CREATE"><Connection Source="HandleInitLocal.InitFinished.INITO" Destination="HandleInitLocal.F_BOOL_TO_UINT.REQ" /></Request>
+typesServer;<Request ID="560" Action="CREATE"><Connection Source="HandleInitLocal.E_DEMUX_2.EO2" Destination="HandleInitLocal.E_CYCLE.START" /></Request>
+typesServer;<Request ID="561" Action="CREATE"><Connection Source="HandleInitLocal.F_BOOL_TO_UINT.OUT" Destination="HandleInitLocal.E_DEMUX_2.K" /></Request>
+typesServer;<Request ID="562" Action="CREATE"><Connection Source="SubApp_1.SINT2SINT_1.CNF" Destination="SubApp_1.INT2INT_1.REQ" /></Request>
+typesServer;<Request ID="563" Action="CREATE"><Connection Source="SubApp_1.INT2INT_1.CNF" Destination="SubApp_1.DINT2DINT_1.REQ" /></Request>
+typesServer;<Request ID="564" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_1_1.CNF" Destination="SubApp_1.BOOL2BOOL_2_1.REQ" /></Request>
+typesServer;<Request ID="565" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_2_1.CNF" Destination="SubApp_1.BOOL2BOOL_3_1.REQ" /></Request>
+typesServer;<Request ID="566" Action="CREATE"><Connection Source="SubApp_1.UINT2UINT_1.CNF" Destination="SubApp_1.UDINT2UDINT_1.REQ" /></Request>
+typesServer;<Request ID="567" Action="CREATE"><Connection Source="SubApp_1.UDINT2UDINT_1.CNF" Destination="SubApp_1.F_ULINT_TO_INT_1.REQ" /></Request>
+typesServer;<Request ID="568" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_4.CNF" Destination="SubApp_1.SINT2SINT_1.REQ" /></Request>
+typesServer;<Request ID="569" Action="CREATE"><Connection Source="SubApp_1.F_LWORD_TO_INT_1.CNF" Destination="SubApp_1.F_INT_TO_LWORD_1.REQ" /></Request>
+typesServer;<Request ID="570" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_LWORD_1.CNF" Destination="SubApp_1.BOOL2BOOL_1_1.REQ" /></Request>
+typesServer;<Request ID="571" Action="CREATE"><Connection Source="SubApp_1.F_LINT_TO_INT_1.CNF" Destination="SubApp_1.F_INT_TO_LINT_1.REQ" /></Request>
+typesServer;<Request ID="572" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_LINT_1.CNF" Destination="SubApp_1.USINT2USINT_1.REQ" /></Request>
+typesServer;<Request ID="573" Action="CREATE"><Connection Source="SubApp_1.TIME2TIME_1.CNF" Destination="SubApp_1.REAL2REAL_1.REQ" /></Request>
+typesServer;<Request ID="574" Action="CREATE"><Connection Source="SubApp_1.REAL2REAL_1.CNF" Destination="SubApp_1.LREAL2LREAL_1.REQ" /></Request>
+typesServer;<Request ID="575" Action="CREATE"><Connection Source="SubApp_1.STRING2STRING_1.CNF" Destination="SubApp_1.WSTRING2WSTRING_1.REQ" /></Request>
+typesServer;<Request ID="576" Action="CREATE"><Connection Source="SubApp_1.BYTE2BYTE_1.CNF" Destination="SubApp_1.WORD2WORD_1.REQ" /></Request>
+typesServer;<Request ID="577" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_3_1.CNF" Destination="SubApp_1.TIME2TIME_1.REQ" /></Request>
+typesServer;<Request ID="578" Action="CREATE"><Connection Source="SubApp_1.DINT2DINT_1.CNF" Destination="SubApp_1.F_LINT_TO_INT_1.REQ" /></Request>
+typesServer;<Request ID="579" Action="CREATE"><Connection Source="SubApp_1.USINT2USINT_1.CNF" Destination="SubApp_1.UINT2UINT_1.REQ" /></Request>
+typesServer;<Request ID="580" Action="CREATE"><Connection Source="SubApp_1.LREAL2LREAL_1.CNF" Destination="SubApp_1.STRING2STRING_1.REQ" /></Request>
+typesServer;<Request ID="581" Action="CREATE"><Connection Source="SubApp_1.WORD2WORD_1.CNF" Destination="SubApp_1.DWORD2DWORD_1.REQ" /></Request>
+typesServer;<Request ID="582" Action="CREATE"><Connection Source="SubApp_1.DWORD2DWORD_1.CNF" Destination="SubApp_1.F_LWORD_TO_INT_1.REQ" /></Request>
+typesServer;<Request ID="583" Action="CREATE"><Connection Source="SubApp_1.F_ULINT_TO_INT_1.CNF" Destination="SubApp_1.F_INT_TO_ULINT.REQ" /></Request>
+typesServer;<Request ID="584" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_ULINT.CNF" Destination="SubApp_1.BYTE2BYTE_1.REQ" /></Request>
+typesServer;<Request ID="585" Action="CREATE"><Connection Source="SubApp_1.LocalizedText2LocalizedText.CNF" Destination="LocalWrite.REQ" /></Request>
+typesServer;<Request ID="586" Action="CREATE"><Connection Source="SubApp_1.WSTRING2WSTRING_1.CNF" Destination="SubApp_1.LocalizedText2LocalizedText.REQ" /></Request>
+typesServer;<Request ID="587" Action="CREATE"><Connection Source="SubApp_1.F_LWORD_TO_INT_1.OUT" Destination="SubApp_1.F_INT_TO_LWORD_1.IN" /></Request>
+typesServer;<Request ID="588" Action="CREATE"><Connection Source="SubApp_1.F_LINT_TO_INT_1.OUT" Destination="SubApp_1.F_INT_TO_LINT_1.IN" /></Request>
+typesServer;<Request ID="589" Action="CREATE"><Connection Source="SubApp_1.INT2INT_1.OUT" Destination="LocalWrite.SD_3" /></Request>
+typesServer;<Request ID="590" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_2_1.OUT" Destination="LocalWrite.SD_15" /></Request>
+typesServer;<Request ID="591" Action="CREATE"><Connection Source="SubApp_1.UDINT2UDINT_1.OUT" Destination="LocalWrite.SD_8" /></Request>
+typesServer;<Request ID="592" Action="CREATE"><Connection Source="SubApp_1.SINT2SINT_1.OUT" Destination="LocalWrite.SD_2" /></Request>
+typesServer;<Request ID="593" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_LWORD_1.OUT" Destination="LocalWrite.SD_13" /></Request>
+typesServer;<Request ID="594" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_LINT_1.OUT" Destination="LocalWrite.SD_5" /></Request>
+typesServer;<Request ID="595" Action="CREATE"><Connection Source="SubApp_1.REAL2REAL_1.OUT" Destination="LocalWrite.SD_18" /></Request>
+typesServer;<Request ID="596" Action="CREATE"><Connection Source="SubApp_1.WSTRING2WSTRING_1.OUT" Destination="LocalWrite.SD_21" /></Request>
+typesServer;<Request ID="597" Action="CREATE"><Connection Source="SubApp_1.BYTE2BYTE_1.OUT" Destination="LocalWrite.SD_10" /></Request>
+typesServer;<Request ID="598" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_4.OUT" Destination="LocalWrite.SD_1" /></Request>
+typesServer;<Request ID="599" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_1_1.OUT" Destination="LocalWrite.SD_14" /></Request>
+typesServer;<Request ID="600" Action="CREATE"><Connection Source="SubApp_1.BOOL2BOOL_3_1.OUT" Destination="LocalWrite.SD_16" /></Request>
+typesServer;<Request ID="601" Action="CREATE"><Connection Source="SubApp_1.UINT2UINT_1.OUT" Destination="LocalWrite.SD_7" /></Request>
+typesServer;<Request ID="602" Action="CREATE"><Connection Source="SubApp_1.STRING2STRING_1.OUT" Destination="LocalWrite.SD_20" /></Request>
+typesServer;<Request ID="603" Action="CREATE"><Connection Source="SubApp_1.DINT2DINT_1.OUT" Destination="LocalWrite.SD_4" /></Request>
+typesServer;<Request ID="604" Action="CREATE"><Connection Source="SubApp_1.LREAL2LREAL_1.OUT" Destination="LocalWrite.SD_19" /></Request>
+typesServer;<Request ID="605" Action="CREATE"><Connection Source="SubApp_1.WORD2WORD_1.OUT" Destination="LocalWrite.SD_11" /></Request>
+typesServer;<Request ID="606" Action="CREATE"><Connection Source="SubApp_1.USINT2USINT_1.OUT" Destination="LocalWrite.SD_6" /></Request>
+typesServer;<Request ID="607" Action="CREATE"><Connection Source="SubApp_1.TIME2TIME_1.OUT" Destination="LocalWrite.SD_17" /></Request>
+typesServer;<Request ID="608" Action="CREATE"><Connection Source="SubApp_1.DWORD2DWORD_1.OUT" Destination="LocalWrite.SD_12" /></Request>
+typesServer;<Request ID="609" Action="CREATE"><Connection Source="SubApp_1.F_INT_TO_ULINT.OUT" Destination="LocalWrite.SD_9" /></Request>
+typesServer;<Request ID="610" Action="CREATE"><Connection Source="SubApp_1.F_ULINT_TO_INT_1.OUT" Destination="SubApp_1.F_INT_TO_ULINT.IN" /></Request>
+typesServer;<Request ID="611" Action="CREATE"><Connection Source="SubApp_1.LocalizedText2LocalizedText.OUT" Destination="LocalWrite.SD_22" /></Request>
+typesServer;<Request ID="612" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.INITO" Destination="E_SR.S" /></Request>
+typesServer;<Request ID="613" Action="CREATE"><Connection Source="SUBSCRIBE_0_1.IND" Destination="E_SR.R" /></Request>
+typesServer;<Request ID="614" Action="CREATE"><Connection Source="START.WARM" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+typesServer;<Request ID="615" Action="CREATE"><Connection Source="START.COLD" Destination="SUBSCRIBE_0_1.INIT" /></Request>
+typesServer;<Request ID="616" Action="CREATE"><Connection Source="E_SWITCH.EO0" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+typesServer;<Request ID="617" Action="CREATE"><Connection Source="E_DELAY.EO" Destination="HandleInitLocal.SUBSCRIBE_0.INIT" /></Request>
+typesServer;<Request ID="618" Action="CREATE"><Connection Source="E_SWITCH.EO1" Destination="SubApp_1.BOOL2BOOL_4.REQ" /></Request>
+typesServer;<Request ID="619" Action="CREATE"><Connection Source="E_SR.EO" Destination="LocalWrite.INIT" /></Request>
+typesServer;<Request ID="620" Action="CREATE"><Connection Source="LocalWrite.CNF" Destination="E_DELAY.START" /></Request>
+typesServer;<Request ID="621" Action="CREATE"><Connection Source="Method.INITO" Destination="E_SWITCH.EI" /></Request>
+typesServer;<Request ID="622" Action="CREATE"><Connection Source="Method.IND" Destination="AllTypes_1.BOOL2BOOL.REQ" /></Request>
+typesServer;<Request ID="623" Action="CREATE"><Connection Source="LocalWrite.INITO" Destination="Read.INIT" /></Request>
+typesServer;<Request ID="624" Action="CREATE"><Connection Source="Read.INITO" Destination="Method.INIT" /></Request>
+typesServer;<Request ID="625" Action="CREATE"><Connection Source="Read.IND" Destination="AllTypes.BOOL2BOOL.REQ" /></Request>
+typesServer;<Request ID="626" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.F_BOOL_TO_UINT.IN" /></Request>
+typesServer;<Request ID="627" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.SUBSCRIBE_0.QI" /></Request>
+typesServer;<Request ID="628" Action="CREATE"><Connection Source="E_SR.Q" Destination="HandleInitLocal.InitFinished.QI" /></Request>
+typesServer;<Request ID="629" Action="CREATE"><Connection Source="E_SR.Q" Destination="E_SWITCH.G" /></Request>
+typesServer;<Request ID="630" Action="CREATE"><Connection Source="E_SR.Q" Destination="LocalWrite.QI" /></Request>
+typesServer;<Request ID="631" Action="CREATE"><Connection Source="E_SR.Q" Destination="Method.QI" /></Request>
+typesServer;<Request ID="632" Action="CREATE"><Connection Source="E_SR.Q" Destination="Read.QI" /></Request>
+typesServer;<Request ID="633" Action="CREATE"><Connection Source="Method.RD_22" Destination="AllTypes_1.LocalizedText2LocalizedText.IN" /></Request>
+typesServer;<Request ID="634" Action="CREATE"><Connection Source="Method.RD_21" Destination="AllTypes_1.WSTRING2WSTRING.IN" /></Request>
+typesServer;<Request ID="635" Action="CREATE"><Connection Source="Method.RD_20" Destination="AllTypes_1.STRING2STRING.IN" /></Request>
+typesServer;<Request ID="636" Action="CREATE"><Connection Source="Method.RD_19" Destination="AllTypes_1.LREAL2LREAL.IN" /></Request>
+typesServer;<Request ID="637" Action="CREATE"><Connection Source="Method.RD_18" Destination="AllTypes_1.REAL2REAL.IN" /></Request>
+typesServer;<Request ID="638" Action="CREATE"><Connection Source="Method.RD_17" Destination="AllTypes_1.TIME2TIME.IN" /></Request>
+typesServer;<Request ID="639" Action="CREATE"><Connection Source="Method.RD_16" Destination="AllTypes_1.BOOL2BOOL_3.IN" /></Request>
+typesServer;<Request ID="640" Action="CREATE"><Connection Source="Method.RD_15" Destination="AllTypes_1.BOOL2BOOL_2.IN" /></Request>
+typesServer;<Request ID="641" Action="CREATE"><Connection Source="Method.RD_14" Destination="AllTypes_1.BOOL2BOOL_1.IN" /></Request>
+typesServer;<Request ID="642" Action="CREATE"><Connection Source="Method.RD_13" Destination="AllTypes_1.F_LWORD_TO_INT.IN" /></Request>
+typesServer;<Request ID="643" Action="CREATE"><Connection Source="Method.RD_12" Destination="AllTypes_1.DWORD2DWORD.IN" /></Request>
+typesServer;<Request ID="644" Action="CREATE"><Connection Source="Method.RD_11" Destination="AllTypes_1.WORD2WORD.IN" /></Request>
+typesServer;<Request ID="645" Action="CREATE"><Connection Source="Method.RD_10" Destination="AllTypes_1.BYTE2BYTE.IN" /></Request>
+typesServer;<Request ID="646" Action="CREATE"><Connection Source="Method.RD_9" Destination="AllTypes_1.F_ULINT_TO_INT.IN" /></Request>
+typesServer;<Request ID="647" Action="CREATE"><Connection Source="Method.RD_8" Destination="AllTypes_1.UDINT2UDINT.IN" /></Request>
+typesServer;<Request ID="648" Action="CREATE"><Connection Source="Method.RD_7" Destination="AllTypes_1.UINT2UINT.IN" /></Request>
+typesServer;<Request ID="649" Action="CREATE"><Connection Source="Method.RD_6" Destination="AllTypes_1.USINT2USINT.IN" /></Request>
+typesServer;<Request ID="650" Action="CREATE"><Connection Source="Method.RD_5" Destination="AllTypes_1.F_LINT_TO_INT.IN" /></Request>
+typesServer;<Request ID="651" Action="CREATE"><Connection Source="Method.RD_4" Destination="AllTypes_1.DINT2DINT.IN" /></Request>
+typesServer;<Request ID="652" Action="CREATE"><Connection Source="Method.RD_3" Destination="AllTypes_1.INT2INT.IN" /></Request>
+typesServer;<Request ID="653" Action="CREATE"><Connection Source="Method.RD_2" Destination="AllTypes_1.SINT2SINT.IN" /></Request>
+typesServer;<Request ID="654" Action="CREATE"><Connection Source="Method.RD_1" Destination="AllTypes_1.BOOL2BOOL.IN" /></Request>
+typesServer;<Request ID="655" Action="CREATE"><Connection Source="Read.RD_22" Destination="AllTypes.LocalizedText2LocalizedText.IN" /></Request>
+typesServer;<Request ID="656" Action="CREATE"><Connection Source="Read.RD_21" Destination="AllTypes.WSTRING2WSTRING.IN" /></Request>
+typesServer;<Request ID="657" Action="CREATE"><Connection Source="Read.RD_20" Destination="AllTypes.STRING2STRING.IN" /></Request>
+typesServer;<Request ID="658" Action="CREATE"><Connection Source="Read.RD_19" Destination="AllTypes.LREAL2LREAL.IN" /></Request>
+typesServer;<Request ID="659" Action="CREATE"><Connection Source="Read.RD_18" Destination="AllTypes.REAL2REAL.IN" /></Request>
+typesServer;<Request ID="660" Action="CREATE"><Connection Source="Read.RD_17" Destination="AllTypes.TIME2TIME.IN" /></Request>
+typesServer;<Request ID="661" Action="CREATE"><Connection Source="Read.RD_16" Destination="AllTypes.BOOL2BOOL_3.IN" /></Request>
+typesServer;<Request ID="662" Action="CREATE"><Connection Source="Read.RD_15" Destination="AllTypes.BOOL2BOOL_2.IN" /></Request>
+typesServer;<Request ID="663" Action="CREATE"><Connection Source="Read.RD_14" Destination="AllTypes.BOOL2BOOL_1.IN" /></Request>
+typesServer;<Request ID="664" Action="CREATE"><Connection Source="Read.RD_13" Destination="AllTypes.F_LWORD_TO_INT.IN" /></Request>
+typesServer;<Request ID="665" Action="CREATE"><Connection Source="Read.RD_12" Destination="AllTypes.DWORD2DWORD.IN" /></Request>
+typesServer;<Request ID="666" Action="CREATE"><Connection Source="Read.RD_11" Destination="AllTypes.WORD2WORD.IN" /></Request>
+typesServer;<Request ID="667" Action="CREATE"><Connection Source="Read.RD_10" Destination="AllTypes.BYTE2BYTE.IN" /></Request>
+typesServer;<Request ID="668" Action="CREATE"><Connection Source="Read.RD_9" Destination="AllTypes.F_ULINT_TO_INT.IN" /></Request>
+typesServer;<Request ID="669" Action="CREATE"><Connection Source="Read.RD_8" Destination="AllTypes.UDINT2UDINT.IN" /></Request>
+typesServer;<Request ID="670" Action="CREATE"><Connection Source="Read.RD_7" Destination="AllTypes.UINT2UINT.IN" /></Request>
+typesServer;<Request ID="671" Action="CREATE"><Connection Source="Read.RD_6" Destination="AllTypes.USINT2USINT.IN" /></Request>
+typesServer;<Request ID="672" Action="CREATE"><Connection Source="Read.RD_5" Destination="AllTypes.F_LINT_TO_INT.IN" /></Request>
+typesServer;<Request ID="673" Action="CREATE"><Connection Source="Read.RD_4" Destination="AllTypes.DINT2DINT.IN" /></Request>
+typesServer;<Request ID="674" Action="CREATE"><Connection Source="Read.RD_3" Destination="AllTypes.INT2INT.IN" /></Request>
+typesServer;<Request ID="675" Action="CREATE"><Connection Source="Read.RD_2" Destination="AllTypes.SINT2SINT.IN" /></Request>
+typesServer;<Request ID="676" Action="CREATE"><Connection Source="Read.RD_1" Destination="AllTypes.BOOL2BOOL.IN" /></Request>
+typesServer;<Request ID="677" Action="START"/>
diff --git a/systemtests/src/modules/opc_ua/wrongParameters.fboot b/systemtests/src/modules/opc_ua/wrongParameters.fboot
new file mode 100644
index 0000000..0b86a4b
--- /dev/null
+++ b/systemtests/src/modules/opc_ua/wrongParameters.fboot
@@ -0,0 +1,2020 @@
+;<Request ID="1" Action="CREATE"><FB Name="WrongParameters" Type="EMB_RES" /></Request>
+WrongParameters;<Request ID="2" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+WrongParameters;<Request ID="3" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="4" Action="CREATE"><FB Name="NoSemicolon.Client1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="5" Action="CREATE"><FB Name="NoSemicolon.Pub1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="6" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="7" Action="CREATE"><FB Name="NoSemicolon.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="8" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.PUB1.QI" /></Request>
+WrongParameters;<Request ID="9" Action="CREATE"><FB Name="NoSemicolon.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="10" Action="CREATE"><FB Name="NoSemicolon.Server0NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="11" Action="CREATE"><FB Name="NoSemicolon.Sub1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="12" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="13" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="14" Action="CREATE"><FB Name="NoSemicolon.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="15" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.SUB1.QI" /></Request>
+WrongParameters;<Request ID="16" Action="CREATE"><FB Name="NoSemicolon.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="17" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.SER0.QI" /></Request>
+WrongParameters;<Request ID="18" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="19" Action="CREATE"><FB Name="NoSemicolon.Client0_1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="20" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="21" Action="CREATE"><FB Name="NoSemicolon.Server1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="22" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="23" Action="CREATE"><FB Name="NoSemicolon.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="24" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.CLI1.QI" /></Request>
+WrongParameters;<Request ID="25" Action="CREATE"><FB Name="NoSemicolon.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="26" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.CLI01.QI" /></Request>
+WrongParameters;<Request ID="27" Action="CREATE"><FB Name="NoSemicolon.Client1_0NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="28" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="29" Action="CREATE"><FB Name="NoSemicolon.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="30" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.CLI10.QI" /></Request>
+WrongParameters;<Request ID="31" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="32" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="33" Action="CREATE"><FB Name="NoSemicolon.Client0NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="34" Action="CREATE"><FB Name="NoSemicolon.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="35" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.CLI0.QI" /></Request>
+WrongParameters;<Request ID="36" Action="CREATE"><FB Name="NoSemicolon.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="37" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.SER1.QI" /></Request>
+WrongParameters;<Request ID="38" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="39" Action="CREATE"><FB Name="NoSemicolon.Server0_1NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="40" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="41" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="42" Action="CREATE"><FB Name="NoSemicolon.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="43" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.SER01.QI" /></Request>
+WrongParameters;<Request ID="44" Action="CREATE"><FB Name="NoSemicolon.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="45" Action="CREATE"><FB Name="NoSemicolon.Server1_0NoSemicolon" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="46" Action="CREATE"><FB Name="NoSemicolon.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="47" Action="CREATE"><FB Name="NoSemicolon.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="48" Action="WRITE"><Connection Source="1" Destination="NoSemicolon.SER10.QI" /></Request>
+WrongParameters;<Request ID="49" Action="CREATE"><FB Name="W2W" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="50" Action="WRITE"><Connection Source="opc_ua[/Objects/test1]" Destination="W2W.IN" /></Request>
+WrongParameters;<Request ID="51" Action="CREATE"><FB Name="W2W_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="52" Action="WRITE"><Connection Source="opc_ua[;/Objects/test1]" Destination="W2W_1.IN" /></Request>
+WrongParameters;<Request ID="53" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="54" Action="CREATE"><FB Name="emptyAction.Client1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="55" Action="CREATE"><FB Name="emptyAction.Pub1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="56" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="57" Action="CREATE"><FB Name="emptyAction.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="58" Action="WRITE"><Connection Source="1" Destination="emptyAction.PUB1.QI" /></Request>
+WrongParameters;<Request ID="59" Action="CREATE"><FB Name="emptyAction.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="60" Action="CREATE"><FB Name="emptyAction.Server0EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="61" Action="CREATE"><FB Name="emptyAction.Sub1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="62" Action="CREATE"><FB Name="emptyAction.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="63" Action="CREATE"><FB Name="emptyAction.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="64" Action="CREATE"><FB Name="emptyAction.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="65" Action="WRITE"><Connection Source="1" Destination="emptyAction.SUB1.QI" /></Request>
+WrongParameters;<Request ID="66" Action="CREATE"><FB Name="emptyAction.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="67" Action="WRITE"><Connection Source="1" Destination="emptyAction.SER0.QI" /></Request>
+WrongParameters;<Request ID="68" Action="CREATE"><FB Name="emptyAction.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="69" Action="CREATE"><FB Name="emptyAction.Client0_1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="70" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="71" Action="CREATE"><FB Name="emptyAction.Server1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="72" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="73" Action="CREATE"><FB Name="emptyAction.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="74" Action="WRITE"><Connection Source="1" Destination="emptyAction.CLI1.QI" /></Request>
+WrongParameters;<Request ID="75" Action="CREATE"><FB Name="emptyAction.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="76" Action="WRITE"><Connection Source="1" Destination="emptyAction.CLI01.QI" /></Request>
+WrongParameters;<Request ID="77" Action="CREATE"><FB Name="emptyAction.Client1_0EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="78" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="79" Action="CREATE"><FB Name="emptyAction.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="80" Action="WRITE"><Connection Source="1" Destination="emptyAction.CLI10.QI" /></Request>
+WrongParameters;<Request ID="81" Action="CREATE"><FB Name="emptyAction.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="82" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="83" Action="CREATE"><FB Name="emptyAction.Client0EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="84" Action="CREATE"><FB Name="emptyAction.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="85" Action="WRITE"><Connection Source="1" Destination="emptyAction.CLI0.QI" /></Request>
+WrongParameters;<Request ID="86" Action="CREATE"><FB Name="emptyAction.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="87" Action="WRITE"><Connection Source="1" Destination="emptyAction.SER1.QI" /></Request>
+WrongParameters;<Request ID="88" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="89" Action="CREATE"><FB Name="emptyAction.Server0_1EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="90" Action="CREATE"><FB Name="emptyAction.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="91" Action="CREATE"><FB Name="emptyAction.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="92" Action="CREATE"><FB Name="emptyAction.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="93" Action="WRITE"><Connection Source="1" Destination="emptyAction.SER01.QI" /></Request>
+WrongParameters;<Request ID="94" Action="CREATE"><FB Name="emptyAction.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="95" Action="CREATE"><FB Name="emptyAction.Server1_0EmptyAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="96" Action="CREATE"><FB Name="emptyAction.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="97" Action="CREATE"><FB Name="emptyAction.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="98" Action="WRITE"><Connection Source="1" Destination="emptyAction.SER10.QI" /></Request>
+WrongParameters;<Request ID="99" Action="CREATE"><FB Name="W2W_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="100" Action="WRITE"><Connection Source="opc_ua[Read;/Objects/test1]" Destination="W2W_1_1.IN" /></Request>
+WrongParameters;<Request ID="101" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="102" Action="CREATE"><FB Name="NoExistingAction.Client1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="103" Action="CREATE"><FB Name="NoExistingAction.Pub1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="104" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="105" Action="CREATE"><FB Name="NoExistingAction.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="106" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.PUB1.QI" /></Request>
+WrongParameters;<Request ID="107" Action="CREATE"><FB Name="NoExistingAction.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="108" Action="CREATE"><FB Name="NoExistingAction.Server0NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="109" Action="CREATE"><FB Name="NoExistingAction.Sub1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="110" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="111" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="112" Action="CREATE"><FB Name="NoExistingAction.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="113" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.SUB1.QI" /></Request>
+WrongParameters;<Request ID="114" Action="CREATE"><FB Name="NoExistingAction.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="115" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.SER0.QI" /></Request>
+WrongParameters;<Request ID="116" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="117" Action="CREATE"><FB Name="NoExistingAction.Client0_1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="118" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="119" Action="CREATE"><FB Name="NoExistingAction.Server1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="120" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="121" Action="CREATE"><FB Name="NoExistingAction.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="122" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.CLI1.QI" /></Request>
+WrongParameters;<Request ID="123" Action="CREATE"><FB Name="NoExistingAction.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="124" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.CLI01.QI" /></Request>
+WrongParameters;<Request ID="125" Action="CREATE"><FB Name="NoExistingAction.Client1_0NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="126" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="127" Action="CREATE"><FB Name="NoExistingAction.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="128" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.CLI10.QI" /></Request>
+WrongParameters;<Request ID="129" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="130" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="131" Action="CREATE"><FB Name="NoExistingAction.Client0NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="132" Action="CREATE"><FB Name="NoExistingAction.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="133" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.CLI0.QI" /></Request>
+WrongParameters;<Request ID="134" Action="CREATE"><FB Name="NoExistingAction.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="135" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.SER1.QI" /></Request>
+WrongParameters;<Request ID="136" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="137" Action="CREATE"><FB Name="NoExistingAction.Server0_1NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="138" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="139" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="140" Action="CREATE"><FB Name="NoExistingAction.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="141" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.SER01.QI" /></Request>
+WrongParameters;<Request ID="142" Action="CREATE"><FB Name="NoExistingAction.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="143" Action="CREATE"><FB Name="NoExistingAction.Server1_0NoExistingAction" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="144" Action="CREATE"><FB Name="NoExistingAction.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="145" Action="CREATE"><FB Name="NoExistingAction.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="146" Action="WRITE"><Connection Source="1" Destination="NoExistingAction.SER10.QI" /></Request>
+WrongParameters;<Request ID="147" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="148" Action="CREATE"><FB Name="UnknownIdentifier.Client1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="149" Action="CREATE"><FB Name="UnknownIdentifier.Pub1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="150" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="151" Action="CREATE"><FB Name="UnknownIdentifier.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="152" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.PUB1.QI" /></Request>
+WrongParameters;<Request ID="153" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="154" Action="CREATE"><FB Name="UnknownIdentifier.Server0UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="155" Action="CREATE"><FB Name="UnknownIdentifier.Sub1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="156" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="157" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="158" Action="CREATE"><FB Name="UnknownIdentifier.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="159" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.SUB1.QI" /></Request>
+WrongParameters;<Request ID="160" Action="CREATE"><FB Name="UnknownIdentifier.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="161" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.SER0.QI" /></Request>
+WrongParameters;<Request ID="162" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="163" Action="CREATE"><FB Name="UnknownIdentifier.Client0_1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="164" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="165" Action="CREATE"><FB Name="UnknownIdentifier.Server1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="166" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="167" Action="CREATE"><FB Name="UnknownIdentifier.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="168" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.CLI1.QI" /></Request>
+WrongParameters;<Request ID="169" Action="CREATE"><FB Name="UnknownIdentifier.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="170" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.CLI01.QI" /></Request>
+WrongParameters;<Request ID="171" Action="CREATE"><FB Name="UnknownIdentifier.Client1_0UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="172" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="173" Action="CREATE"><FB Name="UnknownIdentifier.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="174" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.CLI10.QI" /></Request>
+WrongParameters;<Request ID="175" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="176" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="177" Action="CREATE"><FB Name="UnknownIdentifier.Client0UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="178" Action="CREATE"><FB Name="UnknownIdentifier.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="179" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.CLI0.QI" /></Request>
+WrongParameters;<Request ID="180" Action="CREATE"><FB Name="UnknownIdentifier.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="181" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.SER1.QI" /></Request>
+WrongParameters;<Request ID="182" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="183" Action="CREATE"><FB Name="UnknownIdentifier.Server0_1UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="184" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="185" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="186" Action="CREATE"><FB Name="UnknownIdentifier.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="187" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.SER01.QI" /></Request>
+WrongParameters;<Request ID="188" Action="CREATE"><FB Name="UnknownIdentifier.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="189" Action="CREATE"><FB Name="UnknownIdentifier.Server1_0UnknownIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="190" Action="CREATE"><FB Name="UnknownIdentifier.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="191" Action="CREATE"><FB Name="UnknownIdentifier.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="192" Action="WRITE"><Connection Source="1" Destination="UnknownIdentifier.SER10.QI" /></Request>
+WrongParameters;<Request ID="193" Action="CREATE"><FB Name="W2W_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="194" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/test1,i=1,i=2]" Destination="W2W_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="195" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="196" Action="CREATE"><FB Name="WrongIdentifier.Client1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="197" Action="CREATE"><FB Name="WrongIdentifier.Pub1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="198" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="199" Action="CREATE"><FB Name="WrongIdentifier.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="200" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.PUB1.QI" /></Request>
+WrongParameters;<Request ID="201" Action="CREATE"><FB Name="WrongIdentifier.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="202" Action="CREATE"><FB Name="WrongIdentifier.Server0WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="203" Action="CREATE"><FB Name="WrongIdentifier.Sub1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="204" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="205" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="206" Action="CREATE"><FB Name="WrongIdentifier.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="207" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.SUB1.QI" /></Request>
+WrongParameters;<Request ID="208" Action="CREATE"><FB Name="WrongIdentifier.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="209" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.SER0.QI" /></Request>
+WrongParameters;<Request ID="210" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="211" Action="CREATE"><FB Name="WrongIdentifier.Client0_1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="212" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="213" Action="CREATE"><FB Name="WrongIdentifier.Server1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="214" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="215" Action="CREATE"><FB Name="WrongIdentifier.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="216" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.CLI1.QI" /></Request>
+WrongParameters;<Request ID="217" Action="CREATE"><FB Name="WrongIdentifier.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="218" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.CLI01.QI" /></Request>
+WrongParameters;<Request ID="219" Action="CREATE"><FB Name="WrongIdentifier.Client1_0WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="220" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="221" Action="CREATE"><FB Name="WrongIdentifier.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="222" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.CLI10.QI" /></Request>
+WrongParameters;<Request ID="223" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="224" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="225" Action="CREATE"><FB Name="WrongIdentifier.Client0WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="226" Action="CREATE"><FB Name="WrongIdentifier.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="227" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.CLI0.QI" /></Request>
+WrongParameters;<Request ID="228" Action="CREATE"><FB Name="WrongIdentifier.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="229" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.SER1.QI" /></Request>
+WrongParameters;<Request ID="230" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="231" Action="CREATE"><FB Name="WrongIdentifier.Server0_1WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="232" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="233" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="234" Action="CREATE"><FB Name="WrongIdentifier.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="235" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.SER01.QI" /></Request>
+WrongParameters;<Request ID="236" Action="CREATE"><FB Name="WrongIdentifier.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="237" Action="CREATE"><FB Name="WrongIdentifier.Server1_0WrongIdentifier" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="238" Action="CREATE"><FB Name="WrongIdentifier.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="239" Action="CREATE"><FB Name="WrongIdentifier.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="240" Action="WRITE"><Connection Source="1" Destination="WrongIdentifier.SER10.QI" /></Request>
+WrongParameters;<Request ID="241" Action="CREATE"><FB Name="W2W_1_1_4" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="242" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/test1,1:i=2 i=3]" Destination="W2W_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="243" Action="CREATE"><FB Name="W2W_1_1_2" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="244" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/test1,1:i=1:i=2]" Destination="W2W_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="245" Action="CREATE"><FB Name="W2W_1_1_3" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="246" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/test1,1:p=2]" Destination="W2W_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="247" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="248" Action="CREATE"><FB Name="wrongNodeId.Client1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="249" Action="CREATE"><FB Name="wrongNodeId.Pub1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="250" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="251" Action="CREATE"><FB Name="wrongNodeId.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="252" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.PUB1.QI" /></Request>
+WrongParameters;<Request ID="253" Action="CREATE"><FB Name="wrongNodeId.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="254" Action="CREATE"><FB Name="wrongNodeId.Server0wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="255" Action="CREATE"><FB Name="wrongNodeId.Sub1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="256" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="257" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="258" Action="CREATE"><FB Name="wrongNodeId.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="259" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.SUB1.QI" /></Request>
+WrongParameters;<Request ID="260" Action="CREATE"><FB Name="wrongNodeId.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="261" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.SER0.QI" /></Request>
+WrongParameters;<Request ID="262" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="263" Action="CREATE"><FB Name="wrongNodeId.Client0_1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="264" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="265" Action="CREATE"><FB Name="wrongNodeId.Server1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="266" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="267" Action="CREATE"><FB Name="wrongNodeId.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="268" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.CLI1.QI" /></Request>
+WrongParameters;<Request ID="269" Action="CREATE"><FB Name="wrongNodeId.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="270" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.CLI01.QI" /></Request>
+WrongParameters;<Request ID="271" Action="CREATE"><FB Name="wrongNodeId.Client1_0wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="272" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="273" Action="CREATE"><FB Name="wrongNodeId.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="274" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.CLI10.QI" /></Request>
+WrongParameters;<Request ID="275" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="276" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="277" Action="CREATE"><FB Name="wrongNodeId.Client0wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="278" Action="CREATE"><FB Name="wrongNodeId.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="279" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.CLI0.QI" /></Request>
+WrongParameters;<Request ID="280" Action="CREATE"><FB Name="wrongNodeId.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="281" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.SER1.QI" /></Request>
+WrongParameters;<Request ID="282" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="283" Action="CREATE"><FB Name="wrongNodeId.Server0_1wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="284" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="285" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="286" Action="CREATE"><FB Name="wrongNodeId.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="287" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.SER01.QI" /></Request>
+WrongParameters;<Request ID="288" Action="CREATE"><FB Name="wrongNodeId.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="289" Action="CREATE"><FB Name="wrongNodeId.Server1_0wrongNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="290" Action="CREATE"><FB Name="wrongNodeId.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="291" Action="CREATE"><FB Name="wrongNodeId.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="292" Action="WRITE"><Connection Source="1" Destination="wrongNodeId.SER10.QI" /></Request>
+WrongParameters;<Request ID="293" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="294" Action="CREATE"><FB Name="wrongPair.Client1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="295" Action="CREATE"><FB Name="wrongPair.Pub1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="296" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="297" Action="CREATE"><FB Name="wrongPair.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="298" Action="WRITE"><Connection Source="1" Destination="wrongPair.PUB1.QI" /></Request>
+WrongParameters;<Request ID="299" Action="CREATE"><FB Name="wrongPair.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="300" Action="CREATE"><FB Name="wrongPair.Server0wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="301" Action="CREATE"><FB Name="wrongPair.Sub1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="302" Action="CREATE"><FB Name="wrongPair.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="303" Action="CREATE"><FB Name="wrongPair.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="304" Action="CREATE"><FB Name="wrongPair.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="305" Action="WRITE"><Connection Source="1" Destination="wrongPair.SUB1.QI" /></Request>
+WrongParameters;<Request ID="306" Action="CREATE"><FB Name="wrongPair.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="307" Action="WRITE"><Connection Source="1" Destination="wrongPair.SER0.QI" /></Request>
+WrongParameters;<Request ID="308" Action="CREATE"><FB Name="wrongPair.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="309" Action="CREATE"><FB Name="wrongPair.Client0_1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="310" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="311" Action="CREATE"><FB Name="wrongPair.Server1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="312" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="313" Action="CREATE"><FB Name="wrongPair.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="314" Action="WRITE"><Connection Source="1" Destination="wrongPair.CLI1.QI" /></Request>
+WrongParameters;<Request ID="315" Action="CREATE"><FB Name="wrongPair.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="316" Action="WRITE"><Connection Source="1" Destination="wrongPair.CLI01.QI" /></Request>
+WrongParameters;<Request ID="317" Action="CREATE"><FB Name="wrongPair.Client1_0wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="318" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="319" Action="CREATE"><FB Name="wrongPair.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="320" Action="WRITE"><Connection Source="1" Destination="wrongPair.CLI10.QI" /></Request>
+WrongParameters;<Request ID="321" Action="CREATE"><FB Name="wrongPair.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="322" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="323" Action="CREATE"><FB Name="wrongPair.Client0wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="324" Action="CREATE"><FB Name="wrongPair.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="325" Action="WRITE"><Connection Source="1" Destination="wrongPair.CLI0.QI" /></Request>
+WrongParameters;<Request ID="326" Action="CREATE"><FB Name="wrongPair.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="327" Action="WRITE"><Connection Source="1" Destination="wrongPair.SER1.QI" /></Request>
+WrongParameters;<Request ID="328" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="329" Action="CREATE"><FB Name="wrongPair.Server0_1wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="330" Action="CREATE"><FB Name="wrongPair.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="331" Action="CREATE"><FB Name="wrongPair.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="332" Action="CREATE"><FB Name="wrongPair.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="333" Action="WRITE"><Connection Source="1" Destination="wrongPair.SER01.QI" /></Request>
+WrongParameters;<Request ID="334" Action="CREATE"><FB Name="wrongPair.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="335" Action="CREATE"><FB Name="wrongPair.Server1_0wrongPair" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="336" Action="CREATE"><FB Name="wrongPair.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="337" Action="CREATE"><FB Name="wrongPair.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="338" Action="WRITE"><Connection Source="1" Destination="wrongPair.SER10.QI" /></Request>
+WrongParameters;<Request ID="339" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="340" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Client1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="341" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Pub1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="342" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="343" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="344" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.PUB1.QI" /></Request>
+WrongParameters;<Request ID="345" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="346" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Server0NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="347" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Sub1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="348" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="349" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="350" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="351" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.SUB1.QI" /></Request>
+WrongParameters;<Request ID="352" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="353" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.SER0.QI" /></Request>
+WrongParameters;<Request ID="354" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="355" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Client0_1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="356" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="357" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Server1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="358" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="359" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="360" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.CLI1.QI" /></Request>
+WrongParameters;<Request ID="361" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="362" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.CLI01.QI" /></Request>
+WrongParameters;<Request ID="363" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Client1_0NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="364" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="365" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="366" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.CLI10.QI" /></Request>
+WrongParameters;<Request ID="367" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="368" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="369" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Client0NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="370" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="371" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.CLI0.QI" /></Request>
+WrongParameters;<Request ID="372" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="373" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.SER1.QI" /></Request>
+WrongParameters;<Request ID="374" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="375" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Server0_1NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="376" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="377" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="378" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="379" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.SER01.QI" /></Request>
+WrongParameters;<Request ID="380" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="381" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.Server1_0NoBrowseNameNorNodeId" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="382" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="383" Action="CREATE"><FB Name="RemoteWithoutBrowseNameNorNodeId.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="384" Action="WRITE"><Connection Source="1" Destination="RemoteWithoutBrowseNameNorNodeId.SER10.QI" /></Request>
+WrongParameters;<Request ID="385" Action="CREATE"><FB Name="W2W_1_1_4_2" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="386" Action="WRITE"><Connection Source="opc_ua[READ;192.168.0.1:4840#;]" Destination="W2W_1_1_4_2.IN" /></Request>
+WrongParameters;<Request ID="387" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="388" Action="CREATE"><FB Name="RemoteRead.Client1RemoteReadWrongSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="389" Action="CREATE"><FB Name="RemoteRead.Pub1RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="390" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="391" Action="CREATE"><FB Name="RemoteRead.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="392" Action="WRITE"><Connection Source="1" Destination="RemoteRead.PUB1.QI" /></Request>
+WrongParameters;<Request ID="393" Action="CREATE"><FB Name="RemoteRead.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="394" Action="CREATE"><FB Name="RemoteRead.Server0RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="395" Action="CREATE"><FB Name="RemoteRead.Sub1RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="396" Action="CREATE"><FB Name="RemoteRead.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="397" Action="CREATE"><FB Name="RemoteRead.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="398" Action="CREATE"><FB Name="RemoteRead.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="399" Action="WRITE"><Connection Source="1" Destination="RemoteRead.SER0.QI" /></Request>
+WrongParameters;<Request ID="400" Action="CREATE"><FB Name="RemoteRead.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="401" Action="CREATE"><FB Name="RemoteRead.Server1RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="402" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="403" Action="CREATE"><FB Name="RemoteRead.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="404" Action="WRITE"><Connection Source="1" Destination="RemoteRead.CLI1.QI" /></Request>
+WrongParameters;<Request ID="405" Action="CREATE"><FB Name="RemoteRead.Client1_0Client1RemReadWrongSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="406" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="407" Action="CREATE"><FB Name="RemoteRead.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="408" Action="WRITE"><Connection Source="1" Destination="RemoteRead.CLI10.QI" /></Request>
+WrongParameters;<Request ID="409" Action="CREATE"><FB Name="RemoteRead.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="410" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="411" Action="CREATE"><FB Name="RemoteRead.Client0RemoteReadWrongRD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="412" Action="CREATE"><FB Name="RemoteRead.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="413" Action="WRITE"><Connection Source="1" Destination="RemoteRead.CLI0.QI" /></Request>
+WrongParameters;<Request ID="414" Action="CREATE"><FB Name="RemoteRead.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="415" Action="WRITE"><Connection Source="1" Destination="RemoteRead.SER1.QI" /></Request>
+WrongParameters;<Request ID="416" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="417" Action="CREATE"><FB Name="RemoteRead.Server0_1RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="418" Action="CREATE"><FB Name="RemoteRead.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="419" Action="CREATE"><FB Name="RemoteRead.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="420" Action="WRITE"><Connection Source="1" Destination="RemoteRead.SER01.QI" /></Request>
+WrongParameters;<Request ID="421" Action="CREATE"><FB Name="RemoteRead.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="422" Action="CREATE"><FB Name="RemoteRead.Server1_0RemoteRead" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="423" Action="CREATE"><FB Name="RemoteRead.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="424" Action="CREATE"><FB Name="RemoteRead.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="425" Action="WRITE"><Connection Source="1" Destination="RemoteRead.SER10.QI" /></Request>
+WrongParameters;<Request ID="426" Action="CREATE"><FB Name="RemoteRead.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="427" Action="WRITE"><Connection Source="1" Destination="RemoteRead.SUB1.QI" /></Request>
+WrongParameters;<Request ID="428" Action="CREATE"><FB Name="RemoteRead.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="429" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="430" Action="WRITE"><Connection Source="opc_ua[READ;192.168.0.1:4840#;1:i=4]" Destination="W2W_1_1_4_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="431" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="432" Action="CREATE"><FB Name="LocalRead.Client1Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="433" Action="CREATE"><FB Name="LocalRead.Pub1Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="434" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="435" Action="CREATE"><FB Name="LocalRead.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="436" Action="WRITE"><Connection Source="1" Destination="LocalRead.PUB1.QI" /></Request>
+WrongParameters;<Request ID="437" Action="CREATE"><FB Name="LocalRead.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="438" Action="CREATE"><FB Name="LocalRead.Server0Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="439" Action="CREATE"><FB Name="LocalRead.Sub1ReadWrongNoRDs" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="440" Action="CREATE"><FB Name="LocalRead.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="441" Action="CREATE"><FB Name="LocalRead.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="442" Action="CREATE"><FB Name="LocalRead.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="443" Action="WRITE"><Connection Source="1" Destination="LocalRead.SER0.QI" /></Request>
+WrongParameters;<Request ID="444" Action="CREATE"><FB Name="LocalRead.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="445" Action="CREATE"><FB Name="LocalRead.Client0_1Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="446" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="447" Action="CREATE"><FB Name="LocalRead.Server1Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="448" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="449" Action="CREATE"><FB Name="LocalRead.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="450" Action="WRITE"><Connection Source="1" Destination="LocalRead.CLI1.QI" /></Request>
+WrongParameters;<Request ID="451" Action="CREATE"><FB Name="LocalRead.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="452" Action="WRITE"><Connection Source="1" Destination="LocalRead.CLI01.QI" /></Request>
+WrongParameters;<Request ID="453" Action="CREATE"><FB Name="LocalRead.Client1_0Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="454" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="455" Action="CREATE"><FB Name="LocalRead.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="456" Action="WRITE"><Connection Source="1" Destination="LocalRead.CLI10.QI" /></Request>
+WrongParameters;<Request ID="457" Action="CREATE"><FB Name="LocalRead.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="458" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="459" Action="CREATE"><FB Name="LocalRead.Client0Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="460" Action="CREATE"><FB Name="LocalRead.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="461" Action="WRITE"><Connection Source="1" Destination="LocalRead.CLI0.QI" /></Request>
+WrongParameters;<Request ID="462" Action="CREATE"><FB Name="LocalRead.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="463" Action="WRITE"><Connection Source="1" Destination="LocalRead.SER1.QI" /></Request>
+WrongParameters;<Request ID="464" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="465" Action="CREATE"><FB Name="LocalRead.Server0_1Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="466" Action="CREATE"><FB Name="LocalRead.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="467" Action="CREATE"><FB Name="LocalRead.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="468" Action="CREATE"><FB Name="LocalRead.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="469" Action="WRITE"><Connection Source="1" Destination="LocalRead.SER01.QI" /></Request>
+WrongParameters;<Request ID="470" Action="CREATE"><FB Name="LocalRead.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="471" Action="CREATE"><FB Name="LocalRead.Server1_0Read" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="472" Action="CREATE"><FB Name="LocalRead.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="473" Action="CREATE"><FB Name="LocalRead.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="474" Action="WRITE"><Connection Source="1" Destination="LocalRead.SER10.QI" /></Request>
+WrongParameters;<Request ID="475" Action="CREATE"><FB Name="LocalRead.SUB2" Type="SUBSCRIBE_2" /></Request>
+WrongParameters;<Request ID="476" Action="WRITE"><Connection Source="1" Destination="LocalRead.SUB2.QI" /></Request>
+WrongParameters;<Request ID="477" Action="CREATE"><FB Name="LocalRead.STRING2STRING_4" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="478" Action="CREATE"><FB Name="LocalRead.Sub0ReadWrongNoRDs_" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="479" Action="CREATE"><FB Name="LocalRead.F_NOT_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="480" Action="CREATE"><FB Name="LocalRead.SUB0" Type="SUBSCRIBE_0" /></Request>
+WrongParameters;<Request ID="481" Action="CREATE"><FB Name="W2W_1_1_4_2_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="482" Action="WRITE"><Connection Source="opc_ua[READ;1:i=4]" Destination="W2W_1_1_4_2_1.IN" /></Request>
+WrongParameters;<Request ID="483" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="484" Action="WRITE"><Connection Source="opc_ua[WRITE;1:i=4]" Destination="W2W_1_1_4_2_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="485" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="486" Action="CREATE"><FB Name="RemoteWrite.Cli1RemWriteGoodSDwRD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="487" Action="CREATE"><FB Name="RemoteWrite.Cli2RemWriteWrongSDGoodRD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="488" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="489" Action="CREATE"><FB Name="RemoteWrite.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="490" Action="CREATE"><FB Name="RemoteWrite.Server0RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="491" Action="CREATE"><FB Name="RemoteWrite.Sub1RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="492" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="493" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="494" Action="CREATE"><FB Name="RemoteWrite.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="495" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.SER0.QI" /></Request>
+WrongParameters;<Request ID="496" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="497" Action="CREATE"><FB Name="RemoteWrite.Server1RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="498" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="499" Action="CREATE"><FB Name="RemoteWrite.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="500" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.CLI1.QI" /></Request>
+WrongParameters;<Request ID="501" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="502" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="503" Action="CREATE"><FB Name="RemoteWrite.Client0RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="504" Action="CREATE"><FB Name="RemoteWrite.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="505" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.CLI0.QI" /></Request>
+WrongParameters;<Request ID="506" Action="CREATE"><FB Name="RemoteWrite.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="507" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.SER1.QI" /></Request>
+WrongParameters;<Request ID="508" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="509" Action="CREATE"><FB Name="RemoteWrite.Server0_1RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="510" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="511" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="512" Action="CREATE"><FB Name="RemoteWrite.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="513" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.SER01.QI" /></Request>
+WrongParameters;<Request ID="514" Action="CREATE"><FB Name="RemoteWrite.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="515" Action="CREATE"><FB Name="RemoteWrite.Server1_0RemWrite" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="516" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="517" Action="CREATE"><FB Name="RemoteWrite.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="518" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.SER10.QI" /></Request>
+WrongParameters;<Request ID="519" Action="CREATE"><FB Name="RemoteWrite.SUB2" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="520" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.SUB2.QI" /></Request>
+WrongParameters;<Request ID="521" Action="CREATE"><FB Name="RemoteWrite.Pub0RemWriteWrondSD_1" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="522" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="523" Action="CREATE"><FB Name="RemoteWrite.PUB0" Type="PUBLISH_0" /></Request>
+WrongParameters;<Request ID="524" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.PUB0.QI" /></Request>
+WrongParameters;<Request ID="525" Action="CREATE"><FB Name="RemoteWrite.CLI2" Type="CLIENT_2_0" /></Request>
+WrongParameters;<Request ID="526" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.CLI2.QI" /></Request>
+WrongParameters;<Request ID="527" Action="CREATE"><FB Name="RemoteWrite.F_NOT_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="528" Action="CREATE"><FB Name="RemoteWrite.Cli3WrongSDWrongRD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="529" Action="CREATE"><FB Name="RemoteWrite.CLI3" Type="CLIENT_2_1" /></Request>
+WrongParameters;<Request ID="530" Action="WRITE"><Connection Source="1" Destination="RemoteWrite.CLI3.QI" /></Request>
+WrongParameters;<Request ID="531" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="532" Action="WRITE"><Connection Source="opc_ua[WRITE;192.168.0.1:4840#;1:i=4]" Destination="W2W_1_1_4_2_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="533" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="534" Action="CREATE"><FB Name="LocalWrite.Client1Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="535" Action="CREATE"><FB Name="LocalWrite.Pub1WriteWrondSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="536" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="537" Action="CREATE"><FB Name="LocalWrite.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="538" Action="CREATE"><FB Name="LocalWrite.Server0Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="539" Action="CREATE"><FB Name="LocalWrite.Sub1Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="540" Action="CREATE"><FB Name="LocalWrite.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="541" Action="CREATE"><FB Name="LocalWrite.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="542" Action="CREATE"><FB Name="LocalWrite.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="543" Action="WRITE"><Connection Source="1" Destination="LocalWrite.SER0.QI" /></Request>
+WrongParameters;<Request ID="544" Action="CREATE"><FB Name="LocalWrite.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="545" Action="CREATE"><FB Name="LocalWrite.Client0_1Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="546" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="547" Action="CREATE"><FB Name="LocalWrite.Server1Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="548" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="549" Action="CREATE"><FB Name="LocalWrite.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="550" Action="WRITE"><Connection Source="1" Destination="LocalWrite.CLI1.QI" /></Request>
+WrongParameters;<Request ID="551" Action="CREATE"><FB Name="LocalWrite.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="552" Action="WRITE"><Connection Source="1" Destination="LocalWrite.CLI01.QI" /></Request>
+WrongParameters;<Request ID="553" Action="CREATE"><FB Name="LocalWrite.Client1_0Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="554" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="555" Action="CREATE"><FB Name="LocalWrite.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="556" Action="WRITE"><Connection Source="1" Destination="LocalWrite.CLI10.QI" /></Request>
+WrongParameters;<Request ID="557" Action="CREATE"><FB Name="LocalWrite.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="558" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="559" Action="CREATE"><FB Name="LocalWrite.Client0Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="560" Action="CREATE"><FB Name="LocalWrite.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="561" Action="WRITE"><Connection Source="1" Destination="LocalWrite.CLI0.QI" /></Request>
+WrongParameters;<Request ID="562" Action="CREATE"><FB Name="LocalWrite.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="563" Action="WRITE"><Connection Source="1" Destination="LocalWrite.SER1.QI" /></Request>
+WrongParameters;<Request ID="564" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="565" Action="CREATE"><FB Name="LocalWrite.Server0_1Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="566" Action="CREATE"><FB Name="LocalWrite.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="567" Action="CREATE"><FB Name="LocalWrite.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="568" Action="CREATE"><FB Name="LocalWrite.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="569" Action="WRITE"><Connection Source="1" Destination="LocalWrite.SER01.QI" /></Request>
+WrongParameters;<Request ID="570" Action="CREATE"><FB Name="LocalWrite.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="571" Action="CREATE"><FB Name="LocalWrite.Server1_0Write" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="572" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="573" Action="CREATE"><FB Name="LocalWrite.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="574" Action="WRITE"><Connection Source="1" Destination="LocalWrite.SER10.QI" /></Request>
+WrongParameters;<Request ID="575" Action="CREATE"><FB Name="LocalWrite.SUB2" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="576" Action="WRITE"><Connection Source="1" Destination="LocalWrite.SUB2.QI" /></Request>
+WrongParameters;<Request ID="577" Action="CREATE"><FB Name="LocalWrite.PUB1" Type="PUBLISH_2" /></Request>
+WrongParameters;<Request ID="578" Action="WRITE"><Connection Source="1" Destination="LocalWrite.PUB1.QI" /></Request>
+WrongParameters;<Request ID="579" Action="CREATE"><FB Name="LocalWrite.Pub0WriteWrondSD_1" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="580" Action="CREATE"><FB Name="LocalWrite.F_NOT_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="581" Action="CREATE"><FB Name="LocalWrite.PUB0" Type="PUBLISH_0" /></Request>
+WrongParameters;<Request ID="582" Action="WRITE"><Connection Source="1" Destination="LocalWrite.PUB0.QI" /></Request>
+WrongParameters;<Request ID="583" Action="CREATE"><FB Name="CreateMethod.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="584" Action="CREATE"><FB Name="CreateMethod.Client1CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="585" Action="CREATE"><FB Name="CreateMethod.Pub1CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="586" Action="CREATE"><FB Name="CreateMethod.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="587" Action="WRITE"><Connection Source="1" Destination="CreateMethod.PUB1.QI" /></Request>
+WrongParameters;<Request ID="588" Action="CREATE"><FB Name="CreateMethod.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="589" Action="CREATE"><FB Name="CreateMethod.Sub1CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="590" Action="CREATE"><FB Name="CreateMethod.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="591" Action="CREATE"><FB Name="CreateMethod.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="592" Action="CREATE"><FB Name="CreateMethod.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="593" Action="WRITE"><Connection Source="1" Destination="CreateMethod.SUB1.QI" /></Request>
+WrongParameters;<Request ID="594" Action="CREATE"><FB Name="CreateMethod.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="595" Action="CREATE"><FB Name="CreateMethod.Client0_1CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="596" Action="CREATE"><FB Name="CreateMethod.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="597" Action="CREATE"><FB Name="CreateMethod.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="598" Action="WRITE"><Connection Source="1" Destination="CreateMethod.CLI1.QI" /></Request>
+WrongParameters;<Request ID="599" Action="CREATE"><FB Name="CreateMethod.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="600" Action="WRITE"><Connection Source="1" Destination="CreateMethod.CLI01.QI" /></Request>
+WrongParameters;<Request ID="601" Action="CREATE"><FB Name="CreateMethod.Client1_0CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="602" Action="CREATE"><FB Name="CreateMethod.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="603" Action="CREATE"><FB Name="CreateMethod.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="604" Action="WRITE"><Connection Source="1" Destination="CreateMethod.CLI10.QI" /></Request>
+WrongParameters;<Request ID="605" Action="CREATE"><FB Name="CreateMethod.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="606" Action="CREATE"><FB Name="CreateMethod.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="607" Action="CREATE"><FB Name="CreateMethod.Client0CreateMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="608" Action="CREATE"><FB Name="CreateMethod.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="609" Action="WRITE"><Connection Source="1" Destination="CreateMethod.CLI0.QI" /></Request>
+WrongParameters;<Request ID="610" Action="CREATE"><FB Name="CreateMethod.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="611" Action="CREATE"><FB Name="CreateMethod.CreateMethodWrongNoOfPairs" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="612" Action="CREATE"><FB Name="CreateMethod.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="613" Action="CREATE"><FB Name="CreateMethod.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="614" Action="WRITE"><Connection Source="1" Destination="CreateMethod.SER01.QI" /></Request>
+WrongParameters;<Request ID="615" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;/Objects/test1,1:i=4;/Objects/test2,1:i=5]" Destination="CreateMethod.SER01.ID" /></Request>
+WrongParameters;<Request ID="616" Action="CREATE"><FB Name="CreateMethod.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="617" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="618" Action="WRITE"><Connection Source="opc_ua[CREATE_METHOD;1:i=4]" Destination="W2W_1_1_4_2_1_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="619" Action="CREATE"><FB Name="CallMethod.Pub1CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="620" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="621" Action="CREATE"><FB Name="CallMethod.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="622" Action="WRITE"><Connection Source="1" Destination="CallMethod.PUB1.QI" /></Request>
+WrongParameters;<Request ID="623" Action="CREATE"><FB Name="CallMethod.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="624" Action="CREATE"><FB Name="CallMethod.Server0CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="625" Action="CREATE"><FB Name="CallMethod.Sub1CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="626" Action="CREATE"><FB Name="CallMethod.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="627" Action="CREATE"><FB Name="CallMethod.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="628" Action="CREATE"><FB Name="CallMethod.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="629" Action="WRITE"><Connection Source="1" Destination="CallMethod.SUB1.QI" /></Request>
+WrongParameters;<Request ID="630" Action="CREATE"><FB Name="CallMethod.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="631" Action="WRITE"><Connection Source="1" Destination="CallMethod.SER0.QI" /></Request>
+WrongParameters;<Request ID="632" Action="CREATE"><FB Name="CallMethod.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="633" Action="CREATE"><FB Name="CallMethod.Server1CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="634" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="635" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="636" Action="CREATE"><FB Name="CallMethod.Client0CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="637" Action="CREATE"><FB Name="CallMethod.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="638" Action="WRITE"><Connection Source="1" Destination="CallMethod.CLI0.QI" /></Request>
+WrongParameters;<Request ID="639" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;/Objects/test1,1:i=4;/Objects/test2,1:i=5]" Destination="CallMethod.CLI0.ID" /></Request>
+WrongParameters;<Request ID="640" Action="CREATE"><FB Name="CallMethod.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="641" Action="WRITE"><Connection Source="1" Destination="CallMethod.SER1.QI" /></Request>
+WrongParameters;<Request ID="642" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="643" Action="CREATE"><FB Name="CallMethod.Server0_1CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="644" Action="CREATE"><FB Name="CallMethod.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="645" Action="CREATE"><FB Name="CallMethod.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="646" Action="WRITE"><Connection Source="1" Destination="CallMethod.SER01.QI" /></Request>
+WrongParameters;<Request ID="647" Action="CREATE"><FB Name="CallMethod.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="648" Action="CREATE"><FB Name="CallMethod.Server1_0CallMethod" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="649" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="650" Action="CREATE"><FB Name="CallMethod.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="651" Action="WRITE"><Connection Source="1" Destination="CallMethod.SER10.QI" /></Request>
+WrongParameters;<Request ID="652" Action="CREATE"><FB Name="CallMethod.CLI0_1" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="653" Action="WRITE"><Connection Source="1" Destination="CallMethod.CLI0_1.QI" /></Request>
+WrongParameters;<Request ID="654" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;,1:i=4]" Destination="CallMethod.CLI0_1.ID" /></Request>
+WrongParameters;<Request ID="655" Action="CREATE"><FB Name="CallMethod.ClientCallNoBrowsePath" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="656" Action="CREATE"><FB Name="CallMethod.F_NOT_1_1_1_4_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="657" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1_1_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="658" Action="WRITE"><Connection Source="opc_ua[CALL_METHOD;1:i=4]" Destination="W2W_1_1_4_2_1_1_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="659" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="660" Action="CREATE"><FB Name="Subscribe.Client1Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="661" Action="CREATE"><FB Name="Subscribe.Pub1Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="662" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="663" Action="CREATE"><FB Name="Subscribe.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="664" Action="WRITE"><Connection Source="1" Destination="Subscribe.PUB1.QI" /></Request>
+WrongParameters;<Request ID="665" Action="CREATE"><FB Name="Subscribe.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="666" Action="CREATE"><FB Name="Subscribe.Server0Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="667" Action="CREATE"><FB Name="Subscribe.Sub1SubWrongNoRDs" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="668" Action="CREATE"><FB Name="Subscribe.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="669" Action="CREATE"><FB Name="Subscribe.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="670" Action="CREATE"><FB Name="Subscribe.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="671" Action="WRITE"><Connection Source="1" Destination="Subscribe.SER0.QI" /></Request>
+WrongParameters;<Request ID="672" Action="CREATE"><FB Name="Subscribe.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="673" Action="CREATE"><FB Name="Subscribe.Client0_1Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="674" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="675" Action="CREATE"><FB Name="Subscribe.Server1Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="676" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="677" Action="CREATE"><FB Name="Subscribe.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="678" Action="WRITE"><Connection Source="1" Destination="Subscribe.CLI1.QI" /></Request>
+WrongParameters;<Request ID="679" Action="CREATE"><FB Name="Subscribe.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="680" Action="WRITE"><Connection Source="1" Destination="Subscribe.CLI01.QI" /></Request>
+WrongParameters;<Request ID="681" Action="CREATE"><FB Name="Subscribe.Client1_0Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="682" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="683" Action="CREATE"><FB Name="Subscribe.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="684" Action="WRITE"><Connection Source="1" Destination="Subscribe.CLI10.QI" /></Request>
+WrongParameters;<Request ID="685" Action="CREATE"><FB Name="Subscribe.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="686" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="687" Action="CREATE"><FB Name="Subscribe.Client0Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="688" Action="CREATE"><FB Name="Subscribe.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="689" Action="WRITE"><Connection Source="1" Destination="Subscribe.CLI0.QI" /></Request>
+WrongParameters;<Request ID="690" Action="CREATE"><FB Name="Subscribe.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="691" Action="WRITE"><Connection Source="1" Destination="Subscribe.SER1.QI" /></Request>
+WrongParameters;<Request ID="692" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="693" Action="CREATE"><FB Name="Subscribe.Server0_1Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="694" Action="CREATE"><FB Name="Subscribe.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="695" Action="CREATE"><FB Name="Subscribe.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="696" Action="CREATE"><FB Name="Subscribe.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="697" Action="WRITE"><Connection Source="1" Destination="Subscribe.SER01.QI" /></Request>
+WrongParameters;<Request ID="698" Action="CREATE"><FB Name="Subscribe.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="699" Action="CREATE"><FB Name="Subscribe.Server1_0Sub" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="700" Action="CREATE"><FB Name="Subscribe.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="701" Action="CREATE"><FB Name="Subscribe.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="702" Action="WRITE"><Connection Source="1" Destination="Subscribe.SER10.QI" /></Request>
+WrongParameters;<Request ID="703" Action="CREATE"><FB Name="Subscribe.SUB2" Type="SUBSCRIBE_2" /></Request>
+WrongParameters;<Request ID="704" Action="WRITE"><Connection Source="1" Destination="Subscribe.SUB2.QI" /></Request>
+WrongParameters;<Request ID="705" Action="CREATE"><FB Name="Subscribe.STRING2STRING_4" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="706" Action="CREATE"><FB Name="Subscribe.Sub0SubWrongNoRDs_" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="707" Action="CREATE"><FB Name="Subscribe.F_NOT_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="708" Action="CREATE"><FB Name="Subscribe.SUB0" Type="SUBSCRIBE_0" /></Request>
+WrongParameters;<Request ID="709" Action="WRITE"><Connection Source="1" Destination="Subscribe.SUB0.QI" /></Request>
+WrongParameters;<Request ID="710" Action="CREATE"><FB Name="W2W_1_1_4_2_1_1_1_1_1_1_1" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="711" Action="WRITE"><Connection Source="opc_ua[SUBSCRIBE;1:i=4]" Destination="W2W_1_1_4_2_1_1_1_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="712" Action="CREATE"><FB Name="W2W_2" Type="WSTRING2WSTRING" /></Request>
+WrongParameters;<Request ID="713" Action="WRITE"><Connection Source="opc_ua[READ;/Objects/test1,1:g=2]" Destination="W2W_2.IN" /></Request>
+WrongParameters;<Request ID="714" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="715" Action="CREATE"><FB Name="GUIDIdentifier.Client1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="716" Action="CREATE"><FB Name="GUIDIdentifier.Pub1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="717" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="718" Action="CREATE"><FB Name="GUIDIdentifier.PUB1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="719" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.PUB1.QI" /></Request>
+WrongParameters;<Request ID="720" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="721" Action="CREATE"><FB Name="GUIDIdentifier.Server0GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="722" Action="CREATE"><FB Name="GUIDIdentifier.Sub1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="723" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="724" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="725" Action="CREATE"><FB Name="GUIDIdentifier.SUB1" Type="SUBSCRIBE_1" /></Request>
+WrongParameters;<Request ID="726" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.SUB1.QI" /></Request>
+WrongParameters;<Request ID="727" Action="CREATE"><FB Name="GUIDIdentifier.SER0" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="728" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.SER0.QI" /></Request>
+WrongParameters;<Request ID="729" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="730" Action="CREATE"><FB Name="GUIDIdentifier.Client0_1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="731" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="732" Action="CREATE"><FB Name="GUIDIdentifier.Server1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="733" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="734" Action="CREATE"><FB Name="GUIDIdentifier.CLI1" Type="CLIENT_1" /></Request>
+WrongParameters;<Request ID="735" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.CLI1.QI" /></Request>
+WrongParameters;<Request ID="736" Action="CREATE"><FB Name="GUIDIdentifier.CLI01" Type="CLIENT_0_1" /></Request>
+WrongParameters;<Request ID="737" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.CLI01.QI" /></Request>
+WrongParameters;<Request ID="738" Action="CREATE"><FB Name="GUIDIdentifier.Client1_0GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="739" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="740" Action="CREATE"><FB Name="GUIDIdentifier.CLI10" Type="CLIENT_1_0" /></Request>
+WrongParameters;<Request ID="741" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.CLI10.QI" /></Request>
+WrongParameters;<Request ID="742" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING_1_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="743" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="744" Action="CREATE"><FB Name="GUIDIdentifier.Client0GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="745" Action="CREATE"><FB Name="GUIDIdentifier.CLI0" Type="CLIENT_0" /></Request>
+WrongParameters;<Request ID="746" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.CLI0.QI" /></Request>
+WrongParameters;<Request ID="747" Action="CREATE"><FB Name="GUIDIdentifier.SER1" Type="SERVER_1" /></Request>
+WrongParameters;<Request ID="748" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.SER1.QI" /></Request>
+WrongParameters;<Request ID="749" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_2_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="750" Action="CREATE"><FB Name="GUIDIdentifier.Server0_1GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="751" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING_2" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="752" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING_2_1" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="753" Action="CREATE"><FB Name="GUIDIdentifier.SER01" Type="SERVER_0_1" /></Request>
+WrongParameters;<Request ID="754" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.SER01.QI" /></Request>
+WrongParameters;<Request ID="755" Action="CREATE"><FB Name="GUIDIdentifier.STRING2STRING_3" Type="STRING2STRING" /></Request>
+WrongParameters;<Request ID="756" Action="CREATE"><FB Name="GUIDIdentifier.Server1_0GUID" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="757" Action="CREATE"><FB Name="GUIDIdentifier.F_NOT_1_1_1_2_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="758" Action="CREATE"><FB Name="GUIDIdentifier.SER10" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="759" Action="WRITE"><Connection Source="1" Destination="GUIDIdentifier.SER10.QI" /></Request>
+WrongParameters;<Request ID="760" Action="CREATE"><FB Name="createObject.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="761" Action="WRITE"><Connection Source="1" Destination="createObject.SERVER_1_0.QI" /></Request>
+WrongParameters;<Request ID="762" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject]" Destination="createObject.SERVER_1_0.ID" /></Request>
+WrongParameters;<Request ID="763" Action="CREATE"><FB Name="createObject.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="764" Action="CREATE"><FB Name="createObject.createnoPublishWrongPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="765" Action="CREATE"><FB Name="createObject.createnoPublishGoodPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="766" Action="CREATE"><FB Name="createObject.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="767" Action="CREATE"><FB Name="createObject.createnoPublishGoodPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="768" Action="CREATE"><FB Name="createObject.F_NOT_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="769" Action="CREATE"><FB Name="createObject.createnoPublishWrongPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="770" Action="CREATE"><FB Name="createObject.F_NOT_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="771" Action="CREATE"><FB Name="createObject.createpublishGoodPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="772" Action="CREATE"><FB Name="createObject.F_NOT_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="773" Action="CREATE"><FB Name="createObject.createpublishWrongPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="774" Action="CREATE"><FB Name="createObject.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="775" Action="CREATE"><FB Name="createObject.createpublishWrongPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="776" Action="CREATE"><FB Name="createObject.F_NOT_3_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="777" Action="CREATE"><FB Name="createObject.SERVER_1_0_2" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="778" Action="WRITE"><Connection Source="1" Destination="createObject.SERVER_1_0_2.QI" /></Request>
+WrongParameters;<Request ID="779" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="createObject.SERVER_1_0_2.ID" /></Request>
+WrongParameters;<Request ID="780" Action="CREATE"><FB Name="createObject.SERVER_1_0_1" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="781" Action="WRITE"><Connection Source="1" Destination="createObject.SERVER_1_0_1.QI" /></Request>
+WrongParameters;<Request ID="782" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject]" Destination="createObject.SERVER_1_0_1.ID" /></Request>
+WrongParameters;<Request ID="783" Action="CREATE"><FB Name="createObject.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+WrongParameters;<Request ID="784" Action="CREATE"><FB Name="createObject.SERVER_1_0_3" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="785" Action="WRITE"><Connection Source="1" Destination="createObject.SERVER_1_0_3.QI" /></Request>
+WrongParameters;<Request ID="786" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="createObject.SERVER_1_0_3.ID" /></Request>
+WrongParameters;<Request ID="787" Action="CREATE"><FB Name="createObject.PUBLISH_0_1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="788" Action="WRITE"><Connection Source="1" Destination="createObject.PUBLISH_0_1.QI" /></Request>
+WrongParameters;<Request ID="789" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject]" Destination="createObject.PUBLISH_0_1.ID" /></Request>
+WrongParameters;<Request ID="790" Action="CREATE"><FB Name="createObject.PUBLISH_1" Type="PUBLISH_0" /></Request>
+WrongParameters;<Request ID="791" Action="WRITE"><Connection Source="1" Destination="createObject.PUBLISH_1.QI" /></Request>
+WrongParameters;<Request ID="792" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject]" Destination="createObject.PUBLISH_1.ID" /></Request>
+WrongParameters;<Request ID="793" Action="CREATE"><FB Name="createObject.PUBLISH_0" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="794" Action="WRITE"><Connection Source="1" Destination="createObject.PUBLISH_0.QI" /></Request>
+WrongParameters;<Request ID="795" Action="WRITE"><Connection Source="opc_ua[CREATE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="createObject.PUBLISH_0.ID" /></Request>
+WrongParameters;<Request ID="796" Action="CREATE"><FB Name="deleteObject.SERVER_1_0" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="797" Action="WRITE"><Connection Source="1" Destination="deleteObject.SERVER_1_0.QI" /></Request>
+WrongParameters;<Request ID="798" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="deleteObject.SERVER_1_0.ID" /></Request>
+WrongParameters;<Request ID="799" Action="CREATE"><FB Name="deleteObject.F_NOT" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="800" Action="CREATE"><FB Name="deleteObject.deletenoPublishWrongPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="801" Action="CREATE"><FB Name="deleteObject.deletenoPublishGoodPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="802" Action="CREATE"><FB Name="deleteObject.F_NOT_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="803" Action="CREATE"><FB Name="deleteObject.deletenoPublishGoodPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="804" Action="CREATE"><FB Name="deleteObject.F_NOT_2" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="805" Action="CREATE"><FB Name="deleteObject.deletenoPublishWrongPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="806" Action="CREATE"><FB Name="deleteObject.F_NOT_3" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="807" Action="CREATE"><FB Name="deleteObject.deletepublishGoodPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="808" Action="CREATE"><FB Name="deleteObject.F_NOT_4" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="809" Action="CREATE"><FB Name="deleteObject.deletepublishWrongPairsGoodSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="810" Action="CREATE"><FB Name="deleteObject.F_NOT_1_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="811" Action="CREATE"><FB Name="deleteObject.deletepublishWrongPairsBadSD" Type="TEST_CONDITION" /></Request>
+WrongParameters;<Request ID="812" Action="CREATE"><FB Name="deleteObject.F_NOT_3_1" Type="F_NOT" /></Request>
+WrongParameters;<Request ID="813" Action="CREATE"><FB Name="deleteObject.SERVER_1_0_2" Type="SERVER_1_0" /></Request>
+WrongParameters;<Request ID="814" Action="WRITE"><Connection Source="1" Destination="deleteObject.SERVER_1_0_2.QI" /></Request>
+WrongParameters;<Request ID="815" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject]" Destination="deleteObject.SERVER_1_0_2.ID" /></Request>
+WrongParameters;<Request ID="816" Action="CREATE"><FB Name="deleteObject.SERVER_1_0_1" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="817" Action="WRITE"><Connection Source="1" Destination="deleteObject.SERVER_1_0_1.QI" /></Request>
+WrongParameters;<Request ID="818" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="deleteObject.SERVER_1_0_1.ID" /></Request>
+WrongParameters;<Request ID="819" Action="CREATE"><FB Name="deleteObject.BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+WrongParameters;<Request ID="820" Action="CREATE"><FB Name="deleteObject.SERVER_1_0_3" Type="SERVER_0" /></Request>
+WrongParameters;<Request ID="821" Action="WRITE"><Connection Source="1" Destination="deleteObject.SERVER_1_0_3.QI" /></Request>
+WrongParameters;<Request ID="822" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject]" Destination="deleteObject.SERVER_1_0_3.ID" /></Request>
+WrongParameters;<Request ID="823" Action="CREATE"><FB Name="deleteObject.PUBLISH_0_1" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="824" Action="WRITE"><Connection Source="1" Destination="deleteObject.PUBLISH_0_1.QI" /></Request>
+WrongParameters;<Request ID="825" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="deleteObject.PUBLISH_0_1.ID" /></Request>
+WrongParameters;<Request ID="826" Action="CREATE"><FB Name="deleteObject.PUBLISH_1" Type="PUBLISH_0" /></Request>
+WrongParameters;<Request ID="827" Action="WRITE"><Connection Source="1" Destination="deleteObject.PUBLISH_1.QI" /></Request>
+WrongParameters;<Request ID="828" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject;/Objects/MyObject]" Destination="deleteObject.PUBLISH_1.ID" /></Request>
+WrongParameters;<Request ID="829" Action="CREATE"><FB Name="deleteObject.PUBLISH_0" Type="PUBLISH_1" /></Request>
+WrongParameters;<Request ID="830" Action="WRITE"><Connection Source="1" Destination="deleteObject.PUBLISH_0.QI" /></Request>
+WrongParameters;<Request ID="831" Action="WRITE"><Connection Source="opc_ua[DELETE_OBJECT;/Objects/MyObject]" Destination="deleteObject.PUBLISH_0.ID" /></Request>
+WrongParameters;<Request ID="832" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1.CNF" Destination="NoSemicolon.Client1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="833" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1.CNF" Destination="NoSemicolon.Pub1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="834" Action="CREATE"><Connection Source="NoSemicolon.Pub1NoSemicolon.CNF" Destination="NoSemicolon.SER0.INIT" /></Request>
+WrongParameters;<Request ID="835" Action="CREATE"><Connection Source="NoSemicolon.SER0.INITO" Destination="NoSemicolon.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="836" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1.CNF" Destination="NoSemicolon.Server0NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="837" Action="CREATE"><Connection Source="NoSemicolon.Sub1NoSemicolon.CNF" Destination="NoSemicolon.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="838" Action="CREATE"><Connection Source="NoSemicolon.PUB1.INITO" Destination="NoSemicolon.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="839" Action="CREATE"><Connection Source="NoSemicolon.SUB1.INITO" Destination="NoSemicolon.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="840" Action="CREATE"><Connection Source="NoSemicolon.F_NOT.CNF" Destination="NoSemicolon.Sub1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="841" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_1.CNF" Destination="NoSemicolon.Client0_1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="842" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2.CNF" Destination="NoSemicolon.Server1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="843" Action="CREATE"><Connection Source="NoSemicolon.CLI1.INITO" Destination="NoSemicolon.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="844" Action="CREATE"><Connection Source="NoSemicolon.CLI01.INITO" Destination="NoSemicolon.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="845" Action="CREATE"><Connection Source="NoSemicolon.CLI0.INITO" Destination="NoSemicolon.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="846" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_4.CNF" Destination="NoSemicolon.Client0NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="847" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_3.CNF" Destination="NoSemicolon.Client1_0NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="848" Action="CREATE"><Connection Source="NoSemicolon.CLI10.INITO" Destination="NoSemicolon.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="849" Action="CREATE"><Connection Source="NoSemicolon.SER1.INITO" Destination="NoSemicolon.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="850" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2_1.CNF" Destination="NoSemicolon.Server0_1NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="851" Action="CREATE"><Connection Source="NoSemicolon.SER01.INITO" Destination="NoSemicolon.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="852" Action="CREATE"><Connection Source="NoSemicolon.Server0NoSemicolon.CNF" Destination="NoSemicolon.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="853" Action="CREATE"><Connection Source="NoSemicolon.Client0NoSemicolon.CNF" Destination="NoSemicolon.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="854" Action="CREATE"><Connection Source="NoSemicolon.Client1NoSemicolon.CNF" Destination="NoSemicolon.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="855" Action="CREATE"><Connection Source="NoSemicolon.Client0_1NoSemicolon.CNF" Destination="NoSemicolon.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="856" Action="CREATE"><Connection Source="NoSemicolon.Client1_0NoSemicolon.CNF" Destination="NoSemicolon.SER1.INIT" /></Request>
+WrongParameters;<Request ID="857" Action="CREATE"><Connection Source="NoSemicolon.Server1NoSemicolon.CNF" Destination="NoSemicolon.SER01.INIT" /></Request>
+WrongParameters;<Request ID="858" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2_1_1.CNF" Destination="NoSemicolon.Server1_0NoSemicolon.REQ" /></Request>
+WrongParameters;<Request ID="859" Action="CREATE"><Connection Source="NoSemicolon.Server1_0NoSemicolon.CNF" Destination="W2W_1.REQ" /></Request>
+WrongParameters;<Request ID="860" Action="CREATE"><Connection Source="NoSemicolon.Server0_1NoSemicolon.CNF" Destination="NoSemicolon.SER10.INIT" /></Request>
+WrongParameters;<Request ID="861" Action="CREATE"><Connection Source="NoSemicolon.SER10.INITO" Destination="NoSemicolon.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="862" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1.OUT" Destination="NoSemicolon.Client1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="863" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1.OUT" Destination="NoSemicolon.Pub1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="864" Action="CREATE"><Connection Source="NoSemicolon.SER0.QO" Destination="NoSemicolon.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="865" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1.OUT" Destination="NoSemicolon.Server0NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="866" Action="CREATE"><Connection Source="NoSemicolon.STRING2STRING_1.OUT" Destination="NoSemicolon.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="867" Action="CREATE"><Connection Source="NoSemicolon.PUB1.QO" Destination="NoSemicolon.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="868" Action="CREATE"><Connection Source="NoSemicolon.SUB1.QO" Destination="NoSemicolon.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="869" Action="CREATE"><Connection Source="NoSemicolon.F_NOT.OUT" Destination="NoSemicolon.Sub1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="870" Action="CREATE"><Connection Source="NoSemicolon.SUB1.RD_1" Destination="NoSemicolon.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="871" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_1.OUT" Destination="NoSemicolon.Client0_1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="872" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2.OUT" Destination="NoSemicolon.Server1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="873" Action="CREATE"><Connection Source="NoSemicolon.CLI1.QO" Destination="NoSemicolon.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="874" Action="CREATE"><Connection Source="NoSemicolon.CLI01.QO" Destination="NoSemicolon.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="875" Action="CREATE"><Connection Source="NoSemicolon.STRING2STRING_1_1.OUT" Destination="NoSemicolon.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="876" Action="CREATE"><Connection Source="NoSemicolon.CLI1.RD_1" Destination="NoSemicolon.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="877" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_4.OUT" Destination="NoSemicolon.Client0NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="878" Action="CREATE"><Connection Source="NoSemicolon.CLI0.QO" Destination="NoSemicolon.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="879" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_3.OUT" Destination="NoSemicolon.Client1_0NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="880" Action="CREATE"><Connection Source="NoSemicolon.CLI10.QO" Destination="NoSemicolon.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="881" Action="CREATE"><Connection Source="NoSemicolon.SER1.QO" Destination="NoSemicolon.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="882" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2_1.OUT" Destination="NoSemicolon.Server0_1NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="883" Action="CREATE"><Connection Source="NoSemicolon.CLI01.RD_1" Destination="NoSemicolon.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="884" Action="CREATE"><Connection Source="NoSemicolon.STRING2STRING_2.OUT" Destination="NoSemicolon.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="885" Action="CREATE"><Connection Source="NoSemicolon.STRING2STRING_2_1.OUT" Destination="NoSemicolon.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="886" Action="CREATE"><Connection Source="NoSemicolon.SER1.RD_1" Destination="NoSemicolon.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="887" Action="CREATE"><Connection Source="NoSemicolon.SER01.QO" Destination="NoSemicolon.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="888" Action="CREATE"><Connection Source="NoSemicolon.SER01.RD_1" Destination="NoSemicolon.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="889" Action="CREATE"><Connection Source="NoSemicolon.F_NOT_1_1_1_2_1_1.OUT" Destination="NoSemicolon.Server1_0NoSemicolon.check" /></Request>
+WrongParameters;<Request ID="890" Action="CREATE"><Connection Source="NoSemicolon.SER10.QO" Destination="NoSemicolon.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="891" Action="CREATE"><Connection Source="NoSemicolon.STRING2STRING_3.OUT" Destination="NoSemicolon.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="892" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1.CNF" Destination="emptyAction.Client1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="893" Action="CREATE"><Connection Source="emptyAction.F_NOT_1.CNF" Destination="emptyAction.Pub1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="894" Action="CREATE"><Connection Source="emptyAction.Pub1EmptyAction.CNF" Destination="emptyAction.SER0.INIT" /></Request>
+WrongParameters;<Request ID="895" Action="CREATE"><Connection Source="emptyAction.SER0.INITO" Destination="emptyAction.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="896" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1.CNF" Destination="emptyAction.Server0EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="897" Action="CREATE"><Connection Source="emptyAction.Sub1EmptyAction.CNF" Destination="emptyAction.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="898" Action="CREATE"><Connection Source="emptyAction.PUB1.INITO" Destination="emptyAction.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="899" Action="CREATE"><Connection Source="emptyAction.SUB1.INITO" Destination="emptyAction.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="900" Action="CREATE"><Connection Source="emptyAction.F_NOT.CNF" Destination="emptyAction.Sub1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="901" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_1.CNF" Destination="emptyAction.Client0_1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="902" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2.CNF" Destination="emptyAction.Server1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="903" Action="CREATE"><Connection Source="emptyAction.CLI1.INITO" Destination="emptyAction.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="904" Action="CREATE"><Connection Source="emptyAction.CLI01.INITO" Destination="emptyAction.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="905" Action="CREATE"><Connection Source="emptyAction.CLI0.INITO" Destination="emptyAction.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="906" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_4.CNF" Destination="emptyAction.Client0EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="907" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_3.CNF" Destination="emptyAction.Client1_0EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="908" Action="CREATE"><Connection Source="emptyAction.CLI10.INITO" Destination="emptyAction.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="909" Action="CREATE"><Connection Source="emptyAction.SER1.INITO" Destination="emptyAction.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="910" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2_1.CNF" Destination="emptyAction.Server0_1EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="911" Action="CREATE"><Connection Source="emptyAction.SER01.INITO" Destination="emptyAction.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="912" Action="CREATE"><Connection Source="emptyAction.Server0EmptyAction.CNF" Destination="emptyAction.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="913" Action="CREATE"><Connection Source="emptyAction.Client0EmptyAction.CNF" Destination="emptyAction.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="914" Action="CREATE"><Connection Source="emptyAction.Client1EmptyAction.CNF" Destination="emptyAction.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="915" Action="CREATE"><Connection Source="emptyAction.Client0_1EmptyAction.CNF" Destination="emptyAction.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="916" Action="CREATE"><Connection Source="emptyAction.Client1_0EmptyAction.CNF" Destination="emptyAction.SER1.INIT" /></Request>
+WrongParameters;<Request ID="917" Action="CREATE"><Connection Source="emptyAction.Server1EmptyAction.CNF" Destination="emptyAction.SER01.INIT" /></Request>
+WrongParameters;<Request ID="918" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2_1_1.CNF" Destination="emptyAction.Server1_0EmptyAction.REQ" /></Request>
+WrongParameters;<Request ID="919" Action="CREATE"><Connection Source="emptyAction.Server1_0EmptyAction.CNF" Destination="W2W_1_1.REQ" /></Request>
+WrongParameters;<Request ID="920" Action="CREATE"><Connection Source="emptyAction.Server0_1EmptyAction.CNF" Destination="emptyAction.SER10.INIT" /></Request>
+WrongParameters;<Request ID="921" Action="CREATE"><Connection Source="emptyAction.SER10.INITO" Destination="emptyAction.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="922" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1.OUT" Destination="emptyAction.Client1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="923" Action="CREATE"><Connection Source="emptyAction.F_NOT_1.OUT" Destination="emptyAction.Pub1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="924" Action="CREATE"><Connection Source="emptyAction.SER0.QO" Destination="emptyAction.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="925" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1.OUT" Destination="emptyAction.Server0EmptyAction.check" /></Request>
+WrongParameters;<Request ID="926" Action="CREATE"><Connection Source="emptyAction.STRING2STRING_1.OUT" Destination="emptyAction.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="927" Action="CREATE"><Connection Source="emptyAction.PUB1.QO" Destination="emptyAction.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="928" Action="CREATE"><Connection Source="emptyAction.SUB1.QO" Destination="emptyAction.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="929" Action="CREATE"><Connection Source="emptyAction.F_NOT.OUT" Destination="emptyAction.Sub1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="930" Action="CREATE"><Connection Source="emptyAction.SUB1.RD_1" Destination="emptyAction.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="931" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_1.OUT" Destination="emptyAction.Client0_1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="932" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2.OUT" Destination="emptyAction.Server1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="933" Action="CREATE"><Connection Source="emptyAction.CLI1.QO" Destination="emptyAction.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="934" Action="CREATE"><Connection Source="emptyAction.CLI01.QO" Destination="emptyAction.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="935" Action="CREATE"><Connection Source="emptyAction.STRING2STRING_1_1.OUT" Destination="emptyAction.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="936" Action="CREATE"><Connection Source="emptyAction.CLI1.RD_1" Destination="emptyAction.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="937" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_4.OUT" Destination="emptyAction.Client0EmptyAction.check" /></Request>
+WrongParameters;<Request ID="938" Action="CREATE"><Connection Source="emptyAction.CLI0.QO" Destination="emptyAction.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="939" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_3.OUT" Destination="emptyAction.Client1_0EmptyAction.check" /></Request>
+WrongParameters;<Request ID="940" Action="CREATE"><Connection Source="emptyAction.CLI10.QO" Destination="emptyAction.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="941" Action="CREATE"><Connection Source="emptyAction.SER1.QO" Destination="emptyAction.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="942" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2_1.OUT" Destination="emptyAction.Server0_1EmptyAction.check" /></Request>
+WrongParameters;<Request ID="943" Action="CREATE"><Connection Source="emptyAction.CLI01.RD_1" Destination="emptyAction.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="944" Action="CREATE"><Connection Source="emptyAction.STRING2STRING_2.OUT" Destination="emptyAction.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="945" Action="CREATE"><Connection Source="emptyAction.STRING2STRING_2_1.OUT" Destination="emptyAction.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="946" Action="CREATE"><Connection Source="emptyAction.SER1.RD_1" Destination="emptyAction.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="947" Action="CREATE"><Connection Source="emptyAction.SER01.QO" Destination="emptyAction.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="948" Action="CREATE"><Connection Source="emptyAction.SER01.RD_1" Destination="emptyAction.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="949" Action="CREATE"><Connection Source="emptyAction.F_NOT_1_1_1_2_1_1.OUT" Destination="emptyAction.Server1_0EmptyAction.check" /></Request>
+WrongParameters;<Request ID="950" Action="CREATE"><Connection Source="emptyAction.SER10.QO" Destination="emptyAction.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="951" Action="CREATE"><Connection Source="emptyAction.STRING2STRING_3.OUT" Destination="emptyAction.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="952" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1.CNF" Destination="NoExistingAction.Client1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="953" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1.CNF" Destination="NoExistingAction.Pub1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="954" Action="CREATE"><Connection Source="NoExistingAction.Pub1NoExistingAction.CNF" Destination="NoExistingAction.SER0.INIT" /></Request>
+WrongParameters;<Request ID="955" Action="CREATE"><Connection Source="NoExistingAction.SER0.INITO" Destination="NoExistingAction.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="956" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1.CNF" Destination="NoExistingAction.Server0NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="957" Action="CREATE"><Connection Source="NoExistingAction.Sub1NoExistingAction.CNF" Destination="NoExistingAction.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="958" Action="CREATE"><Connection Source="NoExistingAction.PUB1.INITO" Destination="NoExistingAction.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="959" Action="CREATE"><Connection Source="NoExistingAction.SUB1.INITO" Destination="NoExistingAction.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="960" Action="CREATE"><Connection Source="NoExistingAction.F_NOT.CNF" Destination="NoExistingAction.Sub1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="961" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_1.CNF" Destination="NoExistingAction.Client0_1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="962" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2.CNF" Destination="NoExistingAction.Server1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="963" Action="CREATE"><Connection Source="NoExistingAction.CLI1.INITO" Destination="NoExistingAction.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="964" Action="CREATE"><Connection Source="NoExistingAction.CLI01.INITO" Destination="NoExistingAction.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="965" Action="CREATE"><Connection Source="NoExistingAction.CLI0.INITO" Destination="NoExistingAction.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="966" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_4.CNF" Destination="NoExistingAction.Client0NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="967" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_3.CNF" Destination="NoExistingAction.Client1_0NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="968" Action="CREATE"><Connection Source="NoExistingAction.CLI10.INITO" Destination="NoExistingAction.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="969" Action="CREATE"><Connection Source="NoExistingAction.SER1.INITO" Destination="NoExistingAction.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="970" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2_1.CNF" Destination="NoExistingAction.Server0_1NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="971" Action="CREATE"><Connection Source="NoExistingAction.SER01.INITO" Destination="NoExistingAction.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="972" Action="CREATE"><Connection Source="NoExistingAction.Server0NoExistingAction.CNF" Destination="NoExistingAction.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="973" Action="CREATE"><Connection Source="NoExistingAction.Client0NoExistingAction.CNF" Destination="NoExistingAction.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="974" Action="CREATE"><Connection Source="NoExistingAction.Client1NoExistingAction.CNF" Destination="NoExistingAction.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="975" Action="CREATE"><Connection Source="NoExistingAction.Client0_1NoExistingAction.CNF" Destination="NoExistingAction.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="976" Action="CREATE"><Connection Source="NoExistingAction.Client1_0NoExistingAction.CNF" Destination="NoExistingAction.SER1.INIT" /></Request>
+WrongParameters;<Request ID="977" Action="CREATE"><Connection Source="NoExistingAction.Server1NoExistingAction.CNF" Destination="NoExistingAction.SER01.INIT" /></Request>
+WrongParameters;<Request ID="978" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2_1_1.CNF" Destination="NoExistingAction.Server1_0NoExistingAction.REQ" /></Request>
+WrongParameters;<Request ID="979" Action="CREATE"><Connection Source="NoExistingAction.Server1_0NoExistingAction.CNF" Destination="W2W_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="980" Action="CREATE"><Connection Source="NoExistingAction.Server0_1NoExistingAction.CNF" Destination="NoExistingAction.SER10.INIT" /></Request>
+WrongParameters;<Request ID="981" Action="CREATE"><Connection Source="NoExistingAction.SER10.INITO" Destination="NoExistingAction.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="982" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1.OUT" Destination="NoExistingAction.Client1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="983" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1.OUT" Destination="NoExistingAction.Pub1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="984" Action="CREATE"><Connection Source="NoExistingAction.SER0.QO" Destination="NoExistingAction.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="985" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1.OUT" Destination="NoExistingAction.Server0NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="986" Action="CREATE"><Connection Source="NoExistingAction.STRING2STRING_1.OUT" Destination="NoExistingAction.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="987" Action="CREATE"><Connection Source="NoExistingAction.PUB1.QO" Destination="NoExistingAction.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="988" Action="CREATE"><Connection Source="NoExistingAction.SUB1.QO" Destination="NoExistingAction.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="989" Action="CREATE"><Connection Source="NoExistingAction.F_NOT.OUT" Destination="NoExistingAction.Sub1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="990" Action="CREATE"><Connection Source="NoExistingAction.SUB1.RD_1" Destination="NoExistingAction.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="991" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_1.OUT" Destination="NoExistingAction.Client0_1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="992" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2.OUT" Destination="NoExistingAction.Server1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="993" Action="CREATE"><Connection Source="NoExistingAction.CLI1.QO" Destination="NoExistingAction.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="994" Action="CREATE"><Connection Source="NoExistingAction.CLI01.QO" Destination="NoExistingAction.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="995" Action="CREATE"><Connection Source="NoExistingAction.STRING2STRING_1_1.OUT" Destination="NoExistingAction.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="996" Action="CREATE"><Connection Source="NoExistingAction.CLI1.RD_1" Destination="NoExistingAction.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="997" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_4.OUT" Destination="NoExistingAction.Client0NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="998" Action="CREATE"><Connection Source="NoExistingAction.CLI0.QO" Destination="NoExistingAction.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="999" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_3.OUT" Destination="NoExistingAction.Client1_0NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="1,000" Action="CREATE"><Connection Source="NoExistingAction.CLI10.QO" Destination="NoExistingAction.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,001" Action="CREATE"><Connection Source="NoExistingAction.SER1.QO" Destination="NoExistingAction.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,002" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2_1.OUT" Destination="NoExistingAction.Server0_1NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="1,003" Action="CREATE"><Connection Source="NoExistingAction.CLI01.RD_1" Destination="NoExistingAction.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,004" Action="CREATE"><Connection Source="NoExistingAction.STRING2STRING_2.OUT" Destination="NoExistingAction.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,005" Action="CREATE"><Connection Source="NoExistingAction.STRING2STRING_2_1.OUT" Destination="NoExistingAction.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,006" Action="CREATE"><Connection Source="NoExistingAction.SER1.RD_1" Destination="NoExistingAction.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,007" Action="CREATE"><Connection Source="NoExistingAction.SER01.QO" Destination="NoExistingAction.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,008" Action="CREATE"><Connection Source="NoExistingAction.SER01.RD_1" Destination="NoExistingAction.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,009" Action="CREATE"><Connection Source="NoExistingAction.F_NOT_1_1_1_2_1_1.OUT" Destination="NoExistingAction.Server1_0NoExistingAction.check" /></Request>
+WrongParameters;<Request ID="1,010" Action="CREATE"><Connection Source="NoExistingAction.SER10.QO" Destination="NoExistingAction.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,011" Action="CREATE"><Connection Source="NoExistingAction.STRING2STRING_3.OUT" Destination="NoExistingAction.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,012" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1.CNF" Destination="UnknownIdentifier.Client1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,013" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1.CNF" Destination="UnknownIdentifier.Pub1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,014" Action="CREATE"><Connection Source="UnknownIdentifier.Pub1UnknownIdentifier.CNF" Destination="UnknownIdentifier.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,015" Action="CREATE"><Connection Source="UnknownIdentifier.SER0.INITO" Destination="UnknownIdentifier.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,016" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1.CNF" Destination="UnknownIdentifier.Server0UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,017" Action="CREATE"><Connection Source="UnknownIdentifier.Sub1UnknownIdentifier.CNF" Destination="UnknownIdentifier.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,018" Action="CREATE"><Connection Source="UnknownIdentifier.PUB1.INITO" Destination="UnknownIdentifier.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,019" Action="CREATE"><Connection Source="UnknownIdentifier.SUB1.INITO" Destination="UnknownIdentifier.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,020" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT.CNF" Destination="UnknownIdentifier.Sub1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,021" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_1.CNF" Destination="UnknownIdentifier.Client0_1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,022" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2.CNF" Destination="UnknownIdentifier.Server1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,023" Action="CREATE"><Connection Source="UnknownIdentifier.CLI1.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,024" Action="CREATE"><Connection Source="UnknownIdentifier.CLI01.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,025" Action="CREATE"><Connection Source="UnknownIdentifier.CLI0.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,026" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_4.CNF" Destination="UnknownIdentifier.Client0UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,027" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_3.CNF" Destination="UnknownIdentifier.Client1_0UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,028" Action="CREATE"><Connection Source="UnknownIdentifier.CLI10.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,029" Action="CREATE"><Connection Source="UnknownIdentifier.SER1.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,030" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2_1.CNF" Destination="UnknownIdentifier.Server0_1UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,031" Action="CREATE"><Connection Source="UnknownIdentifier.SER01.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,032" Action="CREATE"><Connection Source="UnknownIdentifier.Server0UnknownIdentifier.CNF" Destination="UnknownIdentifier.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,033" Action="CREATE"><Connection Source="UnknownIdentifier.Client0UnknownIdentifier.CNF" Destination="UnknownIdentifier.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,034" Action="CREATE"><Connection Source="UnknownIdentifier.Client1UnknownIdentifier.CNF" Destination="UnknownIdentifier.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,035" Action="CREATE"><Connection Source="UnknownIdentifier.Client0_1UnknownIdentifier.CNF" Destination="UnknownIdentifier.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,036" Action="CREATE"><Connection Source="UnknownIdentifier.Client1_0UnknownIdentifier.CNF" Destination="UnknownIdentifier.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,037" Action="CREATE"><Connection Source="UnknownIdentifier.Server1UnknownIdentifier.CNF" Destination="UnknownIdentifier.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,038" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2_1_1.CNF" Destination="UnknownIdentifier.Server1_0UnknownIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,039" Action="CREATE"><Connection Source="UnknownIdentifier.Server1_0UnknownIdentifier.CNF" Destination="W2W_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,040" Action="CREATE"><Connection Source="UnknownIdentifier.Server0_1UnknownIdentifier.CNF" Destination="UnknownIdentifier.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,041" Action="CREATE"><Connection Source="UnknownIdentifier.SER10.INITO" Destination="UnknownIdentifier.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,042" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1.OUT" Destination="UnknownIdentifier.Client1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,043" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1.OUT" Destination="UnknownIdentifier.Pub1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,044" Action="CREATE"><Connection Source="UnknownIdentifier.SER0.QO" Destination="UnknownIdentifier.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,045" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1.OUT" Destination="UnknownIdentifier.Server0UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,046" Action="CREATE"><Connection Source="UnknownIdentifier.STRING2STRING_1.OUT" Destination="UnknownIdentifier.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,047" Action="CREATE"><Connection Source="UnknownIdentifier.PUB1.QO" Destination="UnknownIdentifier.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,048" Action="CREATE"><Connection Source="UnknownIdentifier.SUB1.QO" Destination="UnknownIdentifier.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,049" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT.OUT" Destination="UnknownIdentifier.Sub1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,050" Action="CREATE"><Connection Source="UnknownIdentifier.SUB1.RD_1" Destination="UnknownIdentifier.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,051" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_1.OUT" Destination="UnknownIdentifier.Client0_1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,052" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2.OUT" Destination="UnknownIdentifier.Server1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,053" Action="CREATE"><Connection Source="UnknownIdentifier.CLI1.QO" Destination="UnknownIdentifier.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,054" Action="CREATE"><Connection Source="UnknownIdentifier.CLI01.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,055" Action="CREATE"><Connection Source="UnknownIdentifier.STRING2STRING_1_1.OUT" Destination="UnknownIdentifier.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,056" Action="CREATE"><Connection Source="UnknownIdentifier.CLI1.RD_1" Destination="UnknownIdentifier.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,057" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_4.OUT" Destination="UnknownIdentifier.Client0UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,058" Action="CREATE"><Connection Source="UnknownIdentifier.CLI0.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,059" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_3.OUT" Destination="UnknownIdentifier.Client1_0UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,060" Action="CREATE"><Connection Source="UnknownIdentifier.CLI10.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,061" Action="CREATE"><Connection Source="UnknownIdentifier.SER1.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,062" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2_1.OUT" Destination="UnknownIdentifier.Server0_1UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,063" Action="CREATE"><Connection Source="UnknownIdentifier.CLI01.RD_1" Destination="UnknownIdentifier.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,064" Action="CREATE"><Connection Source="UnknownIdentifier.STRING2STRING_2.OUT" Destination="UnknownIdentifier.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,065" Action="CREATE"><Connection Source="UnknownIdentifier.STRING2STRING_2_1.OUT" Destination="UnknownIdentifier.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,066" Action="CREATE"><Connection Source="UnknownIdentifier.SER1.RD_1" Destination="UnknownIdentifier.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,067" Action="CREATE"><Connection Source="UnknownIdentifier.SER01.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,068" Action="CREATE"><Connection Source="UnknownIdentifier.SER01.RD_1" Destination="UnknownIdentifier.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,069" Action="CREATE"><Connection Source="UnknownIdentifier.F_NOT_1_1_1_2_1_1.OUT" Destination="UnknownIdentifier.Server1_0UnknownIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,070" Action="CREATE"><Connection Source="UnknownIdentifier.SER10.QO" Destination="UnknownIdentifier.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,071" Action="CREATE"><Connection Source="UnknownIdentifier.STRING2STRING_3.OUT" Destination="UnknownIdentifier.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,072" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1.CNF" Destination="WrongIdentifier.Client1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,073" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1.CNF" Destination="WrongIdentifier.Pub1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,074" Action="CREATE"><Connection Source="WrongIdentifier.Pub1WrongIdentifier.CNF" Destination="WrongIdentifier.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,075" Action="CREATE"><Connection Source="WrongIdentifier.SER0.INITO" Destination="WrongIdentifier.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,076" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1.CNF" Destination="WrongIdentifier.Server0WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,077" Action="CREATE"><Connection Source="WrongIdentifier.Sub1WrongIdentifier.CNF" Destination="WrongIdentifier.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,078" Action="CREATE"><Connection Source="WrongIdentifier.PUB1.INITO" Destination="WrongIdentifier.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,079" Action="CREATE"><Connection Source="WrongIdentifier.SUB1.INITO" Destination="WrongIdentifier.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,080" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT.CNF" Destination="WrongIdentifier.Sub1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,081" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_1.CNF" Destination="WrongIdentifier.Client0_1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,082" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2.CNF" Destination="WrongIdentifier.Server1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,083" Action="CREATE"><Connection Source="WrongIdentifier.CLI1.INITO" Destination="WrongIdentifier.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,084" Action="CREATE"><Connection Source="WrongIdentifier.CLI01.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,085" Action="CREATE"><Connection Source="WrongIdentifier.CLI0.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,086" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_4.CNF" Destination="WrongIdentifier.Client0WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,087" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_3.CNF" Destination="WrongIdentifier.Client1_0WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,088" Action="CREATE"><Connection Source="WrongIdentifier.CLI10.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,089" Action="CREATE"><Connection Source="WrongIdentifier.SER1.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,090" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2_1.CNF" Destination="WrongIdentifier.Server0_1WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,091" Action="CREATE"><Connection Source="WrongIdentifier.SER01.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,092" Action="CREATE"><Connection Source="WrongIdentifier.Server0WrongIdentifier.CNF" Destination="WrongIdentifier.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,093" Action="CREATE"><Connection Source="WrongIdentifier.Client0WrongIdentifier.CNF" Destination="WrongIdentifier.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,094" Action="CREATE"><Connection Source="WrongIdentifier.Client1WrongIdentifier.CNF" Destination="WrongIdentifier.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,095" Action="CREATE"><Connection Source="WrongIdentifier.Client0_1WrongIdentifier.CNF" Destination="WrongIdentifier.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,096" Action="CREATE"><Connection Source="WrongIdentifier.Client1_0WrongIdentifier.CNF" Destination="WrongIdentifier.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,097" Action="CREATE"><Connection Source="WrongIdentifier.Server1WrongIdentifier.CNF" Destination="WrongIdentifier.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,098" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2_1_1.CNF" Destination="WrongIdentifier.Server1_0WrongIdentifier.REQ" /></Request>
+WrongParameters;<Request ID="1,099" Action="CREATE"><Connection Source="WrongIdentifier.Server1_0WrongIdentifier.CNF" Destination="W2W_1_1_4_2.REQ" /></Request>
+WrongParameters;<Request ID="1,100" Action="CREATE"><Connection Source="WrongIdentifier.Server0_1WrongIdentifier.CNF" Destination="WrongIdentifier.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,101" Action="CREATE"><Connection Source="WrongIdentifier.SER10.INITO" Destination="WrongIdentifier.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,102" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1.OUT" Destination="WrongIdentifier.Client1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,103" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1.OUT" Destination="WrongIdentifier.Pub1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,104" Action="CREATE"><Connection Source="WrongIdentifier.SER0.QO" Destination="WrongIdentifier.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,105" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1.OUT" Destination="WrongIdentifier.Server0WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,106" Action="CREATE"><Connection Source="WrongIdentifier.STRING2STRING_1.OUT" Destination="WrongIdentifier.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,107" Action="CREATE"><Connection Source="WrongIdentifier.PUB1.QO" Destination="WrongIdentifier.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,108" Action="CREATE"><Connection Source="WrongIdentifier.SUB1.QO" Destination="WrongIdentifier.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,109" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT.OUT" Destination="WrongIdentifier.Sub1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,110" Action="CREATE"><Connection Source="WrongIdentifier.SUB1.RD_1" Destination="WrongIdentifier.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,111" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_1.OUT" Destination="WrongIdentifier.Client0_1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,112" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2.OUT" Destination="WrongIdentifier.Server1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,113" Action="CREATE"><Connection Source="WrongIdentifier.CLI1.QO" Destination="WrongIdentifier.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,114" Action="CREATE"><Connection Source="WrongIdentifier.CLI01.QO" Destination="WrongIdentifier.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,115" Action="CREATE"><Connection Source="WrongIdentifier.STRING2STRING_1_1.OUT" Destination="WrongIdentifier.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,116" Action="CREATE"><Connection Source="WrongIdentifier.CLI1.RD_1" Destination="WrongIdentifier.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,117" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_4.OUT" Destination="WrongIdentifier.Client0WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,118" Action="CREATE"><Connection Source="WrongIdentifier.CLI0.QO" Destination="WrongIdentifier.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,119" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_3.OUT" Destination="WrongIdentifier.Client1_0WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,120" Action="CREATE"><Connection Source="WrongIdentifier.CLI10.QO" Destination="WrongIdentifier.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,121" Action="CREATE"><Connection Source="WrongIdentifier.SER1.QO" Destination="WrongIdentifier.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,122" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2_1.OUT" Destination="WrongIdentifier.Server0_1WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,123" Action="CREATE"><Connection Source="WrongIdentifier.CLI01.RD_1" Destination="WrongIdentifier.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,124" Action="CREATE"><Connection Source="WrongIdentifier.STRING2STRING_2.OUT" Destination="WrongIdentifier.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,125" Action="CREATE"><Connection Source="WrongIdentifier.STRING2STRING_2_1.OUT" Destination="WrongIdentifier.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,126" Action="CREATE"><Connection Source="WrongIdentifier.SER1.RD_1" Destination="WrongIdentifier.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,127" Action="CREATE"><Connection Source="WrongIdentifier.SER01.QO" Destination="WrongIdentifier.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,128" Action="CREATE"><Connection Source="WrongIdentifier.SER01.RD_1" Destination="WrongIdentifier.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,129" Action="CREATE"><Connection Source="WrongIdentifier.F_NOT_1_1_1_2_1_1.OUT" Destination="WrongIdentifier.Server1_0WrongIdentifier.check" /></Request>
+WrongParameters;<Request ID="1,130" Action="CREATE"><Connection Source="WrongIdentifier.SER10.QO" Destination="WrongIdentifier.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,131" Action="CREATE"><Connection Source="WrongIdentifier.STRING2STRING_3.OUT" Destination="WrongIdentifier.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,132" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1.CNF" Destination="wrongNodeId.Client1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,133" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1.CNF" Destination="wrongNodeId.Pub1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,134" Action="CREATE"><Connection Source="wrongNodeId.Pub1wrongNodeId.CNF" Destination="wrongNodeId.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,135" Action="CREATE"><Connection Source="wrongNodeId.SER0.INITO" Destination="wrongNodeId.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,136" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1.CNF" Destination="wrongNodeId.Server0wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,137" Action="CREATE"><Connection Source="wrongNodeId.Sub1wrongNodeId.CNF" Destination="wrongNodeId.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,138" Action="CREATE"><Connection Source="wrongNodeId.PUB1.INITO" Destination="wrongNodeId.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,139" Action="CREATE"><Connection Source="wrongNodeId.SUB1.INITO" Destination="wrongNodeId.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,140" Action="CREATE"><Connection Source="wrongNodeId.F_NOT.CNF" Destination="wrongNodeId.Sub1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,141" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_1.CNF" Destination="wrongNodeId.Client0_1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,142" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2.CNF" Destination="wrongNodeId.Server1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,143" Action="CREATE"><Connection Source="wrongNodeId.CLI1.INITO" Destination="wrongNodeId.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,144" Action="CREATE"><Connection Source="wrongNodeId.CLI01.INITO" Destination="wrongNodeId.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,145" Action="CREATE"><Connection Source="wrongNodeId.CLI0.INITO" Destination="wrongNodeId.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,146" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_4.CNF" Destination="wrongNodeId.Client0wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,147" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_3.CNF" Destination="wrongNodeId.Client1_0wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,148" Action="CREATE"><Connection Source="wrongNodeId.CLI10.INITO" Destination="wrongNodeId.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,149" Action="CREATE"><Connection Source="wrongNodeId.SER1.INITO" Destination="wrongNodeId.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,150" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2_1.CNF" Destination="wrongNodeId.Server0_1wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,151" Action="CREATE"><Connection Source="wrongNodeId.SER01.INITO" Destination="wrongNodeId.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,152" Action="CREATE"><Connection Source="wrongNodeId.Server0wrongNodeId.CNF" Destination="wrongNodeId.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,153" Action="CREATE"><Connection Source="wrongNodeId.Client0wrongNodeId.CNF" Destination="wrongNodeId.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,154" Action="CREATE"><Connection Source="wrongNodeId.Client1wrongNodeId.CNF" Destination="wrongNodeId.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,155" Action="CREATE"><Connection Source="wrongNodeId.Client0_1wrongNodeId.CNF" Destination="wrongNodeId.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,156" Action="CREATE"><Connection Source="wrongNodeId.Client1_0wrongNodeId.CNF" Destination="wrongNodeId.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,157" Action="CREATE"><Connection Source="wrongNodeId.Server1wrongNodeId.CNF" Destination="wrongNodeId.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,158" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2_1_1.CNF" Destination="wrongNodeId.Server1_0wrongNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,159" Action="CREATE"><Connection Source="wrongNodeId.Server1_0wrongNodeId.CNF" Destination="W2W_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,160" Action="CREATE"><Connection Source="wrongNodeId.Server0_1wrongNodeId.CNF" Destination="wrongNodeId.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,161" Action="CREATE"><Connection Source="wrongNodeId.SER10.INITO" Destination="wrongNodeId.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,162" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1.OUT" Destination="wrongNodeId.Client1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,163" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1.OUT" Destination="wrongNodeId.Pub1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,164" Action="CREATE"><Connection Source="wrongNodeId.SER0.QO" Destination="wrongNodeId.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,165" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1.OUT" Destination="wrongNodeId.Server0wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,166" Action="CREATE"><Connection Source="wrongNodeId.STRING2STRING_1.OUT" Destination="wrongNodeId.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,167" Action="CREATE"><Connection Source="wrongNodeId.PUB1.QO" Destination="wrongNodeId.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,168" Action="CREATE"><Connection Source="wrongNodeId.SUB1.QO" Destination="wrongNodeId.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,169" Action="CREATE"><Connection Source="wrongNodeId.F_NOT.OUT" Destination="wrongNodeId.Sub1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,170" Action="CREATE"><Connection Source="wrongNodeId.SUB1.RD_1" Destination="wrongNodeId.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,171" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_1.OUT" Destination="wrongNodeId.Client0_1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,172" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2.OUT" Destination="wrongNodeId.Server1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,173" Action="CREATE"><Connection Source="wrongNodeId.CLI1.QO" Destination="wrongNodeId.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,174" Action="CREATE"><Connection Source="wrongNodeId.CLI01.QO" Destination="wrongNodeId.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,175" Action="CREATE"><Connection Source="wrongNodeId.STRING2STRING_1_1.OUT" Destination="wrongNodeId.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,176" Action="CREATE"><Connection Source="wrongNodeId.CLI1.RD_1" Destination="wrongNodeId.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,177" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_4.OUT" Destination="wrongNodeId.Client0wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,178" Action="CREATE"><Connection Source="wrongNodeId.CLI0.QO" Destination="wrongNodeId.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,179" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_3.OUT" Destination="wrongNodeId.Client1_0wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,180" Action="CREATE"><Connection Source="wrongNodeId.CLI10.QO" Destination="wrongNodeId.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,181" Action="CREATE"><Connection Source="wrongNodeId.SER1.QO" Destination="wrongNodeId.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,182" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2_1.OUT" Destination="wrongNodeId.Server0_1wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,183" Action="CREATE"><Connection Source="wrongNodeId.CLI01.RD_1" Destination="wrongNodeId.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,184" Action="CREATE"><Connection Source="wrongNodeId.STRING2STRING_2.OUT" Destination="wrongNodeId.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,185" Action="CREATE"><Connection Source="wrongNodeId.STRING2STRING_2_1.OUT" Destination="wrongNodeId.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,186" Action="CREATE"><Connection Source="wrongNodeId.SER1.RD_1" Destination="wrongNodeId.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,187" Action="CREATE"><Connection Source="wrongNodeId.SER01.QO" Destination="wrongNodeId.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,188" Action="CREATE"><Connection Source="wrongNodeId.SER01.RD_1" Destination="wrongNodeId.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,189" Action="CREATE"><Connection Source="wrongNodeId.F_NOT_1_1_1_2_1_1.OUT" Destination="wrongNodeId.Server1_0wrongNodeId.check" /></Request>
+WrongParameters;<Request ID="1,190" Action="CREATE"><Connection Source="wrongNodeId.SER10.QO" Destination="wrongNodeId.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,191" Action="CREATE"><Connection Source="wrongNodeId.STRING2STRING_3.OUT" Destination="wrongNodeId.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,192" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1.CNF" Destination="wrongPair.Client1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,193" Action="CREATE"><Connection Source="wrongPair.F_NOT_1.CNF" Destination="wrongPair.Pub1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,194" Action="CREATE"><Connection Source="wrongPair.Pub1wrongPair.CNF" Destination="wrongPair.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,195" Action="CREATE"><Connection Source="wrongPair.SER0.INITO" Destination="wrongPair.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,196" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1.CNF" Destination="wrongPair.Server0wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,197" Action="CREATE"><Connection Source="wrongPair.Sub1wrongPair.CNF" Destination="wrongPair.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,198" Action="CREATE"><Connection Source="wrongPair.PUB1.INITO" Destination="wrongPair.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,199" Action="CREATE"><Connection Source="wrongPair.SUB1.INITO" Destination="wrongPair.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,200" Action="CREATE"><Connection Source="wrongPair.F_NOT.CNF" Destination="wrongPair.Sub1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,201" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_1.CNF" Destination="wrongPair.Client0_1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,202" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2.CNF" Destination="wrongPair.Server1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,203" Action="CREATE"><Connection Source="wrongPair.CLI1.INITO" Destination="wrongPair.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,204" Action="CREATE"><Connection Source="wrongPair.CLI01.INITO" Destination="wrongPair.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,205" Action="CREATE"><Connection Source="wrongPair.CLI0.INITO" Destination="wrongPair.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,206" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_4.CNF" Destination="wrongPair.Client0wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,207" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_3.CNF" Destination="wrongPair.Client1_0wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,208" Action="CREATE"><Connection Source="wrongPair.CLI10.INITO" Destination="wrongPair.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,209" Action="CREATE"><Connection Source="wrongPair.SER1.INITO" Destination="wrongPair.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,210" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2_1.CNF" Destination="wrongPair.Server0_1wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,211" Action="CREATE"><Connection Source="wrongPair.SER01.INITO" Destination="wrongPair.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,212" Action="CREATE"><Connection Source="wrongPair.Server0wrongPair.CNF" Destination="wrongPair.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,213" Action="CREATE"><Connection Source="wrongPair.Client0wrongPair.CNF" Destination="wrongPair.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,214" Action="CREATE"><Connection Source="wrongPair.Client1wrongPair.CNF" Destination="wrongPair.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,215" Action="CREATE"><Connection Source="wrongPair.Client0_1wrongPair.CNF" Destination="wrongPair.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,216" Action="CREATE"><Connection Source="wrongPair.Client1_0wrongPair.CNF" Destination="wrongPair.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,217" Action="CREATE"><Connection Source="wrongPair.Server1wrongPair.CNF" Destination="wrongPair.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,218" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2_1_1.CNF" Destination="wrongPair.Server1_0wrongPair.REQ" /></Request>
+WrongParameters;<Request ID="1,219" Action="CREATE"><Connection Source="wrongPair.Server1_0wrongPair.CNF" Destination="W2W_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,220" Action="CREATE"><Connection Source="wrongPair.Server0_1wrongPair.CNF" Destination="wrongPair.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,221" Action="CREATE"><Connection Source="wrongPair.SER10.INITO" Destination="wrongPair.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,222" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1.OUT" Destination="wrongPair.Client1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,223" Action="CREATE"><Connection Source="wrongPair.F_NOT_1.OUT" Destination="wrongPair.Pub1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,224" Action="CREATE"><Connection Source="wrongPair.SER0.QO" Destination="wrongPair.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,225" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1.OUT" Destination="wrongPair.Server0wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,226" Action="CREATE"><Connection Source="wrongPair.STRING2STRING_1.OUT" Destination="wrongPair.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,227" Action="CREATE"><Connection Source="wrongPair.PUB1.QO" Destination="wrongPair.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,228" Action="CREATE"><Connection Source="wrongPair.SUB1.QO" Destination="wrongPair.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,229" Action="CREATE"><Connection Source="wrongPair.F_NOT.OUT" Destination="wrongPair.Sub1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,230" Action="CREATE"><Connection Source="wrongPair.SUB1.RD_1" Destination="wrongPair.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,231" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_1.OUT" Destination="wrongPair.Client0_1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,232" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2.OUT" Destination="wrongPair.Server1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,233" Action="CREATE"><Connection Source="wrongPair.CLI1.QO" Destination="wrongPair.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,234" Action="CREATE"><Connection Source="wrongPair.CLI01.QO" Destination="wrongPair.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,235" Action="CREATE"><Connection Source="wrongPair.STRING2STRING_1_1.OUT" Destination="wrongPair.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,236" Action="CREATE"><Connection Source="wrongPair.CLI1.RD_1" Destination="wrongPair.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,237" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_4.OUT" Destination="wrongPair.Client0wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,238" Action="CREATE"><Connection Source="wrongPair.CLI0.QO" Destination="wrongPair.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,239" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_3.OUT" Destination="wrongPair.Client1_0wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,240" Action="CREATE"><Connection Source="wrongPair.CLI10.QO" Destination="wrongPair.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,241" Action="CREATE"><Connection Source="wrongPair.SER1.QO" Destination="wrongPair.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,242" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2_1.OUT" Destination="wrongPair.Server0_1wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,243" Action="CREATE"><Connection Source="wrongPair.CLI01.RD_1" Destination="wrongPair.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,244" Action="CREATE"><Connection Source="wrongPair.STRING2STRING_2.OUT" Destination="wrongPair.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,245" Action="CREATE"><Connection Source="wrongPair.STRING2STRING_2_1.OUT" Destination="wrongPair.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,246" Action="CREATE"><Connection Source="wrongPair.SER1.RD_1" Destination="wrongPair.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,247" Action="CREATE"><Connection Source="wrongPair.SER01.QO" Destination="wrongPair.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,248" Action="CREATE"><Connection Source="wrongPair.SER01.RD_1" Destination="wrongPair.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,249" Action="CREATE"><Connection Source="wrongPair.F_NOT_1_1_1_2_1_1.OUT" Destination="wrongPair.Server1_0wrongPair.check" /></Request>
+WrongParameters;<Request ID="1,250" Action="CREATE"><Connection Source="wrongPair.SER10.QO" Destination="wrongPair.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,251" Action="CREATE"><Connection Source="wrongPair.STRING2STRING_3.OUT" Destination="wrongPair.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,252" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Client1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,253" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Pub1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,254" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Pub1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,255" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER0.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,256" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Server0NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,257" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Sub1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,258" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.PUB1.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,259" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SUB1.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,260" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Sub1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,261" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Client0_1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,262" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Server1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,263" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI1.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,264" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI01.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,265" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI0.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,266" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_4.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Client0NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,267" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_3.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Client1_0NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,268" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI10.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,269" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER1.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,270" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Server0_1NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,271" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER01.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,272" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Server0NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,273" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Client0NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,274" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Client1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,275" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Client0_1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,276" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Client1_0NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,277" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Server1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,278" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1_1.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.Server1_0NoBrowseNameNorNodeId.REQ" /></Request>
+WrongParameters;<Request ID="1,279" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Server1_0NoBrowseNameNorNodeId.CNF" Destination="W2W_1_1_4_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,280" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.Server0_1NoBrowseNameNorNodeId.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,281" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER10.INITO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,282" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Client1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,283" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Pub1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,284" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER0.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,285" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Server0NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,286" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,287" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.PUB1.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,288" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SUB1.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,289" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Sub1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,290" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SUB1.RD_1" Destination="RemoteWithoutBrowseNameNorNodeId.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,291" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Client0_1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,292" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Server1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,293" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI1.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,294" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI01.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,295" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_1_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,296" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI1.RD_1" Destination="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,297" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_4.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Client0NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,298" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI0.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,299" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_3.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Client1_0NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,300" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI10.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,301" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER1.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,302" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Server0_1NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,303" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.CLI01.RD_1" Destination="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,304" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,305" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,306" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER1.RD_1" Destination="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,307" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER01.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,308" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER01.RD_1" Destination="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,309" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1_1.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.Server1_0NoBrowseNameNorNodeId.check" /></Request>
+WrongParameters;<Request ID="1,310" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.SER10.QO" Destination="RemoteWithoutBrowseNameNorNodeId.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,311" Action="CREATE"><Connection Source="RemoteWithoutBrowseNameNorNodeId.STRING2STRING_3.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,312" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1.CNF" Destination="RemoteRead.Client1RemoteReadWrongSD.REQ" /></Request>
+WrongParameters;<Request ID="1,313" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1.CNF" Destination="RemoteRead.Pub1RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,314" Action="CREATE"><Connection Source="RemoteRead.Pub1RemoteRead.CNF" Destination="RemoteRead.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,315" Action="CREATE"><Connection Source="RemoteRead.SER0.INITO" Destination="RemoteRead.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,316" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1.CNF" Destination="RemoteRead.Server0RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,317" Action="CREATE"><Connection Source="RemoteRead.Sub1RemoteRead.CNF" Destination="RemoteRead.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,318" Action="CREATE"><Connection Source="RemoteRead.PUB1.INITO" Destination="RemoteRead.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,319" Action="CREATE"><Connection Source="RemoteRead.F_NOT.CNF" Destination="RemoteRead.Sub1RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,320" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2.CNF" Destination="RemoteRead.Server1RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,321" Action="CREATE"><Connection Source="RemoteRead.CLI1.INITO" Destination="RemoteRead.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,322" Action="CREATE"><Connection Source="RemoteRead.CLI0.INITO" Destination="RemoteRead.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,323" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_4.CNF" Destination="RemoteRead.Client0RemoteReadWrongRD.REQ" /></Request>
+WrongParameters;<Request ID="1,324" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_3.CNF" Destination="RemoteRead.Client1_0Client1RemReadWrongSD.REQ" /></Request>
+WrongParameters;<Request ID="1,325" Action="CREATE"><Connection Source="RemoteRead.CLI10.INITO" Destination="RemoteRead.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,326" Action="CREATE"><Connection Source="RemoteRead.SER1.INITO" Destination="RemoteRead.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,327" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2_1.CNF" Destination="RemoteRead.Server0_1RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,328" Action="CREATE"><Connection Source="RemoteRead.SER01.INITO" Destination="RemoteRead.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,329" Action="CREATE"><Connection Source="RemoteRead.Server0RemoteRead.CNF" Destination="RemoteRead.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,330" Action="CREATE"><Connection Source="RemoteRead.Client0RemoteReadWrongRD.CNF" Destination="RemoteRead.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,331" Action="CREATE"><Connection Source="RemoteRead.Client1_0Client1RemReadWrongSD.CNF" Destination="RemoteRead.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,332" Action="CREATE"><Connection Source="RemoteRead.Server1RemoteRead.CNF" Destination="RemoteRead.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,333" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2_1_1.CNF" Destination="RemoteRead.Server1_0RemoteRead.REQ" /></Request>
+WrongParameters;<Request ID="1,334" Action="CREATE"><Connection Source="RemoteRead.Server1_0RemoteRead.CNF" Destination="W2W_1_1_4_2_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,335" Action="CREATE"><Connection Source="RemoteRead.Server0_1RemoteRead.CNF" Destination="RemoteRead.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,336" Action="CREATE"><Connection Source="RemoteRead.SER10.INITO" Destination="RemoteRead.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,337" Action="CREATE"><Connection Source="RemoteRead.SUB1.INITO" Destination="RemoteRead.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,338" Action="CREATE"><Connection Source="RemoteRead.Client1RemoteReadWrongSD.CNF" Destination="RemoteRead.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,339" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1.OUT" Destination="RemoteRead.Client1RemoteReadWrongSD.check" /></Request>
+WrongParameters;<Request ID="1,340" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1.OUT" Destination="RemoteRead.Pub1RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,341" Action="CREATE"><Connection Source="RemoteRead.SER0.QO" Destination="RemoteRead.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,342" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1.OUT" Destination="RemoteRead.Server0RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,343" Action="CREATE"><Connection Source="RemoteRead.STRING2STRING_1.OUT" Destination="RemoteRead.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,344" Action="CREATE"><Connection Source="RemoteRead.PUB1.QO" Destination="RemoteRead.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,345" Action="CREATE"><Connection Source="RemoteRead.F_NOT.OUT" Destination="RemoteRead.Sub1RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,346" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2.OUT" Destination="RemoteRead.Server1RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,347" Action="CREATE"><Connection Source="RemoteRead.CLI1.QO" Destination="RemoteRead.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,348" Action="CREATE"><Connection Source="RemoteRead.STRING2STRING_1_1.OUT" Destination="RemoteRead.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,349" Action="CREATE"><Connection Source="RemoteRead.CLI1.RD_1" Destination="RemoteRead.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,350" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_4.OUT" Destination="RemoteRead.Client0RemoteReadWrongRD.check" /></Request>
+WrongParameters;<Request ID="1,351" Action="CREATE"><Connection Source="RemoteRead.CLI0.QO" Destination="RemoteRead.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,352" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_3.OUT" Destination="RemoteRead.Client1_0Client1RemReadWrongSD.check" /></Request>
+WrongParameters;<Request ID="1,353" Action="CREATE"><Connection Source="RemoteRead.CLI10.QO" Destination="RemoteRead.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,354" Action="CREATE"><Connection Source="RemoteRead.SER1.QO" Destination="RemoteRead.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,355" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2_1.OUT" Destination="RemoteRead.Server0_1RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,356" Action="CREATE"><Connection Source="RemoteRead.STRING2STRING_2_1.OUT" Destination="RemoteRead.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,357" Action="CREATE"><Connection Source="RemoteRead.SER1.RD_1" Destination="RemoteRead.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,358" Action="CREATE"><Connection Source="RemoteRead.SER01.QO" Destination="RemoteRead.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,359" Action="CREATE"><Connection Source="RemoteRead.SER01.RD_1" Destination="RemoteRead.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,360" Action="CREATE"><Connection Source="RemoteRead.F_NOT_1_1_1_2_1_1.OUT" Destination="RemoteRead.Server1_0RemoteRead.check" /></Request>
+WrongParameters;<Request ID="1,361" Action="CREATE"><Connection Source="RemoteRead.SER10.QO" Destination="RemoteRead.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,362" Action="CREATE"><Connection Source="RemoteRead.STRING2STRING_3.OUT" Destination="RemoteRead.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,363" Action="CREATE"><Connection Source="RemoteRead.SUB1.QO" Destination="RemoteRead.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,364" Action="CREATE"><Connection Source="RemoteRead.SUB1.RD_1" Destination="RemoteRead.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,365" Action="CREATE"><Connection Source="RemoteRead.STRING2STRING_2.OUT" Destination="RemoteRead.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,366" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1.CNF" Destination="LocalRead.Client1Read.REQ" /></Request>
+WrongParameters;<Request ID="1,367" Action="CREATE"><Connection Source="LocalRead.F_NOT_1.CNF" Destination="LocalRead.Pub1Read.REQ" /></Request>
+WrongParameters;<Request ID="1,368" Action="CREATE"><Connection Source="LocalRead.Pub1Read.CNF" Destination="LocalRead.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,369" Action="CREATE"><Connection Source="LocalRead.SER0.INITO" Destination="LocalRead.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,370" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1.CNF" Destination="LocalRead.Server0Read.REQ" /></Request>
+WrongParameters;<Request ID="1,371" Action="CREATE"><Connection Source="LocalRead.Sub1ReadWrongNoRDs.CNF" Destination="LocalRead.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,372" Action="CREATE"><Connection Source="LocalRead.PUB1.INITO" Destination="LocalRead.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,373" Action="CREATE"><Connection Source="LocalRead.F_NOT.CNF" Destination="LocalRead.Sub1ReadWrongNoRDs.REQ" /></Request>
+WrongParameters;<Request ID="1,374" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_1.CNF" Destination="LocalRead.Client0_1Read.REQ" /></Request>
+WrongParameters;<Request ID="1,375" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2.CNF" Destination="LocalRead.Server1Read.REQ" /></Request>
+WrongParameters;<Request ID="1,376" Action="CREATE"><Connection Source="LocalRead.CLI1.INITO" Destination="LocalRead.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,377" Action="CREATE"><Connection Source="LocalRead.CLI01.INITO" Destination="LocalRead.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,378" Action="CREATE"><Connection Source="LocalRead.CLI0.INITO" Destination="LocalRead.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,379" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_4.CNF" Destination="LocalRead.Client0Read.REQ" /></Request>
+WrongParameters;<Request ID="1,380" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_3.CNF" Destination="LocalRead.Client1_0Read.REQ" /></Request>
+WrongParameters;<Request ID="1,381" Action="CREATE"><Connection Source="LocalRead.CLI10.INITO" Destination="LocalRead.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,382" Action="CREATE"><Connection Source="LocalRead.SER1.INITO" Destination="LocalRead.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,383" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2_1.CNF" Destination="LocalRead.Server0_1Read.REQ" /></Request>
+WrongParameters;<Request ID="1,384" Action="CREATE"><Connection Source="LocalRead.SER01.INITO" Destination="LocalRead.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,385" Action="CREATE"><Connection Source="LocalRead.Server0Read.CNF" Destination="LocalRead.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,386" Action="CREATE"><Connection Source="LocalRead.Client0Read.CNF" Destination="LocalRead.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,387" Action="CREATE"><Connection Source="LocalRead.Client1Read.CNF" Destination="LocalRead.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,388" Action="CREATE"><Connection Source="LocalRead.Client0_1Read.CNF" Destination="LocalRead.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,389" Action="CREATE"><Connection Source="LocalRead.Client1_0Read.CNF" Destination="LocalRead.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,390" Action="CREATE"><Connection Source="LocalRead.Server1Read.CNF" Destination="LocalRead.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,391" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2_1_1.CNF" Destination="LocalRead.Server1_0Read.REQ" /></Request>
+WrongParameters;<Request ID="1,392" Action="CREATE"><Connection Source="LocalRead.Server1_0Read.CNF" Destination="W2W_1_1_4_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,393" Action="CREATE"><Connection Source="LocalRead.Server0_1Read.CNF" Destination="LocalRead.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,394" Action="CREATE"><Connection Source="LocalRead.SER10.INITO" Destination="LocalRead.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,395" Action="CREATE"><Connection Source="LocalRead.SUB2.INITO" Destination="LocalRead.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,396" Action="CREATE"><Connection Source="LocalRead.SUB0.INITO" Destination="LocalRead.F_NOT_2.REQ" /></Request>
+WrongParameters;<Request ID="1,397" Action="CREATE"><Connection Source="LocalRead.F_NOT_2.CNF" Destination="LocalRead.Sub0ReadWrongNoRDs_.REQ" /></Request>
+WrongParameters;<Request ID="1,398" Action="CREATE"><Connection Source="LocalRead.Sub0ReadWrongNoRDs_.CNF" Destination="LocalRead.SUB2.INIT" /></Request>
+WrongParameters;<Request ID="1,399" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1.OUT" Destination="LocalRead.Client1Read.check" /></Request>
+WrongParameters;<Request ID="1,400" Action="CREATE"><Connection Source="LocalRead.F_NOT_1.OUT" Destination="LocalRead.Pub1Read.check" /></Request>
+WrongParameters;<Request ID="1,401" Action="CREATE"><Connection Source="LocalRead.SER0.QO" Destination="LocalRead.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,402" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1.OUT" Destination="LocalRead.Server0Read.check" /></Request>
+WrongParameters;<Request ID="1,403" Action="CREATE"><Connection Source="LocalRead.STRING2STRING_1.OUT" Destination="LocalRead.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,404" Action="CREATE"><Connection Source="LocalRead.PUB1.QO" Destination="LocalRead.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,405" Action="CREATE"><Connection Source="LocalRead.F_NOT.OUT" Destination="LocalRead.Sub1ReadWrongNoRDs.check" /></Request>
+WrongParameters;<Request ID="1,406" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_1.OUT" Destination="LocalRead.Client0_1Read.check" /></Request>
+WrongParameters;<Request ID="1,407" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2.OUT" Destination="LocalRead.Server1Read.check" /></Request>
+WrongParameters;<Request ID="1,408" Action="CREATE"><Connection Source="LocalRead.CLI1.QO" Destination="LocalRead.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,409" Action="CREATE"><Connection Source="LocalRead.CLI01.QO" Destination="LocalRead.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,410" Action="CREATE"><Connection Source="LocalRead.STRING2STRING_1_1.OUT" Destination="LocalRead.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,411" Action="CREATE"><Connection Source="LocalRead.CLI1.RD_1" Destination="LocalRead.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,412" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_4.OUT" Destination="LocalRead.Client0Read.check" /></Request>
+WrongParameters;<Request ID="1,413" Action="CREATE"><Connection Source="LocalRead.CLI0.QO" Destination="LocalRead.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,414" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_3.OUT" Destination="LocalRead.Client1_0Read.check" /></Request>
+WrongParameters;<Request ID="1,415" Action="CREATE"><Connection Source="LocalRead.CLI10.QO" Destination="LocalRead.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,416" Action="CREATE"><Connection Source="LocalRead.SER1.QO" Destination="LocalRead.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,417" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2_1.OUT" Destination="LocalRead.Server0_1Read.check" /></Request>
+WrongParameters;<Request ID="1,418" Action="CREATE"><Connection Source="LocalRead.CLI01.RD_1" Destination="LocalRead.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,419" Action="CREATE"><Connection Source="LocalRead.STRING2STRING_2.OUT" Destination="LocalRead.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,420" Action="CREATE"><Connection Source="LocalRead.STRING2STRING_2_1.OUT" Destination="LocalRead.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,421" Action="CREATE"><Connection Source="LocalRead.SER1.RD_1" Destination="LocalRead.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,422" Action="CREATE"><Connection Source="LocalRead.SER01.QO" Destination="LocalRead.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,423" Action="CREATE"><Connection Source="LocalRead.SER01.RD_1" Destination="LocalRead.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,424" Action="CREATE"><Connection Source="LocalRead.F_NOT_1_1_1_2_1_1.OUT" Destination="LocalRead.Server1_0Read.check" /></Request>
+WrongParameters;<Request ID="1,425" Action="CREATE"><Connection Source="LocalRead.SER10.QO" Destination="LocalRead.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,426" Action="CREATE"><Connection Source="LocalRead.STRING2STRING_3.OUT" Destination="LocalRead.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,427" Action="CREATE"><Connection Source="LocalRead.SUB2.QO" Destination="LocalRead.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,428" Action="CREATE"><Connection Source="LocalRead.SUB2.RD_1" Destination="LocalRead.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,429" Action="CREATE"><Connection Source="LocalRead.SUB2.RD_2" Destination="LocalRead.STRING2STRING_4.IN" /></Request>
+WrongParameters;<Request ID="1,430" Action="CREATE"><Connection Source="LocalRead.SUB0.QO" Destination="LocalRead.F_NOT_2.IN" /></Request>
+WrongParameters;<Request ID="1,431" Action="CREATE"><Connection Source="LocalRead.F_NOT_2.OUT" Destination="LocalRead.Sub0ReadWrongNoRDs_.check" /></Request>
+WrongParameters;<Request ID="1,432" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1.CNF" Destination="RemoteWrite.Cli1RemWriteGoodSDwRD.REQ" /></Request>
+WrongParameters;<Request ID="1,433" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1.CNF" Destination="RemoteWrite.Cli2RemWriteWrongSDGoodRD.REQ" /></Request>
+WrongParameters;<Request ID="1,434" Action="CREATE"><Connection Source="RemoteWrite.SER0.INITO" Destination="RemoteWrite.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,435" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1.CNF" Destination="RemoteWrite.Server0RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,436" Action="CREATE"><Connection Source="RemoteWrite.F_NOT.CNF" Destination="RemoteWrite.Sub1RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,437" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2.CNF" Destination="RemoteWrite.Server1RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,438" Action="CREATE"><Connection Source="RemoteWrite.CLI1.INITO" Destination="RemoteWrite.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,439" Action="CREATE"><Connection Source="RemoteWrite.CLI0.INITO" Destination="RemoteWrite.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,440" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_4.CNF" Destination="RemoteWrite.Client0RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,441" Action="CREATE"><Connection Source="RemoteWrite.SER1.INITO" Destination="RemoteWrite.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,442" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2_1.CNF" Destination="RemoteWrite.Server0_1RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,443" Action="CREATE"><Connection Source="RemoteWrite.SER01.INITO" Destination="RemoteWrite.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,444" Action="CREATE"><Connection Source="RemoteWrite.Server0RemWrite.CNF" Destination="RemoteWrite.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,445" Action="CREATE"><Connection Source="RemoteWrite.Client0RemWrite.CNF" Destination="RemoteWrite.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,446" Action="CREATE"><Connection Source="RemoteWrite.Server1RemWrite.CNF" Destination="RemoteWrite.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,447" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2_1_1.CNF" Destination="RemoteWrite.Server1_0RemWrite.REQ" /></Request>
+WrongParameters;<Request ID="1,448" Action="CREATE"><Connection Source="RemoteWrite.Server1_0RemWrite.CNF" Destination="W2W_1_1_4_2_1_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,449" Action="CREATE"><Connection Source="RemoteWrite.Server0_1RemWrite.CNF" Destination="RemoteWrite.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,450" Action="CREATE"><Connection Source="RemoteWrite.SER10.INITO" Destination="RemoteWrite.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,451" Action="CREATE"><Connection Source="RemoteWrite.SUB2.INITO" Destination="RemoteWrite.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,452" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_2.CNF" Destination="RemoteWrite.Pub0RemWriteWrondSD_1.REQ" /></Request>
+WrongParameters;<Request ID="1,453" Action="CREATE"><Connection Source="RemoteWrite.PUB0.INITO" Destination="RemoteWrite.F_NOT_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,454" Action="CREATE"><Connection Source="RemoteWrite.Sub1RemWrite.CNF" Destination="RemoteWrite.PUB0.INIT" /></Request>
+WrongParameters;<Request ID="1,455" Action="CREATE"><Connection Source="RemoteWrite.Pub0RemWriteWrondSD_1.CNF" Destination="RemoteWrite.CLI2.INIT" /></Request>
+WrongParameters;<Request ID="1,456" Action="CREATE"><Connection Source="RemoteWrite.CLI2.INITO" Destination="RemoteWrite.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,457" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_3.CNF" Destination="RemoteWrite.Cli3WrongSDWrongRD.REQ" /></Request>
+WrongParameters;<Request ID="1,458" Action="CREATE"><Connection Source="RemoteWrite.Cli3WrongSDWrongRD.CNF" Destination="RemoteWrite.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,459" Action="CREATE"><Connection Source="RemoteWrite.Cli2RemWriteWrongSDGoodRD.CNF" Destination="RemoteWrite.CLI3.INIT" /></Request>
+WrongParameters;<Request ID="1,460" Action="CREATE"><Connection Source="RemoteWrite.CLI3.INITO" Destination="RemoteWrite.F_NOT_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,461" Action="CREATE"><Connection Source="RemoteWrite.Cli1RemWriteGoodSDwRD.CNF" Destination="RemoteWrite.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,462" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1.OUT" Destination="RemoteWrite.Cli1RemWriteGoodSDwRD.check" /></Request>
+WrongParameters;<Request ID="1,463" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1.OUT" Destination="RemoteWrite.Cli2RemWriteWrongSDGoodRD.check" /></Request>
+WrongParameters;<Request ID="1,464" Action="CREATE"><Connection Source="RemoteWrite.SER0.QO" Destination="RemoteWrite.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,465" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1.OUT" Destination="RemoteWrite.Server0RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,466" Action="CREATE"><Connection Source="RemoteWrite.F_NOT.OUT" Destination="RemoteWrite.Sub1RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,467" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2.OUT" Destination="RemoteWrite.Server1RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,468" Action="CREATE"><Connection Source="RemoteWrite.CLI1.QO" Destination="RemoteWrite.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,469" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_1_1.OUT" Destination="RemoteWrite.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,470" Action="CREATE"><Connection Source="RemoteWrite.CLI1.RD_1" Destination="RemoteWrite.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,471" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_4.OUT" Destination="RemoteWrite.Client0RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,472" Action="CREATE"><Connection Source="RemoteWrite.CLI0.QO" Destination="RemoteWrite.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,473" Action="CREATE"><Connection Source="RemoteWrite.SER1.QO" Destination="RemoteWrite.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,474" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2_1.OUT" Destination="RemoteWrite.Server0_1RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,475" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_2_1.OUT" Destination="RemoteWrite.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,476" Action="CREATE"><Connection Source="RemoteWrite.SER1.RD_1" Destination="RemoteWrite.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,477" Action="CREATE"><Connection Source="RemoteWrite.SER01.QO" Destination="RemoteWrite.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,478" Action="CREATE"><Connection Source="RemoteWrite.SER01.RD_1" Destination="RemoteWrite.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,479" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_1_1_2_1_1.OUT" Destination="RemoteWrite.Server1_0RemWrite.check" /></Request>
+WrongParameters;<Request ID="1,480" Action="CREATE"><Connection Source="RemoteWrite.SER10.QO" Destination="RemoteWrite.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,481" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_3.OUT" Destination="RemoteWrite.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,482" Action="CREATE"><Connection Source="RemoteWrite.SUB2.QO" Destination="RemoteWrite.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,483" Action="CREATE"><Connection Source="RemoteWrite.SUB2.RD_1" Destination="RemoteWrite.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,484" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_2.OUT" Destination="RemoteWrite.Pub0RemWriteWrondSD_1.check" /></Request>
+WrongParameters;<Request ID="1,485" Action="CREATE"><Connection Source="RemoteWrite.PUB0.QO" Destination="RemoteWrite.F_NOT_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,486" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_1.OUT" Destination="RemoteWrite.CLI2.SD_1" /></Request>
+WrongParameters;<Request ID="1,487" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_1.OUT" Destination="RemoteWrite.CLI2.SD_2" /></Request>
+WrongParameters;<Request ID="1,488" Action="CREATE"><Connection Source="RemoteWrite.CLI2.QO" Destination="RemoteWrite.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,489" Action="CREATE"><Connection Source="RemoteWrite.F_NOT_1_3.OUT" Destination="RemoteWrite.Cli3WrongSDWrongRD.check" /></Request>
+WrongParameters;<Request ID="1,490" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_1.OUT" Destination="RemoteWrite.CLI3.SD_1" /></Request>
+WrongParameters;<Request ID="1,491" Action="CREATE"><Connection Source="RemoteWrite.STRING2STRING_1.OUT" Destination="RemoteWrite.CLI3.SD_2" /></Request>
+WrongParameters;<Request ID="1,492" Action="CREATE"><Connection Source="RemoteWrite.CLI3.QO" Destination="RemoteWrite.F_NOT_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,493" Action="CREATE"><Connection Source="RemoteWrite.CLI3.RD_1" Destination="RemoteWrite.STRING2STRING_1.IN" /></Request>
+WrongParameters;<Request ID="1,494" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1.CNF" Destination="LocalWrite.Client1Write.REQ" /></Request>
+WrongParameters;<Request ID="1,495" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1.CNF" Destination="LocalWrite.Pub1WriteWrondSD.REQ" /></Request>
+WrongParameters;<Request ID="1,496" Action="CREATE"><Connection Source="LocalWrite.Pub1WriteWrondSD.CNF" Destination="LocalWrite.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,497" Action="CREATE"><Connection Source="LocalWrite.SER0.INITO" Destination="LocalWrite.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,498" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1.CNF" Destination="LocalWrite.Server0Write.REQ" /></Request>
+WrongParameters;<Request ID="1,499" Action="CREATE"><Connection Source="LocalWrite.F_NOT.CNF" Destination="LocalWrite.Sub1Write.REQ" /></Request>
+WrongParameters;<Request ID="1,500" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_1.CNF" Destination="LocalWrite.Client0_1Write.REQ" /></Request>
+WrongParameters;<Request ID="1,501" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2.CNF" Destination="LocalWrite.Server1Write.REQ" /></Request>
+WrongParameters;<Request ID="1,502" Action="CREATE"><Connection Source="LocalWrite.CLI1.INITO" Destination="LocalWrite.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,503" Action="CREATE"><Connection Source="LocalWrite.CLI01.INITO" Destination="LocalWrite.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,504" Action="CREATE"><Connection Source="LocalWrite.CLI0.INITO" Destination="LocalWrite.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,505" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_4.CNF" Destination="LocalWrite.Client0Write.REQ" /></Request>
+WrongParameters;<Request ID="1,506" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_3.CNF" Destination="LocalWrite.Client1_0Write.REQ" /></Request>
+WrongParameters;<Request ID="1,507" Action="CREATE"><Connection Source="LocalWrite.CLI10.INITO" Destination="LocalWrite.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,508" Action="CREATE"><Connection Source="LocalWrite.SER1.INITO" Destination="LocalWrite.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,509" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2_1.CNF" Destination="LocalWrite.Server0_1Write.REQ" /></Request>
+WrongParameters;<Request ID="1,510" Action="CREATE"><Connection Source="LocalWrite.SER01.INITO" Destination="LocalWrite.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,511" Action="CREATE"><Connection Source="LocalWrite.Server0Write.CNF" Destination="LocalWrite.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,512" Action="CREATE"><Connection Source="LocalWrite.Client0Write.CNF" Destination="LocalWrite.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,513" Action="CREATE"><Connection Source="LocalWrite.Client1Write.CNF" Destination="LocalWrite.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,514" Action="CREATE"><Connection Source="LocalWrite.Client0_1Write.CNF" Destination="LocalWrite.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,515" Action="CREATE"><Connection Source="LocalWrite.Client1_0Write.CNF" Destination="LocalWrite.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,516" Action="CREATE"><Connection Source="LocalWrite.Server1Write.CNF" Destination="LocalWrite.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,517" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2_1_1.CNF" Destination="LocalWrite.Server1_0Write.REQ" /></Request>
+WrongParameters;<Request ID="1,518" Action="CREATE"><Connection Source="LocalWrite.Server1_0Write.CNF" Destination="W2W_1_1_4_2_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,519" Action="CREATE"><Connection Source="LocalWrite.Server0_1Write.CNF" Destination="LocalWrite.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,520" Action="CREATE"><Connection Source="LocalWrite.SER10.INITO" Destination="LocalWrite.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,521" Action="CREATE"><Connection Source="LocalWrite.SUB2.INITO" Destination="LocalWrite.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,522" Action="CREATE"><Connection Source="LocalWrite.PUB1.INITO" Destination="LocalWrite.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,523" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_2.CNF" Destination="LocalWrite.Pub0WriteWrondSD_1.REQ" /></Request>
+WrongParameters;<Request ID="1,524" Action="CREATE"><Connection Source="LocalWrite.PUB0.INITO" Destination="LocalWrite.F_NOT_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,525" Action="CREATE"><Connection Source="LocalWrite.Sub1Write.CNF" Destination="LocalWrite.PUB0.INIT" /></Request>
+WrongParameters;<Request ID="1,526" Action="CREATE"><Connection Source="LocalWrite.Pub0WriteWrondSD_1.CNF" Destination="LocalWrite.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,527" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1.OUT" Destination="LocalWrite.Client1Write.check" /></Request>
+WrongParameters;<Request ID="1,528" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1.OUT" Destination="LocalWrite.Pub1WriteWrondSD.check" /></Request>
+WrongParameters;<Request ID="1,529" Action="CREATE"><Connection Source="LocalWrite.SER0.QO" Destination="LocalWrite.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,530" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1.OUT" Destination="LocalWrite.Server0Write.check" /></Request>
+WrongParameters;<Request ID="1,531" Action="CREATE"><Connection Source="LocalWrite.F_NOT.OUT" Destination="LocalWrite.Sub1Write.check" /></Request>
+WrongParameters;<Request ID="1,532" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_1.OUT" Destination="LocalWrite.Client0_1Write.check" /></Request>
+WrongParameters;<Request ID="1,533" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2.OUT" Destination="LocalWrite.Server1Write.check" /></Request>
+WrongParameters;<Request ID="1,534" Action="CREATE"><Connection Source="LocalWrite.CLI1.QO" Destination="LocalWrite.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,535" Action="CREATE"><Connection Source="LocalWrite.CLI01.QO" Destination="LocalWrite.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,536" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_1_1.OUT" Destination="LocalWrite.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,537" Action="CREATE"><Connection Source="LocalWrite.CLI1.RD_1" Destination="LocalWrite.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,538" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_4.OUT" Destination="LocalWrite.Client0Write.check" /></Request>
+WrongParameters;<Request ID="1,539" Action="CREATE"><Connection Source="LocalWrite.CLI0.QO" Destination="LocalWrite.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,540" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_3.OUT" Destination="LocalWrite.Client1_0Write.check" /></Request>
+WrongParameters;<Request ID="1,541" Action="CREATE"><Connection Source="LocalWrite.CLI10.QO" Destination="LocalWrite.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,542" Action="CREATE"><Connection Source="LocalWrite.SER1.QO" Destination="LocalWrite.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,543" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2_1.OUT" Destination="LocalWrite.Server0_1Write.check" /></Request>
+WrongParameters;<Request ID="1,544" Action="CREATE"><Connection Source="LocalWrite.CLI01.RD_1" Destination="LocalWrite.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,545" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_2.OUT" Destination="LocalWrite.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,546" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_2_1.OUT" Destination="LocalWrite.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,547" Action="CREATE"><Connection Source="LocalWrite.SER1.RD_1" Destination="LocalWrite.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,548" Action="CREATE"><Connection Source="LocalWrite.SER01.QO" Destination="LocalWrite.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,549" Action="CREATE"><Connection Source="LocalWrite.SER01.RD_1" Destination="LocalWrite.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,550" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_1_1_2_1_1.OUT" Destination="LocalWrite.Server1_0Write.check" /></Request>
+WrongParameters;<Request ID="1,551" Action="CREATE"><Connection Source="LocalWrite.SER10.QO" Destination="LocalWrite.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,552" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_3.OUT" Destination="LocalWrite.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,553" Action="CREATE"><Connection Source="LocalWrite.SUB2.QO" Destination="LocalWrite.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,554" Action="CREATE"><Connection Source="LocalWrite.SUB2.RD_1" Destination="LocalWrite.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,555" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_1.OUT" Destination="LocalWrite.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,556" Action="CREATE"><Connection Source="LocalWrite.PUB1.QO" Destination="LocalWrite.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,557" Action="CREATE"><Connection Source="LocalWrite.STRING2STRING_1.OUT" Destination="LocalWrite.PUB1.SD_2" /></Request>
+WrongParameters;<Request ID="1,558" Action="CREATE"><Connection Source="LocalWrite.F_NOT_1_2.OUT" Destination="LocalWrite.Pub0WriteWrondSD_1.check" /></Request>
+WrongParameters;<Request ID="1,559" Action="CREATE"><Connection Source="LocalWrite.PUB0.QO" Destination="LocalWrite.F_NOT_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,560" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1.CNF" Destination="CreateMethod.Client1CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,561" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1.CNF" Destination="CreateMethod.Pub1CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,562" Action="CREATE"><Connection Source="CreateMethod.Sub1CreateMethod.CNF" Destination="CreateMethod.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,563" Action="CREATE"><Connection Source="CreateMethod.PUB1.INITO" Destination="CreateMethod.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,564" Action="CREATE"><Connection Source="CreateMethod.SUB1.INITO" Destination="CreateMethod.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,565" Action="CREATE"><Connection Source="CreateMethod.F_NOT.CNF" Destination="CreateMethod.Sub1CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,566" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_1.CNF" Destination="CreateMethod.Client0_1CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,567" Action="CREATE"><Connection Source="CreateMethod.CLI1.INITO" Destination="CreateMethod.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,568" Action="CREATE"><Connection Source="CreateMethod.CLI01.INITO" Destination="CreateMethod.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,569" Action="CREATE"><Connection Source="CreateMethod.CLI0.INITO" Destination="CreateMethod.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,570" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_4.CNF" Destination="CreateMethod.Client0CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,571" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_3.CNF" Destination="CreateMethod.Client1_0CreateMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,572" Action="CREATE"><Connection Source="CreateMethod.CLI10.INITO" Destination="CreateMethod.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,573" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_2_1.CNF" Destination="CreateMethod.CreateMethodWrongNoOfPairs.REQ" /></Request>
+WrongParameters;<Request ID="1,574" Action="CREATE"><Connection Source="CreateMethod.SER01.INITO" Destination="CreateMethod.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,575" Action="CREATE"><Connection Source="CreateMethod.Client0CreateMethod.CNF" Destination="CreateMethod.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,576" Action="CREATE"><Connection Source="CreateMethod.Client1CreateMethod.CNF" Destination="CreateMethod.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,577" Action="CREATE"><Connection Source="CreateMethod.Client0_1CreateMethod.CNF" Destination="CreateMethod.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,578" Action="CREATE"><Connection Source="CreateMethod.Pub1CreateMethod.CNF" Destination="CreateMethod.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,579" Action="CREATE"><Connection Source="CreateMethod.Client1_0CreateMethod.CNF" Destination="CreateMethod.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,580" Action="CREATE"><Connection Source="CreateMethod.CreateMethodWrongNoOfPairs.CNF" Destination="W2W_1_1_4_2_1_1_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,581" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1.OUT" Destination="CreateMethod.Client1CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,582" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1.OUT" Destination="CreateMethod.Pub1CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,583" Action="CREATE"><Connection Source="CreateMethod.STRING2STRING_1.OUT" Destination="CreateMethod.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,584" Action="CREATE"><Connection Source="CreateMethod.PUB1.QO" Destination="CreateMethod.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,585" Action="CREATE"><Connection Source="CreateMethod.SUB1.QO" Destination="CreateMethod.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,586" Action="CREATE"><Connection Source="CreateMethod.F_NOT.OUT" Destination="CreateMethod.Sub1CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,587" Action="CREATE"><Connection Source="CreateMethod.SUB1.RD_1" Destination="CreateMethod.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,588" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_1.OUT" Destination="CreateMethod.Client0_1CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,589" Action="CREATE"><Connection Source="CreateMethod.CLI1.QO" Destination="CreateMethod.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,590" Action="CREATE"><Connection Source="CreateMethod.CLI01.QO" Destination="CreateMethod.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,591" Action="CREATE"><Connection Source="CreateMethod.STRING2STRING_1_1.OUT" Destination="CreateMethod.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,592" Action="CREATE"><Connection Source="CreateMethod.CLI1.RD_1" Destination="CreateMethod.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,593" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_4.OUT" Destination="CreateMethod.Client0CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,594" Action="CREATE"><Connection Source="CreateMethod.CLI0.QO" Destination="CreateMethod.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,595" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_3.OUT" Destination="CreateMethod.Client1_0CreateMethod.check" /></Request>
+WrongParameters;<Request ID="1,596" Action="CREATE"><Connection Source="CreateMethod.CLI10.QO" Destination="CreateMethod.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,597" Action="CREATE"><Connection Source="CreateMethod.F_NOT_1_1_1_2_1.OUT" Destination="CreateMethod.CreateMethodWrongNoOfPairs.check" /></Request>
+WrongParameters;<Request ID="1,598" Action="CREATE"><Connection Source="CreateMethod.CLI01.RD_1" Destination="CreateMethod.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,599" Action="CREATE"><Connection Source="CreateMethod.STRING2STRING_2.OUT" Destination="CreateMethod.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,600" Action="CREATE"><Connection Source="CreateMethod.SER01.QO" Destination="CreateMethod.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,601" Action="CREATE"><Connection Source="CreateMethod.SER01.RD_1" Destination="CreateMethod.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,602" Action="CREATE"><Connection Source="CallMethod.F_NOT_1.CNF" Destination="CallMethod.Pub1CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,603" Action="CREATE"><Connection Source="CallMethod.Pub1CallMethod.CNF" Destination="CallMethod.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,604" Action="CREATE"><Connection Source="CallMethod.SER0.INITO" Destination="CallMethod.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,605" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1.CNF" Destination="CallMethod.Server0CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,606" Action="CREATE"><Connection Source="CallMethod.Sub1CallMethod.CNF" Destination="CallMethod.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,607" Action="CREATE"><Connection Source="CallMethod.PUB1.INITO" Destination="CallMethod.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,608" Action="CREATE"><Connection Source="CallMethod.SUB1.INITO" Destination="CallMethod.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,609" Action="CREATE"><Connection Source="CallMethod.F_NOT.CNF" Destination="CallMethod.Sub1CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,610" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2.CNF" Destination="CallMethod.Server1CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,611" Action="CREATE"><Connection Source="CallMethod.CLI0.INITO" Destination="CallMethod.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,612" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_4.CNF" Destination="CallMethod.Client0CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,613" Action="CREATE"><Connection Source="CallMethod.SER1.INITO" Destination="CallMethod.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,614" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2_1.CNF" Destination="CallMethod.Server0_1CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,615" Action="CREATE"><Connection Source="CallMethod.SER01.INITO" Destination="CallMethod.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,616" Action="CREATE"><Connection Source="CallMethod.Server0CallMethod.CNF" Destination="CallMethod.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,617" Action="CREATE"><Connection Source="CallMethod.Server1CallMethod.CNF" Destination="CallMethod.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,618" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2_1_1.CNF" Destination="CallMethod.Server1_0CallMethod.REQ" /></Request>
+WrongParameters;<Request ID="1,619" Action="CREATE"><Connection Source="CallMethod.Server0_1CallMethod.CNF" Destination="CallMethod.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,620" Action="CREATE"><Connection Source="CallMethod.SER10.INITO" Destination="CallMethod.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,621" Action="CREATE"><Connection Source="CallMethod.Client0CallMethod.CNF" Destination="CallMethod.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,622" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_4_1.CNF" Destination="CallMethod.ClientCallNoBrowsePath.REQ" /></Request>
+WrongParameters;<Request ID="1,623" Action="CREATE"><Connection Source="CallMethod.ClientCallNoBrowsePath.CNF" Destination="W2W_1_1_4_2_1_1_1_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,624" Action="CREATE"><Connection Source="CallMethod.Server1_0CallMethod.CNF" Destination="CallMethod.CLI0_1.INIT" /></Request>
+WrongParameters;<Request ID="1,625" Action="CREATE"><Connection Source="CallMethod.CLI0_1.INITO" Destination="CallMethod.F_NOT_1_1_1_4_1.REQ" /></Request>
+WrongParameters;<Request ID="1,626" Action="CREATE"><Connection Source="CallMethod.F_NOT_1.OUT" Destination="CallMethod.Pub1CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,627" Action="CREATE"><Connection Source="CallMethod.SER0.QO" Destination="CallMethod.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,628" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1.OUT" Destination="CallMethod.Server0CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,629" Action="CREATE"><Connection Source="CallMethod.STRING2STRING_1.OUT" Destination="CallMethod.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,630" Action="CREATE"><Connection Source="CallMethod.PUB1.QO" Destination="CallMethod.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,631" Action="CREATE"><Connection Source="CallMethod.SUB1.QO" Destination="CallMethod.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,632" Action="CREATE"><Connection Source="CallMethod.F_NOT.OUT" Destination="CallMethod.Sub1CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,633" Action="CREATE"><Connection Source="CallMethod.SUB1.RD_1" Destination="CallMethod.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,634" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2.OUT" Destination="CallMethod.Server1CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,635" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_4.OUT" Destination="CallMethod.Client0CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,636" Action="CREATE"><Connection Source="CallMethod.CLI0.QO" Destination="CallMethod.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,637" Action="CREATE"><Connection Source="CallMethod.SER1.QO" Destination="CallMethod.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,638" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2_1.OUT" Destination="CallMethod.Server0_1CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,639" Action="CREATE"><Connection Source="CallMethod.STRING2STRING_2_1.OUT" Destination="CallMethod.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,640" Action="CREATE"><Connection Source="CallMethod.SER1.RD_1" Destination="CallMethod.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,641" Action="CREATE"><Connection Source="CallMethod.SER01.QO" Destination="CallMethod.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,642" Action="CREATE"><Connection Source="CallMethod.SER01.RD_1" Destination="CallMethod.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,643" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_2_1_1.OUT" Destination="CallMethod.Server1_0CallMethod.check" /></Request>
+WrongParameters;<Request ID="1,644" Action="CREATE"><Connection Source="CallMethod.SER10.QO" Destination="CallMethod.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,645" Action="CREATE"><Connection Source="CallMethod.STRING2STRING_3.OUT" Destination="CallMethod.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,646" Action="CREATE"><Connection Source="CallMethod.F_NOT_1_1_1_4_1.OUT" Destination="CallMethod.ClientCallNoBrowsePath.check" /></Request>
+WrongParameters;<Request ID="1,647" Action="CREATE"><Connection Source="CallMethod.CLI0_1.QO" Destination="CallMethod.F_NOT_1_1_1_4_1.IN" /></Request>
+WrongParameters;<Request ID="1,648" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1.CNF" Destination="Subscribe.Client1Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,649" Action="CREATE"><Connection Source="Subscribe.F_NOT_1.CNF" Destination="Subscribe.Pub1Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,650" Action="CREATE"><Connection Source="Subscribe.Pub1Sub.CNF" Destination="Subscribe.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,651" Action="CREATE"><Connection Source="Subscribe.SER0.INITO" Destination="Subscribe.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,652" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1.CNF" Destination="Subscribe.Server0Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,653" Action="CREATE"><Connection Source="Subscribe.Sub1SubWrongNoRDs.CNF" Destination="Subscribe.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,654" Action="CREATE"><Connection Source="Subscribe.PUB1.INITO" Destination="Subscribe.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,655" Action="CREATE"><Connection Source="Subscribe.F_NOT.CNF" Destination="Subscribe.Sub1SubWrongNoRDs.REQ" /></Request>
+WrongParameters;<Request ID="1,656" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_1.CNF" Destination="Subscribe.Client0_1Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,657" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2.CNF" Destination="Subscribe.Server1Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,658" Action="CREATE"><Connection Source="Subscribe.CLI1.INITO" Destination="Subscribe.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,659" Action="CREATE"><Connection Source="Subscribe.CLI01.INITO" Destination="Subscribe.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,660" Action="CREATE"><Connection Source="Subscribe.CLI0.INITO" Destination="Subscribe.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,661" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_4.CNF" Destination="Subscribe.Client0Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,662" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_3.CNF" Destination="Subscribe.Client1_0Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,663" Action="CREATE"><Connection Source="Subscribe.CLI10.INITO" Destination="Subscribe.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,664" Action="CREATE"><Connection Source="Subscribe.SER1.INITO" Destination="Subscribe.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,665" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2_1.CNF" Destination="Subscribe.Server0_1Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,666" Action="CREATE"><Connection Source="Subscribe.SER01.INITO" Destination="Subscribe.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,667" Action="CREATE"><Connection Source="Subscribe.Server0Sub.CNF" Destination="Subscribe.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,668" Action="CREATE"><Connection Source="Subscribe.Client0Sub.CNF" Destination="Subscribe.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,669" Action="CREATE"><Connection Source="Subscribe.Client1Sub.CNF" Destination="Subscribe.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,670" Action="CREATE"><Connection Source="Subscribe.Client0_1Sub.CNF" Destination="Subscribe.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,671" Action="CREATE"><Connection Source="Subscribe.Client1_0Sub.CNF" Destination="Subscribe.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,672" Action="CREATE"><Connection Source="Subscribe.Server1Sub.CNF" Destination="Subscribe.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,673" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2_1_1.CNF" Destination="Subscribe.Server1_0Sub.REQ" /></Request>
+WrongParameters;<Request ID="1,674" Action="CREATE"><Connection Source="Subscribe.Server1_0Sub.CNF" Destination="createObject.SERVER_1_0.INIT" /></Request>
+WrongParameters;<Request ID="1,675" Action="CREATE"><Connection Source="Subscribe.Server0_1Sub.CNF" Destination="Subscribe.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,676" Action="CREATE"><Connection Source="Subscribe.SER10.INITO" Destination="Subscribe.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,677" Action="CREATE"><Connection Source="Subscribe.SUB2.INITO" Destination="Subscribe.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,678" Action="CREATE"><Connection Source="Subscribe.SUB0.INITO" Destination="Subscribe.F_NOT_2.REQ" /></Request>
+WrongParameters;<Request ID="1,679" Action="CREATE"><Connection Source="Subscribe.F_NOT_2.CNF" Destination="Subscribe.Sub0SubWrongNoRDs_.REQ" /></Request>
+WrongParameters;<Request ID="1,680" Action="CREATE"><Connection Source="Subscribe.Sub0SubWrongNoRDs_.CNF" Destination="Subscribe.SUB2.INIT" /></Request>
+WrongParameters;<Request ID="1,681" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1.OUT" Destination="Subscribe.Client1Sub.check" /></Request>
+WrongParameters;<Request ID="1,682" Action="CREATE"><Connection Source="Subscribe.F_NOT_1.OUT" Destination="Subscribe.Pub1Sub.check" /></Request>
+WrongParameters;<Request ID="1,683" Action="CREATE"><Connection Source="Subscribe.SER0.QO" Destination="Subscribe.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,684" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1.OUT" Destination="Subscribe.Server0Sub.check" /></Request>
+WrongParameters;<Request ID="1,685" Action="CREATE"><Connection Source="Subscribe.STRING2STRING_1.OUT" Destination="Subscribe.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,686" Action="CREATE"><Connection Source="Subscribe.PUB1.QO" Destination="Subscribe.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,687" Action="CREATE"><Connection Source="Subscribe.F_NOT.OUT" Destination="Subscribe.Sub1SubWrongNoRDs.check" /></Request>
+WrongParameters;<Request ID="1,688" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_1.OUT" Destination="Subscribe.Client0_1Sub.check" /></Request>
+WrongParameters;<Request ID="1,689" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2.OUT" Destination="Subscribe.Server1Sub.check" /></Request>
+WrongParameters;<Request ID="1,690" Action="CREATE"><Connection Source="Subscribe.CLI1.QO" Destination="Subscribe.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,691" Action="CREATE"><Connection Source="Subscribe.CLI01.QO" Destination="Subscribe.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,692" Action="CREATE"><Connection Source="Subscribe.STRING2STRING_1_1.OUT" Destination="Subscribe.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,693" Action="CREATE"><Connection Source="Subscribe.CLI1.RD_1" Destination="Subscribe.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,694" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_4.OUT" Destination="Subscribe.Client0Sub.check" /></Request>
+WrongParameters;<Request ID="1,695" Action="CREATE"><Connection Source="Subscribe.CLI0.QO" Destination="Subscribe.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,696" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_3.OUT" Destination="Subscribe.Client1_0Sub.check" /></Request>
+WrongParameters;<Request ID="1,697" Action="CREATE"><Connection Source="Subscribe.CLI10.QO" Destination="Subscribe.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,698" Action="CREATE"><Connection Source="Subscribe.SER1.QO" Destination="Subscribe.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,699" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2_1.OUT" Destination="Subscribe.Server0_1Sub.check" /></Request>
+WrongParameters;<Request ID="1,700" Action="CREATE"><Connection Source="Subscribe.CLI01.RD_1" Destination="Subscribe.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,701" Action="CREATE"><Connection Source="Subscribe.STRING2STRING_2.OUT" Destination="Subscribe.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,702" Action="CREATE"><Connection Source="Subscribe.STRING2STRING_2_1.OUT" Destination="Subscribe.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,703" Action="CREATE"><Connection Source="Subscribe.SER1.RD_1" Destination="Subscribe.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,704" Action="CREATE"><Connection Source="Subscribe.SER01.QO" Destination="Subscribe.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,705" Action="CREATE"><Connection Source="Subscribe.SER01.RD_1" Destination="Subscribe.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,706" Action="CREATE"><Connection Source="Subscribe.F_NOT_1_1_1_2_1_1.OUT" Destination="Subscribe.Server1_0Sub.check" /></Request>
+WrongParameters;<Request ID="1,707" Action="CREATE"><Connection Source="Subscribe.SER10.QO" Destination="Subscribe.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,708" Action="CREATE"><Connection Source="Subscribe.STRING2STRING_3.OUT" Destination="Subscribe.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,709" Action="CREATE"><Connection Source="Subscribe.SUB2.QO" Destination="Subscribe.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,710" Action="CREATE"><Connection Source="Subscribe.SUB2.RD_1" Destination="Subscribe.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,711" Action="CREATE"><Connection Source="Subscribe.SUB2.RD_2" Destination="Subscribe.STRING2STRING_4.IN" /></Request>
+WrongParameters;<Request ID="1,712" Action="CREATE"><Connection Source="Subscribe.SUB0.QO" Destination="Subscribe.F_NOT_2.IN" /></Request>
+WrongParameters;<Request ID="1,713" Action="CREATE"><Connection Source="Subscribe.F_NOT_2.OUT" Destination="Subscribe.Sub0SubWrongNoRDs_.check" /></Request>
+WrongParameters;<Request ID="1,714" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1.CNF" Destination="GUIDIdentifier.Client1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,715" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1.CNF" Destination="GUIDIdentifier.Pub1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,716" Action="CREATE"><Connection Source="GUIDIdentifier.Pub1GUID.CNF" Destination="GUIDIdentifier.SER0.INIT" /></Request>
+WrongParameters;<Request ID="1,717" Action="CREATE"><Connection Source="GUIDIdentifier.SER0.INITO" Destination="GUIDIdentifier.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,718" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1.CNF" Destination="GUIDIdentifier.Server0GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,719" Action="CREATE"><Connection Source="GUIDIdentifier.Sub1GUID.CNF" Destination="GUIDIdentifier.PUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,720" Action="CREATE"><Connection Source="GUIDIdentifier.PUB1.INITO" Destination="GUIDIdentifier.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,721" Action="CREATE"><Connection Source="GUIDIdentifier.SUB1.INITO" Destination="GUIDIdentifier.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,722" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT.CNF" Destination="GUIDIdentifier.Sub1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,723" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_1.CNF" Destination="GUIDIdentifier.Client0_1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,724" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2.CNF" Destination="GUIDIdentifier.Server1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,725" Action="CREATE"><Connection Source="GUIDIdentifier.CLI1.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,726" Action="CREATE"><Connection Source="GUIDIdentifier.CLI01.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,727" Action="CREATE"><Connection Source="GUIDIdentifier.CLI0.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_4.REQ" /></Request>
+WrongParameters;<Request ID="1,728" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_4.CNF" Destination="GUIDIdentifier.Client0GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,729" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_3.CNF" Destination="GUIDIdentifier.Client1_0GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,730" Action="CREATE"><Connection Source="GUIDIdentifier.CLI10.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_3.REQ" /></Request>
+WrongParameters;<Request ID="1,731" Action="CREATE"><Connection Source="GUIDIdentifier.SER1.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_2.REQ" /></Request>
+WrongParameters;<Request ID="1,732" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2_1.CNF" Destination="GUIDIdentifier.Server0_1GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,733" Action="CREATE"><Connection Source="GUIDIdentifier.SER01.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_2_1.REQ" /></Request>
+WrongParameters;<Request ID="1,734" Action="CREATE"><Connection Source="GUIDIdentifier.Server0GUID.CNF" Destination="GUIDIdentifier.CLI0.INIT" /></Request>
+WrongParameters;<Request ID="1,735" Action="CREATE"><Connection Source="GUIDIdentifier.Client0GUID.CNF" Destination="GUIDIdentifier.CLI1.INIT" /></Request>
+WrongParameters;<Request ID="1,736" Action="CREATE"><Connection Source="GUIDIdentifier.Client1GUID.CNF" Destination="GUIDIdentifier.CLI01.INIT" /></Request>
+WrongParameters;<Request ID="1,737" Action="CREATE"><Connection Source="GUIDIdentifier.Client0_1GUID.CNF" Destination="GUIDIdentifier.CLI10.INIT" /></Request>
+WrongParameters;<Request ID="1,738" Action="CREATE"><Connection Source="GUIDIdentifier.Client1_0GUID.CNF" Destination="GUIDIdentifier.SER1.INIT" /></Request>
+WrongParameters;<Request ID="1,739" Action="CREATE"><Connection Source="GUIDIdentifier.Server1GUID.CNF" Destination="GUIDIdentifier.SER01.INIT" /></Request>
+WrongParameters;<Request ID="1,740" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2_1_1.CNF" Destination="GUIDIdentifier.Server1_0GUID.REQ" /></Request>
+WrongParameters;<Request ID="1,741" Action="CREATE"><Connection Source="GUIDIdentifier.Server1_0GUID.CNF" Destination="W2W.REQ" /></Request>
+WrongParameters;<Request ID="1,742" Action="CREATE"><Connection Source="GUIDIdentifier.Server0_1GUID.CNF" Destination="GUIDIdentifier.SER10.INIT" /></Request>
+WrongParameters;<Request ID="1,743" Action="CREATE"><Connection Source="GUIDIdentifier.SER10.INITO" Destination="GUIDIdentifier.F_NOT_1_1_1_2_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,744" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1.OUT" Destination="GUIDIdentifier.Client1GUID.check" /></Request>
+WrongParameters;<Request ID="1,745" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1.OUT" Destination="GUIDIdentifier.Pub1GUID.check" /></Request>
+WrongParameters;<Request ID="1,746" Action="CREATE"><Connection Source="GUIDIdentifier.SER0.QO" Destination="GUIDIdentifier.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,747" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1.OUT" Destination="GUIDIdentifier.Server0GUID.check" /></Request>
+WrongParameters;<Request ID="1,748" Action="CREATE"><Connection Source="GUIDIdentifier.STRING2STRING_1.OUT" Destination="GUIDIdentifier.PUB1.SD_1" /></Request>
+WrongParameters;<Request ID="1,749" Action="CREATE"><Connection Source="GUIDIdentifier.PUB1.QO" Destination="GUIDIdentifier.F_NOT_1.IN" /></Request>
+WrongParameters;<Request ID="1,750" Action="CREATE"><Connection Source="GUIDIdentifier.SUB1.QO" Destination="GUIDIdentifier.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,751" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT.OUT" Destination="GUIDIdentifier.Sub1GUID.check" /></Request>
+WrongParameters;<Request ID="1,752" Action="CREATE"><Connection Source="GUIDIdentifier.SUB1.RD_1" Destination="GUIDIdentifier.STRING2STRING.IN" /></Request>
+WrongParameters;<Request ID="1,753" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_1.OUT" Destination="GUIDIdentifier.Client0_1GUID.check" /></Request>
+WrongParameters;<Request ID="1,754" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2.OUT" Destination="GUIDIdentifier.Server1GUID.check" /></Request>
+WrongParameters;<Request ID="1,755" Action="CREATE"><Connection Source="GUIDIdentifier.CLI1.QO" Destination="GUIDIdentifier.F_NOT_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,756" Action="CREATE"><Connection Source="GUIDIdentifier.CLI01.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,757" Action="CREATE"><Connection Source="GUIDIdentifier.STRING2STRING_1_1.OUT" Destination="GUIDIdentifier.CLI1.SD_1" /></Request>
+WrongParameters;<Request ID="1,758" Action="CREATE"><Connection Source="GUIDIdentifier.CLI1.RD_1" Destination="GUIDIdentifier.STRING2STRING_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,759" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_4.OUT" Destination="GUIDIdentifier.Client0GUID.check" /></Request>
+WrongParameters;<Request ID="1,760" Action="CREATE"><Connection Source="GUIDIdentifier.CLI0.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_4.IN" /></Request>
+WrongParameters;<Request ID="1,761" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_3.OUT" Destination="GUIDIdentifier.Client1_0GUID.check" /></Request>
+WrongParameters;<Request ID="1,762" Action="CREATE"><Connection Source="GUIDIdentifier.CLI10.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_3.IN" /></Request>
+WrongParameters;<Request ID="1,763" Action="CREATE"><Connection Source="GUIDIdentifier.SER1.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_2.IN" /></Request>
+WrongParameters;<Request ID="1,764" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2_1.OUT" Destination="GUIDIdentifier.Server0_1GUID.check" /></Request>
+WrongParameters;<Request ID="1,765" Action="CREATE"><Connection Source="GUIDIdentifier.CLI01.RD_1" Destination="GUIDIdentifier.STRING2STRING_2.IN" /></Request>
+WrongParameters;<Request ID="1,766" Action="CREATE"><Connection Source="GUIDIdentifier.STRING2STRING_2.OUT" Destination="GUIDIdentifier.CLI10.SD_1" /></Request>
+WrongParameters;<Request ID="1,767" Action="CREATE"><Connection Source="GUIDIdentifier.STRING2STRING_2_1.OUT" Destination="GUIDIdentifier.SER1.SD_1" /></Request>
+WrongParameters;<Request ID="1,768" Action="CREATE"><Connection Source="GUIDIdentifier.SER1.RD_1" Destination="GUIDIdentifier.STRING2STRING_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,769" Action="CREATE"><Connection Source="GUIDIdentifier.SER01.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_2_1.IN" /></Request>
+WrongParameters;<Request ID="1,770" Action="CREATE"><Connection Source="GUIDIdentifier.SER01.RD_1" Destination="GUIDIdentifier.STRING2STRING_3.IN" /></Request>
+WrongParameters;<Request ID="1,771" Action="CREATE"><Connection Source="GUIDIdentifier.F_NOT_1_1_1_2_1_1.OUT" Destination="GUIDIdentifier.Server1_0GUID.check" /></Request>
+WrongParameters;<Request ID="1,772" Action="CREATE"><Connection Source="GUIDIdentifier.SER10.QO" Destination="GUIDIdentifier.F_NOT_1_1_1_2_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,773" Action="CREATE"><Connection Source="GUIDIdentifier.STRING2STRING_3.OUT" Destination="GUIDIdentifier.SER10.SD_1" /></Request>
+WrongParameters;<Request ID="1,774" Action="CREATE"><Connection Source="createObject.F_NOT.CNF" Destination="createObject.createnoPublishWrongPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,775" Action="CREATE"><Connection Source="createObject.F_NOT_1.CNF" Destination="createObject.createnoPublishGoodPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,776" Action="CREATE"><Connection Source="createObject.F_NOT_2.CNF" Destination="createObject.createnoPublishGoodPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,777" Action="CREATE"><Connection Source="createObject.F_NOT_3.CNF" Destination="createObject.createnoPublishWrongPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,778" Action="CREATE"><Connection Source="createObject.F_NOT_4.CNF" Destination="createObject.createpublishWrongPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,779" Action="CREATE"><Connection Source="createObject.F_NOT_3_1.CNF" Destination="createObject.createpublishWrongPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,780" Action="CREATE"><Connection Source="createObject.F_NOT_1_1.CNF" Destination="createObject.createpublishGoodPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,781" Action="CREATE"><Connection Source="createObject.SERVER_1_0.INITO" Destination="createObject.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,782" Action="CREATE"><Connection Source="createObject.createnoPublishWrongPairsGoodSD.CNF" Destination="createObject.SERVER_1_0_2.INIT" /></Request>
+WrongParameters;<Request ID="1,783" Action="CREATE"><Connection Source="createObject.SERVER_1_0_2.INITO" Destination="createObject.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,784" Action="CREATE"><Connection Source="createObject.createnoPublishWrongPairsBadSD.CNF" Destination="createObject.SERVER_1_0_1.INIT" /></Request>
+WrongParameters;<Request ID="1,785" Action="CREATE"><Connection Source="createObject.SERVER_1_0_1.INITO" Destination="createObject.F_NOT_3.REQ" /></Request>
+WrongParameters;<Request ID="1,786" Action="CREATE"><Connection Source="createObject.createnoPublishGoodPairsBadSD.CNF" Destination="createObject.SERVER_1_0_3.INIT" /></Request>
+WrongParameters;<Request ID="1,787" Action="CREATE"><Connection Source="createObject.SERVER_1_0_3.INITO" Destination="createObject.F_NOT_2.REQ" /></Request>
+WrongParameters;<Request ID="1,788" Action="CREATE"><Connection Source="createObject.createpublishGoodPairsBadSD.CNF" Destination="deleteObject.SERVER_1_0.INIT" /></Request>
+WrongParameters;<Request ID="1,789" Action="CREATE"><Connection Source="createObject.createnoPublishGoodPairsGoodSD.CNF" Destination="createObject.PUBLISH_0_1.INIT" /></Request>
+WrongParameters;<Request ID="1,790" Action="CREATE"><Connection Source="createObject.PUBLISH_0_1.INITO" Destination="createObject.F_NOT_4.REQ" /></Request>
+WrongParameters;<Request ID="1,791" Action="CREATE"><Connection Source="createObject.createpublishWrongPairsBadSD.CNF" Destination="createObject.PUBLISH_1.INIT" /></Request>
+WrongParameters;<Request ID="1,792" Action="CREATE"><Connection Source="createObject.PUBLISH_1.INITO" Destination="createObject.F_NOT_3_1.REQ" /></Request>
+WrongParameters;<Request ID="1,793" Action="CREATE"><Connection Source="createObject.createpublishWrongPairsGoodSD.CNF" Destination="createObject.PUBLISH_0.INIT" /></Request>
+WrongParameters;<Request ID="1,794" Action="CREATE"><Connection Source="createObject.PUBLISH_0.INITO" Destination="createObject.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,795" Action="CREATE"><Connection Source="createObject.F_NOT.OUT" Destination="createObject.createnoPublishWrongPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,796" Action="CREATE"><Connection Source="createObject.F_NOT_1.OUT" Destination="createObject.createnoPublishGoodPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,797" Action="CREATE"><Connection Source="createObject.F_NOT_2.OUT" Destination="createObject.createnoPublishGoodPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,798" Action="CREATE"><Connection Source="createObject.F_NOT_3.OUT" Destination="createObject.createnoPublishWrongPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,799" Action="CREATE"><Connection Source="createObject.F_NOT_4.OUT" Destination="createObject.createpublishWrongPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,800" Action="CREATE"><Connection Source="createObject.F_NOT_1_1.OUT" Destination="createObject.createpublishGoodPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,801" Action="CREATE"><Connection Source="createObject.F_NOT_3_1.OUT" Destination="createObject.createpublishWrongPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,802" Action="CREATE"><Connection Source="createObject.SERVER_1_0.QO" Destination="createObject.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,803" Action="CREATE"><Connection Source="createObject.BOOL2BOOL.OUT" Destination="createObject.SERVER_1_0.SD_1" /></Request>
+WrongParameters;<Request ID="1,804" Action="CREATE"><Connection Source="createObject.BOOL2BOOL.OUT" Destination="createObject.SERVER_1_0_2.SD_1" /></Request>
+WrongParameters;<Request ID="1,805" Action="CREATE"><Connection Source="createObject.SERVER_1_0_3.QO" Destination="createObject.F_NOT_2.IN" /></Request>
+WrongParameters;<Request ID="1,806" Action="CREATE"><Connection Source="createObject.PUBLISH_0_1.QO" Destination="createObject.F_NOT_4.IN" /></Request>
+WrongParameters;<Request ID="1,807" Action="CREATE"><Connection Source="createObject.BOOL2BOOL.OUT" Destination="createObject.PUBLISH_0_1.SD_1" /></Request>
+WrongParameters;<Request ID="1,808" Action="CREATE"><Connection Source="createObject.PUBLISH_1.QO" Destination="createObject.F_NOT_3_1.IN" /></Request>
+WrongParameters;<Request ID="1,809" Action="CREATE"><Connection Source="createObject.PUBLISH_0.QO" Destination="createObject.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,810" Action="CREATE"><Connection Source="createObject.BOOL2BOOL.OUT" Destination="createObject.PUBLISH_0.SD_1" /></Request>
+WrongParameters;<Request ID="1,811" Action="CREATE"><Connection Source="deleteObject.F_NOT.CNF" Destination="deleteObject.deletenoPublishWrongPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,812" Action="CREATE"><Connection Source="deleteObject.F_NOT_1.CNF" Destination="deleteObject.deletenoPublishGoodPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,813" Action="CREATE"><Connection Source="deleteObject.F_NOT_2.CNF" Destination="deleteObject.deletenoPublishGoodPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,814" Action="CREATE"><Connection Source="deleteObject.F_NOT_3.CNF" Destination="deleteObject.deletenoPublishWrongPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,815" Action="CREATE"><Connection Source="deleteObject.F_NOT_4.CNF" Destination="deleteObject.deletepublishWrongPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,816" Action="CREATE"><Connection Source="deleteObject.F_NOT_3_1.CNF" Destination="deleteObject.deletepublishWrongPairsGoodSD.REQ" /></Request>
+WrongParameters;<Request ID="1,817" Action="CREATE"><Connection Source="deleteObject.F_NOT_1_1.CNF" Destination="deleteObject.deletepublishGoodPairsBadSD.REQ" /></Request>
+WrongParameters;<Request ID="1,818" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0.INITO" Destination="deleteObject.F_NOT.REQ" /></Request>
+WrongParameters;<Request ID="1,819" Action="CREATE"><Connection Source="deleteObject.deletenoPublishWrongPairsGoodSD.CNF" Destination="deleteObject.SERVER_1_0_2.INIT" /></Request>
+WrongParameters;<Request ID="1,820" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0_2.INITO" Destination="deleteObject.F_NOT_1.REQ" /></Request>
+WrongParameters;<Request ID="1,821" Action="CREATE"><Connection Source="deleteObject.deletenoPublishWrongPairsBadSD.CNF" Destination="deleteObject.SERVER_1_0_1.INIT" /></Request>
+WrongParameters;<Request ID="1,822" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0_1.INITO" Destination="deleteObject.F_NOT_3.REQ" /></Request>
+WrongParameters;<Request ID="1,823" Action="CREATE"><Connection Source="deleteObject.deletenoPublishGoodPairsBadSD.CNF" Destination="deleteObject.SERVER_1_0_3.INIT" /></Request>
+WrongParameters;<Request ID="1,824" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0_3.INITO" Destination="deleteObject.F_NOT_2.REQ" /></Request>
+WrongParameters;<Request ID="1,825" Action="CREATE"><Connection Source="deleteObject.deletepublishGoodPairsBadSD.CNF" Destination="STEST_END.REQ" /></Request>
+WrongParameters;<Request ID="1,826" Action="CREATE"><Connection Source="deleteObject.deletenoPublishGoodPairsGoodSD.CNF" Destination="deleteObject.PUBLISH_0_1.INIT" /></Request>
+WrongParameters;<Request ID="1,827" Action="CREATE"><Connection Source="deleteObject.PUBLISH_0_1.INITO" Destination="deleteObject.F_NOT_4.REQ" /></Request>
+WrongParameters;<Request ID="1,828" Action="CREATE"><Connection Source="deleteObject.deletepublishWrongPairsBadSD.CNF" Destination="deleteObject.PUBLISH_1.INIT" /></Request>
+WrongParameters;<Request ID="1,829" Action="CREATE"><Connection Source="deleteObject.PUBLISH_1.INITO" Destination="deleteObject.F_NOT_3_1.REQ" /></Request>
+WrongParameters;<Request ID="1,830" Action="CREATE"><Connection Source="deleteObject.deletepublishWrongPairsGoodSD.CNF" Destination="deleteObject.PUBLISH_0.INIT" /></Request>
+WrongParameters;<Request ID="1,831" Action="CREATE"><Connection Source="deleteObject.PUBLISH_0.INITO" Destination="deleteObject.F_NOT_1_1.REQ" /></Request>
+WrongParameters;<Request ID="1,832" Action="CREATE"><Connection Source="deleteObject.F_NOT.OUT" Destination="deleteObject.deletenoPublishWrongPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,833" Action="CREATE"><Connection Source="deleteObject.F_NOT_1.OUT" Destination="deleteObject.deletenoPublishGoodPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,834" Action="CREATE"><Connection Source="deleteObject.F_NOT_2.OUT" Destination="deleteObject.deletenoPublishGoodPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,835" Action="CREATE"><Connection Source="deleteObject.F_NOT_3.OUT" Destination="deleteObject.deletenoPublishWrongPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,836" Action="CREATE"><Connection Source="deleteObject.F_NOT_4.OUT" Destination="deleteObject.deletepublishWrongPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,837" Action="CREATE"><Connection Source="deleteObject.F_NOT_1_1.OUT" Destination="deleteObject.deletepublishGoodPairsBadSD.check" /></Request>
+WrongParameters;<Request ID="1,838" Action="CREATE"><Connection Source="deleteObject.F_NOT_3_1.OUT" Destination="deleteObject.deletepublishWrongPairsGoodSD.check" /></Request>
+WrongParameters;<Request ID="1,839" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0.QO" Destination="deleteObject.F_NOT.IN" /></Request>
+WrongParameters;<Request ID="1,840" Action="CREATE"><Connection Source="deleteObject.BOOL2BOOL.OUT" Destination="deleteObject.SERVER_1_0.SD_1" /></Request>
+WrongParameters;<Request ID="1,841" Action="CREATE"><Connection Source="deleteObject.BOOL2BOOL.OUT" Destination="deleteObject.SERVER_1_0_2.SD_1" /></Request>
+WrongParameters;<Request ID="1,842" Action="CREATE"><Connection Source="deleteObject.SERVER_1_0_3.QO" Destination="deleteObject.F_NOT_2.IN" /></Request>
+WrongParameters;<Request ID="1,843" Action="CREATE"><Connection Source="deleteObject.PUBLISH_0_1.QO" Destination="deleteObject.F_NOT_4.IN" /></Request>
+WrongParameters;<Request ID="1,844" Action="CREATE"><Connection Source="deleteObject.BOOL2BOOL.OUT" Destination="deleteObject.PUBLISH_0_1.SD_1" /></Request>
+WrongParameters;<Request ID="1,845" Action="CREATE"><Connection Source="deleteObject.PUBLISH_1.QO" Destination="deleteObject.F_NOT_3_1.IN" /></Request>
+WrongParameters;<Request ID="1,846" Action="CREATE"><Connection Source="deleteObject.PUBLISH_0.QO" Destination="deleteObject.F_NOT_1_1.IN" /></Request>
+WrongParameters;<Request ID="1,847" Action="CREATE"><Connection Source="deleteObject.BOOL2BOOL.OUT" Destination="deleteObject.PUBLISH_0.SD_1" /></Request>
+WrongParameters;<Request ID="1,848" Action="CREATE"><Connection Source="W2W_1.CNF" Destination="emptyAction.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,849" Action="CREATE"><Connection Source="W2W_1_1.CNF" Destination="NoExistingAction.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,850" Action="CREATE"><Connection Source="W2W_1_1_4.CNF" Destination="WrongIdentifier.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,851" Action="CREATE"><Connection Source="W2W_1_1_3.CNF" Destination="UnknownIdentifier.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,852" Action="CREATE"><Connection Source="W2W_1_1_2.CNF" Destination="wrongNodeId.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,853" Action="CREATE"><Connection Source="W2W_1_1_1.CNF" Destination="wrongPair.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,854" Action="CREATE"><Connection Source="W2W.CNF" Destination="NoSemicolon.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,855" Action="CREATE"><Connection Source="W2W_1_1_4_2.CNF" Destination="RemoteWithoutBrowseNameNorNodeId.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,856" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.CNF" Destination="RemoteRead.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,857" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.CNF" Destination="LocalRead.SUB0.INIT" /></Request>
+WrongParameters;<Request ID="1,858" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.CNF" Destination="RemoteWrite.SUB2.INIT" /></Request>
+WrongParameters;<Request ID="1,859" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.CNF" Destination="LocalWrite.SUB2.INIT" /></Request>
+WrongParameters;<Request ID="1,860" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.CNF" Destination="CreateMethod.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,861" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.CNF" Destination="CallMethod.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,862" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.CNF" Destination="Subscribe.SUB0.INIT" /></Request>
+WrongParameters;<Request ID="1,863" Action="CREATE"><Connection Source="W2W_2.CNF" Destination="GUIDIdentifier.SUB1.INIT" /></Request>
+WrongParameters;<Request ID="1,864" Action="CREATE"><Connection Source="START.WARM" Destination="W2W_2.REQ" /></Request>
+WrongParameters;<Request ID="1,865" Action="CREATE"><Connection Source="START.COLD" Destination="W2W_2.REQ" /></Request>
+WrongParameters;<Request ID="1,866" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,867" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,868" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,869" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,870" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,871" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,872" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,873" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,874" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,875" Action="CREATE"><Connection Source="W2W_1_1_4.OUT" Destination="WrongIdentifier.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,876" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,877" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,878" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,879" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,880" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,881" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,882" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,883" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,884" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,885" Action="CREATE"><Connection Source="W2W_1_1_3.OUT" Destination="UnknownIdentifier.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,886" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,887" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,888" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,889" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,890" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,891" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,892" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,893" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,894" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,895" Action="CREATE"><Connection Source="W2W_1_1_2.OUT" Destination="wrongNodeId.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,896" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,897" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,898" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,899" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,900" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,901" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,902" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,903" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,904" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,905" Action="CREATE"><Connection Source="W2W_1_1_1.OUT" Destination="wrongPair.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,906" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,907" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,908" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,909" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,910" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,911" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,912" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,913" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,914" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,915" Action="CREATE"><Connection Source="W2W_1_1.OUT" Destination="NoExistingAction.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,916" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,917" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,918" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,919" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,920" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,921" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,922" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,923" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,924" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,925" Action="CREATE"><Connection Source="W2W_1.OUT" Destination="emptyAction.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,926" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,927" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,928" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,929" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,930" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,931" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,932" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,933" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,934" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,935" Action="CREATE"><Connection Source="W2W.OUT" Destination="NoSemicolon.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,936" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,937" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,938" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,939" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,940" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,941" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,942" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,943" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,944" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1.OUT" Destination="RemoteRead.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,945" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,946" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,947" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,948" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,949" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,950" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,951" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,952" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,953" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,954" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SUB2.ID" /></Request>
+WrongParameters;<Request ID="1,955" Action="CREATE"><Connection Source="W2W_1_1_4_2_1.OUT" Destination="LocalRead.SUB0.ID" /></Request>
+WrongParameters;<Request ID="1,956" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,957" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,958" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,959" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,960" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,961" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,962" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.SUB2.ID" /></Request>
+WrongParameters;<Request ID="1,963" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.PUB0.ID" /></Request>
+WrongParameters;<Request ID="1,964" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.CLI2.ID" /></Request>
+WrongParameters;<Request ID="1,965" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1.OUT" Destination="RemoteWrite.CLI3.ID" /></Request>
+WrongParameters;<Request ID="1,966" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,967" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,968" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,969" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,970" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,971" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,972" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,973" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,974" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.SUB2.ID" /></Request>
+WrongParameters;<Request ID="1,975" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,976" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1.OUT" Destination="LocalWrite.PUB0.ID" /></Request>
+WrongParameters;<Request ID="1,977" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,978" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,979" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,980" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,981" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,982" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1.OUT" Destination="CreateMethod.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,983" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.SUB1.ID" /></Request>
+WrongParameters;<Request ID="1,984" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,985" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,986" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,987" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,988" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1.OUT" Destination="CallMethod.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,989" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.PUB1.ID" /></Request>
+WrongParameters;<Request ID="1,990" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SER0.ID" /></Request>
+WrongParameters;<Request ID="1,991" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.CLI0.ID" /></Request>
+WrongParameters;<Request ID="1,992" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.CLI1.ID" /></Request>
+WrongParameters;<Request ID="1,993" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.CLI01.ID" /></Request>
+WrongParameters;<Request ID="1,994" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.CLI10.ID" /></Request>
+WrongParameters;<Request ID="1,995" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SER01.ID" /></Request>
+WrongParameters;<Request ID="1,996" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SER1.ID" /></Request>
+WrongParameters;<Request ID="1,997" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SER10.ID" /></Request>
+WrongParameters;<Request ID="1,998" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SUB2.ID" /></Request>
+WrongParameters;<Request ID="1,999" Action="CREATE"><Connection Source="W2W_1_1_4_2_1_1_1_1_1_1_1.OUT" Destination="Subscribe.SUB0.ID" /></Request>
+WrongParameters;<Request ID="2,000" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.SUB1.ID" /></Request>
+WrongParameters;<Request ID="2,001" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.PUB1.ID" /></Request>
+WrongParameters;<Request ID="2,002" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.SER0.ID" /></Request>
+WrongParameters;<Request ID="2,003" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.CLI0.ID" /></Request>
+WrongParameters;<Request ID="2,004" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.CLI1.ID" /></Request>
+WrongParameters;<Request ID="2,005" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.CLI01.ID" /></Request>
+WrongParameters;<Request ID="2,006" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.CLI10.ID" /></Request>
+WrongParameters;<Request ID="2,007" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.SER01.ID" /></Request>
+WrongParameters;<Request ID="2,008" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.SER1.ID" /></Request>
+WrongParameters;<Request ID="2,009" Action="CREATE"><Connection Source="W2W_2.OUT" Destination="GUIDIdentifier.SER10.ID" /></Request>
+WrongParameters;<Request ID="2,010" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SUB1.ID" /></Request>
+WrongParameters;<Request ID="2,011" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.PUB1.ID" /></Request>
+WrongParameters;<Request ID="2,012" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER0.ID" /></Request>
+WrongParameters;<Request ID="2,013" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI0.ID" /></Request>
+WrongParameters;<Request ID="2,014" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI1.ID" /></Request>
+WrongParameters;<Request ID="2,015" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI01.ID" /></Request>
+WrongParameters;<Request ID="2,016" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.CLI10.ID" /></Request>
+WrongParameters;<Request ID="2,017" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER01.ID" /></Request>
+WrongParameters;<Request ID="2,018" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER1.ID" /></Request>
+WrongParameters;<Request ID="2,019" Action="CREATE"><Connection Source="W2W_1_1_4_2.OUT" Destination="RemoteWithoutBrowseNameNorNodeId.SER10.ID" /></Request>
+WrongParameters;<Request ID="2,020" Action="START"/>
diff --git a/systemtests/src/modules/utils/CMakeLists.txt b/systemtests/src/modules/utils/CMakeLists.txt
new file mode 100644
index 0000000..94ffe5f
--- /dev/null
+++ b/systemtests/src/modules/utils/CMakeLists.txt
@@ -0,0 +1,13 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+add_subdirectory(csvWriter)
diff --git a/systemtests/src/modules/utils/csvWriter/CMakeLists.txt b/systemtests/src/modules/utils/csvWriter/CMakeLists.txt
new file mode 100644
index 0000000..bb9fd4a
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/CMakeLists.txt
@@ -0,0 +1,56 @@
+#*******************************************************************************
+# Copyright (c) 2019 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+#############################################################################
+# Tests for the the csv writer FBs
+#############################################################################
+
+FUNCTION(ADD_CSVWRITE_TEST test_name bootFile csvFileName csvFileShouldExist expectedContent isHard timeout)
+
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/csvWritertTest.cmake" scriptFile)
+ STRING(REPLACE "\\" "\\\\" scriptFile ${scriptFile})
+
+ FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${bootFile}" file_str)
+ STRING(REPLACE "\\" "\\\\" file_str ${file_str})
+
+ ADD_TEST(NAME ${test_name} COMMAND ${CMAKE_COMMAND}
+ -DCMD=$<TARGET_FILE:forte>
+ -DBOOT=${file_str}
+ -DCSV_FILE=${csvFileName}
+ -DCSVFILESHOULDEXIST=${csvFileShouldExist}
+ -DEXPECTED_CONTENT=${expectedContent}
+ -P ${scriptFile})
+
+ set_tests_properties (${test_name} PROPERTIES TIMEOUT ${timeout})
+
+ if(${isHard})
+ SET_TESTS_PROPERTIES(${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR: T")
+ else()
+ SET_TESTS_PROPERTIES(${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_CONDITION_FAILED")
+ endif()
+
+ENDFUNCTION(ADD_CSVWRITE_TEST)
+
+ADD_CSVWRITE_TEST(Test_CSV_Writer_normalExecution_hard normalExecution.fboot "csvWriteTest.csv" 1 "'csvFirstValue'\; \n" 1 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_openAndNoClose_hard openAndNoClose.fboot "csvWriteTest.csv" 1 "" 1 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_doubleInit_soft doubleInit.fboot "csvWriteTest.csv" 1 "" 0 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_initDeinitNoWrite_hard initDeinitNoWrite.fboot "csvWriteTest.csv" 1 "" 1 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_closeNotOpened_soft closeNotOpened.fboot "csvWriteTest.csv" 0 "" 0 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_writeQIFalse_soft writeQIFalse.fboot "csvWriteTest.csv" 1 "" 0 5)
+ADD_CSVWRITE_TEST(Test_CSV_Writer_writeWithoutInit_soft writeWithoutInit.fboot "csvWriteTest.csv" 0 "" 0 5)
+
+ADD_CSVWRITE_TEST(Test_CSV_Writer_normalExecutionMultiple_hard normalExecutionMultiple.fboot "csvWriteTest.csv" 1 "'csvFirstValue'\; TRUE\; 1\; \n'csvFirstValue'\; FALSE\; 2\; \n" 1 5)
+
+ADD_CSVWRITE_TEST(Test_CSV_Writer_noNameFile_soft writeWithoutInit.fboot "noNameFile.csv" 0 "" 0 5)
+
+
+
diff --git a/systemtests/src/modules/utils/csvWriter/closeNotOpened.fboot b/systemtests/src/modules/utils/csvWriter/closeNotOpened.fboot
new file mode 100644
index 0000000..e5ba42e
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/closeNotOpened.fboot
@@ -0,0 +1,16 @@
+;<Request ID="1" Action="CREATE"><FB Name="closeNotOpened" Type="EMB_RES" /></Request>
+closeNotOpened;<Request ID="2" Action="CREATE"><FB Name="closeNotOpenedFile.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+closeNotOpened;<Request ID="3" Action="WRITE"><Connection Source="0" Destination="closeNotOpenedFile.CSV_WRITER_1.QI" /></Request>
+closeNotOpened;<Request ID="4" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="closeNotOpenedFile.CSV_WRITER_1.FILE_NAME" /></Request>
+closeNotOpened;<Request ID="5" Action="CREATE"><FB Name="closeNotOpenedFile.DeInitTest" Type="TEST_CONDITION" /></Request>
+closeNotOpened;<Request ID="6" Action="CREATE"><FB Name="closeNotOpenedFile.endNormal" Type="STEST_END" /></Request>
+closeNotOpened;<Request ID="7" Action="CREATE"><FB Name="closeNotOpenedFile.F_NOT" Type="F_NOT" /></Request>
+closeNotOpened;<Request ID="8" Action="CREATE"><FB Name="closeNotOpenedFile.STEST_END" Type="STEST_END" /></Request>
+closeNotOpened;<Request ID="9" Action="CREATE"><Connection Source="closeNotOpenedFile.F_NOT.CNF" Destination="closeNotOpenedFile.DeInitTest.REQ" /></Request>
+closeNotOpened;<Request ID="10" Action="CREATE"><Connection Source="closeNotOpenedFile.CSV_WRITER_1.INITO" Destination="closeNotOpenedFile.F_NOT.REQ" /></Request>
+closeNotOpened;<Request ID="11" Action="CREATE"><Connection Source="closeNotOpenedFile.DeInitTest.CNF" Destination="closeNotOpenedFile.STEST_END.REQ" /></Request>
+closeNotOpened;<Request ID="12" Action="CREATE"><Connection Source="closeNotOpenedFile.F_NOT.OUT" Destination="closeNotOpenedFile.DeInitTest.check" /></Request>
+closeNotOpened;<Request ID="13" Action="CREATE"><Connection Source="closeNotOpenedFile.CSV_WRITER_1.QO" Destination="closeNotOpenedFile.F_NOT.IN" /></Request>
+closeNotOpened;<Request ID="14" Action="CREATE"><Connection Source="START.COLD" Destination="closeNotOpenedFile.CSV_WRITER_1.INIT" /></Request>
+closeNotOpened;<Request ID="15" Action="CREATE"><Connection Source="START.WARM" Destination="closeNotOpenedFile.CSV_WRITER_1.INIT" /></Request>
+closeNotOpened;<Request ID="16" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/csvWritertTest.cmake b/systemtests/src/modules/utils/csvWriter/csvWritertTest.cmake
new file mode 100644
index 0000000..1ea7168
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/csvWritertTest.cmake
@@ -0,0 +1,29 @@
+set(ARGS_LIST "-f;${BOOT}")
+
+#remove file
+file(REMOVE "${CSV_FILE}")
+
+execute_process(COMMAND ${CMD} ${ARGS_LIST}
+ RESULT_VARIABLE result)
+
+if(${result})
+ message("TEST_CONDITION_FAILED | ERROR: T: The result of the pipe was ${result}")
+endif(${result})
+
+if(${CSVFILESHOULDEXIST})
+ if(NOT EXISTS "${CSV_FILE}")
+ message("TEST_CONDITION_FAILED | ERROR: T: The file ${CSV_FILE} should have existed but it's not there\n")
+ else(NOT EXISTS "${CSV_FILE}")
+ file(READ "${CSV_FILE}" REAL_CONTENT)
+ if(NOT "${EXPECTED_CONTENT}" STREQUAL "${REAL_CONTENT}")
+ message("TEST_CONDITION_FAILED | ERROR: T: The expected content \n\n${EXPECTED_CONTENT}\n\nis not same as the real one \n\n${REAL_CONTENT}")
+ endif(NOT "${EXPECTED_CONTENT}" STREQUAL "${REAL_CONTENT}")
+ endif(NOT EXISTS "${CSV_FILE}")
+else(${CSVFILESHOULDEXIST})
+ if(EXISTS "${CSV_FILE}")
+ message("TEST_CONDITION_FAILED | ERROR: T: The file ${CSV_FILE} should have not existed but it's there\n")
+ endif(EXISTS "${CSV_FILE}")
+endif(${CSVFILESHOULDEXIST})
+
+
+
diff --git a/systemtests/src/modules/utils/csvWriter/doubleInit.fboot b/systemtests/src/modules/utils/csvWriter/doubleInit.fboot
new file mode 100644
index 0000000..d5b0073
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/doubleInit.fboot
@@ -0,0 +1,24 @@
+;<Request ID="1" Action="CREATE"><FB Name="doubleInit" Type="EMB_RES" /></Request>
+doubleInit;<Request ID="2" Action="CREATE"><FB Name="DoubleInit.F_NOT_1" Type="F_NOT" /></Request>
+doubleInit;<Request ID="3" Action="CREATE"><FB Name="DoubleInit.E_SR_1" Type="E_SR" /></Request>
+doubleInit;<Request ID="4" Action="CREATE"><FB Name="DoubleInit.DoubleInit1" Type="TEST_CONDITION" /></Request>
+doubleInit;<Request ID="5" Action="CREATE"><FB Name="DoubleInit.CSV_WRITER_1_1" Type="CSV_WRITER_1" /></Request>
+doubleInit;<Request ID="6" Action="WRITE"><Connection Source="1" Destination="DoubleInit.CSV_WRITER_1_1.QI" /></Request>
+doubleInit;<Request ID="7" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="DoubleInit.CSV_WRITER_1_1.FILE_NAME" /></Request>
+doubleInit;<Request ID="8" Action="CREATE"><FB Name="DoubleInit.E_SWITCH_1" Type="E_SWITCH" /></Request>
+doubleInit;<Request ID="9" Action="CREATE"><FB Name="DoubleInit.endNormal_1" Type="STEST_END" /></Request>
+doubleInit;<Request ID="10" Action="CREATE"><FB Name="DoubleInit.DoubleInit2" Type="TEST_CONDITION" /></Request>
+doubleInit;<Request ID="11" Action="CREATE"><Connection Source="DoubleInit.E_SWITCH_1.EO0" Destination="DoubleInit.F_NOT_1.REQ" /></Request>
+doubleInit;<Request ID="12" Action="CREATE"><Connection Source="DoubleInit.F_NOT_1.CNF" Destination="DoubleInit.DoubleInit2.REQ" /></Request>
+doubleInit;<Request ID="13" Action="CREATE"><Connection Source="DoubleInit.DoubleInit1.CNF" Destination="DoubleInit.E_SR_1.R" /></Request>
+doubleInit;<Request ID="14" Action="CREATE"><Connection Source="DoubleInit.E_SR_1.EO" Destination="DoubleInit.CSV_WRITER_1_1.INIT" /></Request>
+doubleInit;<Request ID="15" Action="CREATE"><Connection Source="DoubleInit.E_SWITCH_1.EO1" Destination="DoubleInit.DoubleInit1.REQ" /></Request>
+doubleInit;<Request ID="16" Action="CREATE"><Connection Source="DoubleInit.CSV_WRITER_1_1.INITO" Destination="DoubleInit.E_SWITCH_1.EI" /></Request>
+doubleInit;<Request ID="17" Action="CREATE"><Connection Source="DoubleInit.DoubleInit2.CNF" Destination="DoubleInit.endNormal_1.REQ" /></Request>
+doubleInit;<Request ID="18" Action="CREATE"><Connection Source="DoubleInit.CSV_WRITER_1_1.QO" Destination="DoubleInit.F_NOT_1.IN" /></Request>
+doubleInit;<Request ID="19" Action="CREATE"><Connection Source="DoubleInit.F_NOT_1.OUT" Destination="DoubleInit.DoubleInit2.check" /></Request>
+doubleInit;<Request ID="20" Action="CREATE"><Connection Source="DoubleInit.E_SR_1.Q" Destination="DoubleInit.E_SWITCH_1.G" /></Request>
+doubleInit;<Request ID="21" Action="CREATE"><Connection Source="DoubleInit.CSV_WRITER_1_1.QO" Destination="DoubleInit.DoubleInit1.check" /></Request>
+doubleInit;<Request ID="22" Action="CREATE"><Connection Source="START.COLD" Destination="DoubleInit.E_SR_1.S" /></Request>
+doubleInit;<Request ID="23" Action="CREATE"><Connection Source="START.WARM" Destination="DoubleInit.E_SR_1.S" /></Request>
+doubleInit;<Request ID="24" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/initDeinitNoWrite.fboot b/systemtests/src/modules/utils/csvWriter/initDeinitNoWrite.fboot
new file mode 100644
index 0000000..5c15819
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/initDeinitNoWrite.fboot
@@ -0,0 +1,28 @@
+;<Request ID="1" Action="CREATE"><FB Name="initDeinitNoWrite" Type="EMB_RES" /></Request>
+initDeinitNoWrite;<Request ID="2" Action="CREATE"><FB Name="InitDeinitNoWrite.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+initDeinitNoWrite;<Request ID="3" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="InitDeinitNoWrite.CSV_WRITER_1.FILE_NAME" /></Request>
+initDeinitNoWrite;<Request ID="4" Action="CREATE"><FB Name="InitDeinitNoWrite.InitTest" Type="TEST_CONDITION" /></Request>
+initDeinitNoWrite;<Request ID="5" Action="CREATE"><FB Name="InitDeinitNoWrite.STRING2STRING" Type="STRING2STRING" /></Request>
+initDeinitNoWrite;<Request ID="6" Action="WRITE"><Connection Source="csvFirstValue" Destination="InitDeinitNoWrite.STRING2STRING.IN" /></Request>
+initDeinitNoWrite;<Request ID="7" Action="CREATE"><FB Name="InitDeinitNoWrite.DeInitTest" Type="TEST_CONDITION" /></Request>
+initDeinitNoWrite;<Request ID="8" Action="CREATE"><FB Name="InitDeinitNoWrite.endNormal" Type="STEST_END" /></Request>
+initDeinitNoWrite;<Request ID="9" Action="CREATE"><FB Name="InitDeinitNoWrite.F_NOT" Type="F_NOT" /></Request>
+initDeinitNoWrite;<Request ID="10" Action="CREATE"><FB Name="InitDeinitNoWrite.E_SWITCH" Type="E_SWITCH" /></Request>
+initDeinitNoWrite;<Request ID="11" Action="CREATE"><FB Name="InitDeinitNoWrite.E_SR" Type="E_SR" /></Request>
+initDeinitNoWrite;<Request ID="12" Action="CREATE"><Connection Source="InitDeinitNoWrite.E_SR.EO" Destination="InitDeinitNoWrite.CSV_WRITER_1.INIT" /></Request>
+initDeinitNoWrite;<Request ID="13" Action="CREATE"><Connection Source="InitDeinitNoWrite.CSV_WRITER_1.INITO" Destination="InitDeinitNoWrite.E_SWITCH.EI" /></Request>
+initDeinitNoWrite;<Request ID="14" Action="CREATE"><Connection Source="InitDeinitNoWrite.E_SWITCH.EO1" Destination="InitDeinitNoWrite.InitTest.REQ" /></Request>
+initDeinitNoWrite;<Request ID="15" Action="CREATE"><Connection Source="InitDeinitNoWrite.STRING2STRING.CNF" Destination="InitDeinitNoWrite.E_SR.S" /></Request>
+initDeinitNoWrite;<Request ID="16" Action="CREATE"><Connection Source="InitDeinitNoWrite.F_NOT.CNF" Destination="InitDeinitNoWrite.DeInitTest.REQ" /></Request>
+initDeinitNoWrite;<Request ID="17" Action="CREATE"><Connection Source="InitDeinitNoWrite.DeInitTest.CNF" Destination="InitDeinitNoWrite.endNormal.REQ" /></Request>
+initDeinitNoWrite;<Request ID="18" Action="CREATE"><Connection Source="InitDeinitNoWrite.E_SWITCH.EO0" Destination="InitDeinitNoWrite.F_NOT.REQ" /></Request>
+initDeinitNoWrite;<Request ID="19" Action="CREATE"><Connection Source="InitDeinitNoWrite.InitTest.CNF" Destination="InitDeinitNoWrite.E_SR.R" /></Request>
+initDeinitNoWrite;<Request ID="20" Action="CREATE"><Connection Source="InitDeinitNoWrite.E_SR.Q" Destination="InitDeinitNoWrite.CSV_WRITER_1.QI" /></Request>
+initDeinitNoWrite;<Request ID="21" Action="CREATE"><Connection Source="InitDeinitNoWrite.STRING2STRING.OUT" Destination="InitDeinitNoWrite.CSV_WRITER_1.SD_1" /></Request>
+initDeinitNoWrite;<Request ID="22" Action="CREATE"><Connection Source="InitDeinitNoWrite.CSV_WRITER_1.QO" Destination="InitDeinitNoWrite.InitTest.check" /></Request>
+initDeinitNoWrite;<Request ID="23" Action="CREATE"><Connection Source="InitDeinitNoWrite.CSV_WRITER_1.QO" Destination="InitDeinitNoWrite.F_NOT.IN" /></Request>
+initDeinitNoWrite;<Request ID="24" Action="CREATE"><Connection Source="InitDeinitNoWrite.F_NOT.OUT" Destination="InitDeinitNoWrite.DeInitTest.check" /></Request>
+initDeinitNoWrite;<Request ID="25" Action="CREATE"><Connection Source="InitDeinitNoWrite.E_SR.Q" Destination="InitDeinitNoWrite.E_SWITCH.G" /></Request>
+initDeinitNoWrite;<Request ID="26" Action="CREATE"><Connection Source="START.COLD" Destination="InitDeinitNoWrite.STRING2STRING.REQ" /></Request>
+initDeinitNoWrite;<Request ID="27" Action="CREATE"><Connection Source="START.WARM" Destination="InitDeinitNoWrite.STRING2STRING.REQ" /></Request>
+initDeinitNoWrite;<Request ID="28" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/noNameFile.fboot b/systemtests/src/modules/utils/csvWriter/noNameFile.fboot
new file mode 100644
index 0000000..3f4c0e0
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/noNameFile.fboot
@@ -0,0 +1,14 @@
+;<Request ID="1" Action="CREATE"><FB Name="noNameFile" Type="EMB_RES" /></Request>
+noNameFile;<Request ID="2" Action="CREATE"><FB Name="noNameFile.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+noNameFile;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="noNameFile.CSV_WRITER_1.QI" /></Request>
+noNameFile;<Request ID="4" Action="CREATE"><FB Name="noNameFile.InitTest" Type="TEST_CONDITION" /></Request>
+noNameFile;<Request ID="5" Action="CREATE"><FB Name="noNameFile.endNormal" Type="STEST_END" /></Request>
+noNameFile;<Request ID="6" Action="CREATE"><FB Name="noNameFile.F_NOT" Type="F_NOT" /></Request>
+noNameFile;<Request ID="7" Action="CREATE"><Connection Source="noNameFile.F_NOT.CNF" Destination="noNameFile.InitTest.REQ" /></Request>
+noNameFile;<Request ID="8" Action="CREATE"><Connection Source="noNameFile.InitTest.CNF" Destination="noNameFile.endNormal.REQ" /></Request>
+noNameFile;<Request ID="9" Action="CREATE"><Connection Source="noNameFile.CSV_WRITER_1.INITO" Destination="noNameFile.F_NOT.REQ" /></Request>
+noNameFile;<Request ID="10" Action="CREATE"><Connection Source="noNameFile.CSV_WRITER_1.QO" Destination="noNameFile.F_NOT.IN" /></Request>
+noNameFile;<Request ID="11" Action="CREATE"><Connection Source="noNameFile.F_NOT.OUT" Destination="noNameFile.InitTest.check" /></Request>
+noNameFile;<Request ID="12" Action="CREATE"><Connection Source="START.COLD" Destination="noNameFile.CSV_WRITER_1.INIT" /></Request>
+noNameFile;<Request ID="13" Action="CREATE"><Connection Source="START.WARM" Destination="noNameFile.CSV_WRITER_1.INIT" /></Request>
+noNameFile;<Request ID="14" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/normalExecution.fboot b/systemtests/src/modules/utils/csvWriter/normalExecution.fboot
new file mode 100644
index 0000000..5b08ec0
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/normalExecution.fboot
@@ -0,0 +1,32 @@
+;<Request ID="1" Action="CREATE"><FB Name="normalExecution" Type="EMB_RES" /></Request>
+normalExecution;<Request ID="2" Action="CREATE"><FB Name="NormalExecution.writeNormal" Type="TEST_CONDITION" /></Request>
+normalExecution;<Request ID="3" Action="CREATE"><FB Name="NormalExecution.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+normalExecution;<Request ID="4" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="NormalExecution.CSV_WRITER_1.FILE_NAME" /></Request>
+normalExecution;<Request ID="5" Action="CREATE"><FB Name="NormalExecution.InitTest" Type="TEST_CONDITION" /></Request>
+normalExecution;<Request ID="6" Action="CREATE"><FB Name="NormalExecution.STRING2STRING" Type="STRING2STRING" /></Request>
+normalExecution;<Request ID="7" Action="WRITE"><Connection Source="csvFirstValue" Destination="NormalExecution.STRING2STRING.IN" /></Request>
+normalExecution;<Request ID="8" Action="CREATE"><FB Name="NormalExecution.DeInitTest" Type="TEST_CONDITION" /></Request>
+normalExecution;<Request ID="9" Action="CREATE"><FB Name="NormalExecution.endNormal" Type="STEST_END" /></Request>
+normalExecution;<Request ID="10" Action="CREATE"><FB Name="NormalExecution.F_NOT" Type="F_NOT" /></Request>
+normalExecution;<Request ID="11" Action="CREATE"><FB Name="NormalExecution.E_SWITCH" Type="E_SWITCH" /></Request>
+normalExecution;<Request ID="12" Action="CREATE"><FB Name="NormalExecution.E_SR" Type="E_SR" /></Request>
+normalExecution;<Request ID="13" Action="CREATE"><Connection Source="NormalExecution.CSV_WRITER_1.CNF" Destination="NormalExecution.writeNormal.REQ" /></Request>
+normalExecution;<Request ID="14" Action="CREATE"><Connection Source="NormalExecution.writeNormal.CNF" Destination="NormalExecution.E_SR.R" /></Request>
+normalExecution;<Request ID="15" Action="CREATE"><Connection Source="NormalExecution.E_SR.EO" Destination="NormalExecution.CSV_WRITER_1.INIT" /></Request>
+normalExecution;<Request ID="16" Action="CREATE"><Connection Source="NormalExecution.InitTest.CNF" Destination="NormalExecution.CSV_WRITER_1.REQ" /></Request>
+normalExecution;<Request ID="17" Action="CREATE"><Connection Source="NormalExecution.CSV_WRITER_1.INITO" Destination="NormalExecution.E_SWITCH.EI" /></Request>
+normalExecution;<Request ID="18" Action="CREATE"><Connection Source="NormalExecution.E_SWITCH.EO1" Destination="NormalExecution.InitTest.REQ" /></Request>
+normalExecution;<Request ID="19" Action="CREATE"><Connection Source="NormalExecution.STRING2STRING.CNF" Destination="NormalExecution.E_SR.S" /></Request>
+normalExecution;<Request ID="20" Action="CREATE"><Connection Source="NormalExecution.F_NOT.CNF" Destination="NormalExecution.DeInitTest.REQ" /></Request>
+normalExecution;<Request ID="21" Action="CREATE"><Connection Source="NormalExecution.DeInitTest.CNF" Destination="NormalExecution.endNormal.REQ" /></Request>
+normalExecution;<Request ID="22" Action="CREATE"><Connection Source="NormalExecution.E_SWITCH.EO0" Destination="NormalExecution.F_NOT.REQ" /></Request>
+normalExecution;<Request ID="23" Action="CREATE"><Connection Source="NormalExecution.CSV_WRITER_1.QO" Destination="NormalExecution.writeNormal.check" /></Request>
+normalExecution;<Request ID="24" Action="CREATE"><Connection Source="NormalExecution.E_SR.Q" Destination="NormalExecution.CSV_WRITER_1.QI" /></Request>
+normalExecution;<Request ID="25" Action="CREATE"><Connection Source="NormalExecution.STRING2STRING.OUT" Destination="NormalExecution.CSV_WRITER_1.SD_1" /></Request>
+normalExecution;<Request ID="26" Action="CREATE"><Connection Source="NormalExecution.CSV_WRITER_1.QO" Destination="NormalExecution.InitTest.check" /></Request>
+normalExecution;<Request ID="27" Action="CREATE"><Connection Source="NormalExecution.CSV_WRITER_1.QO" Destination="NormalExecution.F_NOT.IN" /></Request>
+normalExecution;<Request ID="28" Action="CREATE"><Connection Source="NormalExecution.F_NOT.OUT" Destination="NormalExecution.DeInitTest.check" /></Request>
+normalExecution;<Request ID="29" Action="CREATE"><Connection Source="NormalExecution.E_SR.Q" Destination="NormalExecution.E_SWITCH.G" /></Request>
+normalExecution;<Request ID="30" Action="CREATE"><Connection Source="START.COLD" Destination="NormalExecution.STRING2STRING.REQ" /></Request>
+normalExecution;<Request ID="31" Action="CREATE"><Connection Source="START.WARM" Destination="NormalExecution.STRING2STRING.REQ" /></Request>
+normalExecution;<Request ID="32" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/normalExecutionMultiple.fboot b/systemtests/src/modules/utils/csvWriter/normalExecutionMultiple.fboot
new file mode 100644
index 0000000..c91fb20
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/normalExecutionMultiple.fboot
@@ -0,0 +1,48 @@
+;<Request ID="1" Action="CREATE"><FB Name="normalExecutionMultiple" Type="EMB_RES" /></Request>
+normalExecutionMultiple;<Request ID="2" Action="CREATE"><FB Name="NormalExecutionMultiple.writeNormal" Type="TEST_CONDITION" /></Request>
+normalExecutionMultiple;<Request ID="3" Action="CREATE"><FB Name="NormalExecutionMultiple.InitTest" Type="TEST_CONDITION" /></Request>
+normalExecutionMultiple;<Request ID="4" Action="CREATE"><FB Name="NormalExecutionMultiple.STRING2STRING" Type="STRING2STRING" /></Request>
+normalExecutionMultiple;<Request ID="5" Action="WRITE"><Connection Source="STRING#csvFirstValue" Destination="NormalExecutionMultiple.STRING2STRING.IN" /></Request>
+normalExecutionMultiple;<Request ID="6" Action="CREATE"><FB Name="NormalExecutionMultiple.DeInitTest" Type="TEST_CONDITION" /></Request>
+normalExecutionMultiple;<Request ID="7" Action="CREATE"><FB Name="NormalExecutionMultiple.endNormal" Type="STEST_END" /></Request>
+normalExecutionMultiple;<Request ID="8" Action="CREATE"><FB Name="NormalExecutionMultiple.F_NOT" Type="F_NOT" /></Request>
+normalExecutionMultiple;<Request ID="9" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SWITCH" Type="E_SWITCH" /></Request>
+normalExecutionMultiple;<Request ID="10" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SR" Type="E_SR" /></Request>
+normalExecutionMultiple;<Request ID="11" Action="CREATE"><FB Name="NormalExecutionMultiple.CSV_WRITER_1" Type="CSV_WRITER_3" /></Request>
+normalExecutionMultiple;<Request ID="12" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="NormalExecutionMultiple.CSV_WRITER_1.FILE_NAME" /></Request>
+normalExecutionMultiple;<Request ID="13" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SR_1" Type="E_SR" /></Request>
+normalExecutionMultiple;<Request ID="14" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SWITCH_1" Type="E_SWITCH" /></Request>
+normalExecutionMultiple;<Request ID="15" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SR_2" Type="E_SR" /></Request>
+normalExecutionMultiple;<Request ID="16" Action="CREATE"><FB Name="NormalExecutionMultiple.E_SWITCH_2" Type="E_SWITCH" /></Request>
+normalExecutionMultiple;<Request ID="17" Action="CREATE"><FB Name="NormalExecutionMultiple.E_CTU" Type="E_CTU" /></Request>
+normalExecutionMultiple;<Request ID="18" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH.EO1" Destination="NormalExecutionMultiple.InitTest.REQ" /></Request>
+normalExecutionMultiple;<Request ID="19" Action="CREATE"><Connection Source="NormalExecutionMultiple.F_NOT.CNF" Destination="NormalExecutionMultiple.DeInitTest.REQ" /></Request>
+normalExecutionMultiple;<Request ID="20" Action="CREATE"><Connection Source="NormalExecutionMultiple.DeInitTest.CNF" Destination="NormalExecutionMultiple.endNormal.REQ" /></Request>
+normalExecutionMultiple;<Request ID="21" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH.EO0" Destination="NormalExecutionMultiple.F_NOT.REQ" /></Request>
+normalExecutionMultiple;<Request ID="22" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR.EO" Destination="NormalExecutionMultiple.CSV_WRITER_1.INIT" /></Request>
+normalExecutionMultiple;<Request ID="23" Action="CREATE"><Connection Source="NormalExecutionMultiple.CSV_WRITER_1.INITO" Destination="NormalExecutionMultiple.E_SWITCH.EI" /></Request>
+normalExecutionMultiple;<Request ID="24" Action="CREATE"><Connection Source="NormalExecutionMultiple.CSV_WRITER_1.CNF" Destination="NormalExecutionMultiple.writeNormal.REQ" /></Request>
+normalExecutionMultiple;<Request ID="25" Action="CREATE"><Connection Source="NormalExecutionMultiple.writeNormal.CNF" Destination="NormalExecutionMultiple.E_SWITCH_1.EI" /></Request>
+normalExecutionMultiple;<Request ID="26" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH_1.EO0" Destination="NormalExecutionMultiple.E_SR_1.S" /></Request>
+normalExecutionMultiple;<Request ID="27" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH_1.EO1" Destination="NormalExecutionMultiple.E_SR.R" /></Request>
+normalExecutionMultiple;<Request ID="28" Action="CREATE"><Connection Source="NormalExecutionMultiple.InitTest.CNF" Destination="NormalExecutionMultiple.STRING2STRING.REQ" /></Request>
+normalExecutionMultiple;<Request ID="29" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH_1.EO0" Destination="NormalExecutionMultiple.STRING2STRING.REQ" /></Request>
+normalExecutionMultiple;<Request ID="30" Action="CREATE"><Connection Source="NormalExecutionMultiple.STRING2STRING.CNF" Destination="NormalExecutionMultiple.E_SWITCH_2.EI" /></Request>
+normalExecutionMultiple;<Request ID="31" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH_2.EO0" Destination="NormalExecutionMultiple.E_SR_2.S" /></Request>
+normalExecutionMultiple;<Request ID="32" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SWITCH_2.EO1" Destination="NormalExecutionMultiple.E_SR_2.R" /></Request>
+normalExecutionMultiple;<Request ID="33" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_CTU.CUO" Destination="NormalExecutionMultiple.CSV_WRITER_1.REQ" /></Request>
+normalExecutionMultiple;<Request ID="34" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR_2.EO" Destination="NormalExecutionMultiple.E_CTU.CU" /></Request>
+normalExecutionMultiple;<Request ID="35" Action="CREATE"><Connection Source="NormalExecutionMultiple.F_NOT.OUT" Destination="NormalExecutionMultiple.DeInitTest.check" /></Request>
+normalExecutionMultiple;<Request ID="36" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR.Q" Destination="NormalExecutionMultiple.E_SWITCH.G" /></Request>
+normalExecutionMultiple;<Request ID="37" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR.Q" Destination="NormalExecutionMultiple.CSV_WRITER_1.QI" /></Request>
+normalExecutionMultiple;<Request ID="38" Action="CREATE"><Connection Source="NormalExecutionMultiple.STRING2STRING.OUT" Destination="NormalExecutionMultiple.CSV_WRITER_1.SD_1" /></Request>
+normalExecutionMultiple;<Request ID="39" Action="CREATE"><Connection Source="NormalExecutionMultiple.CSV_WRITER_1.QO" Destination="NormalExecutionMultiple.InitTest.check" /></Request>
+normalExecutionMultiple;<Request ID="40" Action="CREATE"><Connection Source="NormalExecutionMultiple.CSV_WRITER_1.QO" Destination="NormalExecutionMultiple.F_NOT.IN" /></Request>
+normalExecutionMultiple;<Request ID="41" Action="CREATE"><Connection Source="NormalExecutionMultiple.CSV_WRITER_1.QO" Destination="NormalExecutionMultiple.writeNormal.check" /></Request>
+normalExecutionMultiple;<Request ID="42" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR_1.Q" Destination="NormalExecutionMultiple.E_SWITCH_1.G" /></Request>
+normalExecutionMultiple;<Request ID="43" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR_2.Q" Destination="NormalExecutionMultiple.E_SWITCH_2.G" /></Request>
+normalExecutionMultiple;<Request ID="44" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_CTU.CV" Destination="NormalExecutionMultiple.CSV_WRITER_1.SD_3" /></Request>
+normalExecutionMultiple;<Request ID="45" Action="CREATE"><Connection Source="NormalExecutionMultiple.E_SR_2.Q" Destination="NormalExecutionMultiple.CSV_WRITER_1.SD_2" /></Request>
+normalExecutionMultiple;<Request ID="46" Action="CREATE"><Connection Source="START.COLD" Destination="NormalExecutionMultiple.E_SR.S" /></Request>
+normalExecutionMultiple;<Request ID="47" Action="CREATE"><Connection Source="START.WARM" Destination="NormalExecutionMultiple.E_SR.S" /></Request>
+normalExecutionMultiple;<Request ID="48" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/openAndNoClose.fboot b/systemtests/src/modules/utils/csvWriter/openAndNoClose.fboot
new file mode 100644
index 0000000..80b3669
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/openAndNoClose.fboot
@@ -0,0 +1,9 @@
+;<Request ID="1" Action="CREATE"><FB Name="openAndNoClose" Type="EMB_RES" /></Request>
+openAndNoClose;<Request ID="2" Action="CREATE"><FB Name="DontClose.CSV_WRITER_2" Type="CSV_WRITER_1" /></Request>
+openAndNoClose;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="DontClose.CSV_WRITER_2.QI" /></Request>
+openAndNoClose;<Request ID="4" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="DontClose.CSV_WRITER_2.FILE_NAME" /></Request>
+openAndNoClose;<Request ID="5" Action="CREATE"><FB Name="DontClose.endNormal_1_1" Type="STEST_END" /></Request>
+openAndNoClose;<Request ID="6" Action="CREATE"><Connection Source="DontClose.CSV_WRITER_2.INITO" Destination="DontClose.endNormal_1_1.REQ" /></Request>
+openAndNoClose;<Request ID="7" Action="CREATE"><Connection Source="START.COLD" Destination="DontClose.CSV_WRITER_2.INIT" /></Request>
+openAndNoClose;<Request ID="8" Action="CREATE"><Connection Source="START.WARM" Destination="DontClose.CSV_WRITER_2.INIT" /></Request>
+openAndNoClose;<Request ID="9" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/writeQIFalse.fboot b/systemtests/src/modules/utils/csvWriter/writeQIFalse.fboot
new file mode 100644
index 0000000..a367ec4
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/writeQIFalse.fboot
@@ -0,0 +1,29 @@
+;<Request ID="1" Action="CREATE"><FB Name="writeQIFalse" Type="EMB_RES" /></Request>
+writeQIFalse;<Request ID="2" Action="CREATE"><FB Name="writeQIFalse.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+writeQIFalse;<Request ID="3" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="writeQIFalse.CSV_WRITER_1.FILE_NAME" /></Request>
+writeQIFalse;<Request ID="4" Action="CREATE"><FB Name="writeQIFalse.InitTest" Type="TEST_CONDITION" /></Request>
+writeQIFalse;<Request ID="5" Action="CREATE"><FB Name="writeQIFalse.STRING2STRING" Type="STRING2STRING" /></Request>
+writeQIFalse;<Request ID="6" Action="WRITE"><Connection Source="csvFirstValue" Destination="writeQIFalse.STRING2STRING.IN" /></Request>
+writeQIFalse;<Request ID="7" Action="CREATE"><FB Name="writeQIFalse.writeQIFalse" Type="TEST_CONDITION" /></Request>
+writeQIFalse;<Request ID="8" Action="CREATE"><FB Name="writeQIFalse.endNormal" Type="STEST_END" /></Request>
+writeQIFalse;<Request ID="9" Action="CREATE"><FB Name="writeQIFalse.F_NOT" Type="F_NOT" /></Request>
+writeQIFalse;<Request ID="10" Action="CREATE"><FB Name="writeQIFalse.E_SR" Type="E_SR" /></Request>
+writeQIFalse;<Request ID="11" Action="CREATE"><FB Name="writeQIFalse.E_SWITCH" Type="E_SWITCH" /></Request>
+writeQIFalse;<Request ID="12" Action="CREATE"><Connection Source="writeQIFalse.STRING2STRING.CNF" Destination="writeQIFalse.E_SR.S" /></Request>
+writeQIFalse;<Request ID="13" Action="CREATE"><Connection Source="writeQIFalse.F_NOT.CNF" Destination="writeQIFalse.writeQIFalse.REQ" /></Request>
+writeQIFalse;<Request ID="14" Action="CREATE"><Connection Source="writeQIFalse.writeQIFalse.CNF" Destination="writeQIFalse.endNormal.REQ" /></Request>
+writeQIFalse;<Request ID="15" Action="CREATE"><Connection Source="writeQIFalse.CSV_WRITER_1.INITO" Destination="writeQIFalse.InitTest.REQ" /></Request>
+writeQIFalse;<Request ID="16" Action="CREATE"><Connection Source="writeQIFalse.InitTest.CNF" Destination="writeQIFalse.E_SR.R" /></Request>
+writeQIFalse;<Request ID="17" Action="CREATE"><Connection Source="writeQIFalse.E_SWITCH.EO1" Destination="writeQIFalse.CSV_WRITER_1.INIT" /></Request>
+writeQIFalse;<Request ID="18" Action="CREATE"><Connection Source="writeQIFalse.E_SWITCH.EO0" Destination="writeQIFalse.CSV_WRITER_1.REQ" /></Request>
+writeQIFalse;<Request ID="19" Action="CREATE"><Connection Source="writeQIFalse.E_SR.EO" Destination="writeQIFalse.E_SWITCH.EI" /></Request>
+writeQIFalse;<Request ID="20" Action="CREATE"><Connection Source="writeQIFalse.CSV_WRITER_1.CNF" Destination="writeQIFalse.F_NOT.REQ" /></Request>
+writeQIFalse;<Request ID="21" Action="CREATE"><Connection Source="writeQIFalse.E_SR.Q" Destination="writeQIFalse.CSV_WRITER_1.QI" /></Request>
+writeQIFalse;<Request ID="22" Action="CREATE"><Connection Source="writeQIFalse.STRING2STRING.OUT" Destination="writeQIFalse.CSV_WRITER_1.SD_1" /></Request>
+writeQIFalse;<Request ID="23" Action="CREATE"><Connection Source="writeQIFalse.CSV_WRITER_1.QO" Destination="writeQIFalse.InitTest.check" /></Request>
+writeQIFalse;<Request ID="24" Action="CREATE"><Connection Source="writeQIFalse.CSV_WRITER_1.QO" Destination="writeQIFalse.F_NOT.IN" /></Request>
+writeQIFalse;<Request ID="25" Action="CREATE"><Connection Source="writeQIFalse.F_NOT.OUT" Destination="writeQIFalse.writeQIFalse.check" /></Request>
+writeQIFalse;<Request ID="26" Action="CREATE"><Connection Source="writeQIFalse.E_SR.Q" Destination="writeQIFalse.E_SWITCH.G" /></Request>
+writeQIFalse;<Request ID="27" Action="CREATE"><Connection Source="START.COLD" Destination="writeQIFalse.STRING2STRING.REQ" /></Request>
+writeQIFalse;<Request ID="28" Action="CREATE"><Connection Source="START.WARM" Destination="writeQIFalse.STRING2STRING.REQ" /></Request>
+writeQIFalse;<Request ID="29" Action="START"/>
diff --git a/systemtests/src/modules/utils/csvWriter/writeWithoutInit.fboot b/systemtests/src/modules/utils/csvWriter/writeWithoutInit.fboot
new file mode 100644
index 0000000..9996f84
--- /dev/null
+++ b/systemtests/src/modules/utils/csvWriter/writeWithoutInit.fboot
@@ -0,0 +1,19 @@
+;<Request ID="1" Action="CREATE"><FB Name="writeWithoutInit" Type="EMB_RES" /></Request>
+writeWithoutInit;<Request ID="2" Action="CREATE"><FB Name="writeWithoutInit.CSV_WRITER_1" Type="CSV_WRITER_1" /></Request>
+writeWithoutInit;<Request ID="3" Action="WRITE"><Connection Source="1" Destination="writeWithoutInit.CSV_WRITER_1.QI" /></Request>
+writeWithoutInit;<Request ID="4" Action="WRITE"><Connection Source="csvWriteTest.csv" Destination="writeWithoutInit.CSV_WRITER_1.FILE_NAME" /></Request>
+writeWithoutInit;<Request ID="5" Action="CREATE"><FB Name="writeWithoutInit.STRING2STRING" Type="STRING2STRING" /></Request>
+writeWithoutInit;<Request ID="6" Action="WRITE"><Connection Source="csvFirstValue" Destination="writeWithoutInit.STRING2STRING.IN" /></Request>
+writeWithoutInit;<Request ID="7" Action="CREATE"><FB Name="writeWithoutInit.DeInitTest" Type="TEST_CONDITION" /></Request>
+writeWithoutInit;<Request ID="8" Action="CREATE"><FB Name="writeWithoutInit.endNormal" Type="STEST_END" /></Request>
+writeWithoutInit;<Request ID="9" Action="CREATE"><FB Name="writeWithoutInit.F_NOT" Type="F_NOT" /></Request>
+writeWithoutInit;<Request ID="10" Action="CREATE"><Connection Source="writeWithoutInit.F_NOT.CNF" Destination="writeWithoutInit.DeInitTest.REQ" /></Request>
+writeWithoutInit;<Request ID="11" Action="CREATE"><Connection Source="writeWithoutInit.DeInitTest.CNF" Destination="writeWithoutInit.endNormal.REQ" /></Request>
+writeWithoutInit;<Request ID="12" Action="CREATE"><Connection Source="writeWithoutInit.STRING2STRING.CNF" Destination="writeWithoutInit.CSV_WRITER_1.REQ" /></Request>
+writeWithoutInit;<Request ID="13" Action="CREATE"><Connection Source="writeWithoutInit.CSV_WRITER_1.CNF" Destination="writeWithoutInit.F_NOT.REQ" /></Request>
+writeWithoutInit;<Request ID="14" Action="CREATE"><Connection Source="writeWithoutInit.STRING2STRING.OUT" Destination="writeWithoutInit.CSV_WRITER_1.SD_1" /></Request>
+writeWithoutInit;<Request ID="15" Action="CREATE"><Connection Source="writeWithoutInit.CSV_WRITER_1.QO" Destination="writeWithoutInit.F_NOT.IN" /></Request>
+writeWithoutInit;<Request ID="16" Action="CREATE"><Connection Source="writeWithoutInit.F_NOT.OUT" Destination="writeWithoutInit.DeInitTest.check" /></Request>
+writeWithoutInit;<Request ID="17" Action="CREATE"><Connection Source="START.WARM" Destination="writeWithoutInit.STRING2STRING.REQ" /></Request>
+writeWithoutInit;<Request ID="18" Action="CREATE"><Connection Source="START.COLD" Destination="writeWithoutInit.STRING2STRING.REQ" /></Request>
+writeWithoutInit;<Request ID="19" Action="START"/>
diff --git a/systemtests/unknown_FB.fboot b/systemtests/unknown_FB.fboot
new file mode 100644
index 0000000..258847f
--- /dev/null
+++ b/systemtests/unknown_FB.fboot
@@ -0,0 +1,12 @@
+;<Request ID="1" Action="CREATE"><FB Name="Hard_Pass_Example" Type="EMB_RES" /></Request>
+Hard_Pass_Example;<Request ID="2" Action="CREATE"><FB Name="STEST_END" Type="STEST_END" /></Request>
+Hard_Pass_Example;<Request ID="3" Action="CREATE"><FB Name="SHOULD_NOT_FAIL" Type="TEST_CONDITION" /></Request>
+Hard_Pass_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOL" /></Request>
+Hard_Pass_Example;<Request ID="5" Action="WRITE"><Connection Source="true" Destination="BOOL2BOOL.IN" /></Request>
+Hard_Pass_Example;<Request ID="6" Action="CREATE"><Connection Source="SHOULD_NOT_FAIL.CNF" Destination="STEST_END.REQ" /></Request>
+Hard_Pass_Example;<Request ID="7" Action="CREATE"><Connection Source="BOOL2BOOL.CNF" Destination="SHOULD_NOT_FAIL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="8" Action="CREATE"><Connection Source="START.COLD" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="9" Action="CREATE"><Connection Source="START.WARM" Destination="BOOL2BOOL.REQ" /></Request>
+Hard_Pass_Example;<Request ID="10" Action="CREATE"><Connection Source="BOOL2BOOL.OUT" Destination="SHOULD_NOT_FAIL.check" /></Request>
+Hard_Pass_Example;<Request ID="11" Action="START"/>
+Hard_Pass_Example;<Request ID="4" Action="CREATE"><FB Name="BOOL2BOOL" Type="BOOL2BOOLUnknown" /></Request>
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 005b73f..8ccddf1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2018 ACIN, nxtControl, Profactor GmbH, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Ingo Hegny, Alois Zoitl, Stanislav Meduna, Micheal Hofmann,
+# Copyright (c) 2011 - 2018 ACIN, nxtControl, Profactor GmbH, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Ingo Hegny, Alois Zoitl, Stanislav Meduna, Micheal Hofmann,
# * Martin Melik-Merkumians - initial API and implementation and/or initial documentation
# * Martin Melik-Merkumians - adds subdirectory for arch tests
# *******************************************************************************/
@@ -133,16 +134,18 @@
GET_PROPERTY(link_flags_test GLOBAL PROPERTY FORTE_TEST_LINK_FLAGS)
+#add forte_test to the list of test to be executed by ctest
+add_test(forte_test ${EXECUTABLE_OUTPUT_PATH}/forte_test)
+
if("${FORTE_ARCHITECTURE}" STREQUAL "Posix")
set(FORTE_TEST_CODE_COVERAGE_ANALYSIS OFF CACHE BOOL "Perform code coverage analyis with GCOV and presentation with LCOV")
mark_as_advanced(FORTE_TEST_CODE_COVERAGE_ANALYSIS)
if(FORTE_TEST_CODE_COVERAGE_ANALYSIS)
INCLUDE(${FORTE_BUILDSUPPORT_DIRECTORY}/GCov.cmake)
- SETUP_GCOV(TestCoverage forte_test coverage)
+ SETUP_GCOV(TestCoverage ctest coverage)
endif()
endif()
-add_test(forte_test ${EXECUTABLE_OUTPUT_PATH}/forte_test)
#######################################################################################
# Generate stringlist for every source file
#######################################################################################
diff --git a/tests/arch/CMakeLists.txt b/tests/arch/CMakeLists.txt
index 88419d8..3f1eafb 100644
--- a/tests/arch/CMakeLists.txt
+++ b/tests/arch/CMakeLists.txt
@@ -1,9 +1,10 @@
#*******************************************************************************
-# * Copyright (c) 2018 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
+# Copyright (c) 2018 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
# *
# * Contributors:
# * Martin Melik-Merkumians - initial API and implementation and/or initial documentation
diff --git a/tests/arch/utils/CMakeLists.txt b/tests/arch/utils/CMakeLists.txt
index 949ed7d..85e216f 100644
--- a/tests/arch/utils/CMakeLists.txt
+++ b/tests/arch/utils/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2018 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik-Merkumians - initial API and implementation and/or initial documentation
+# Copyright (c) 2018 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - initial API and implementation and/or initial documentation
# *******************************************************************************/
forte_test_add_inc_directories(${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/tests/arch/utils/timespec_utils_tests.cpp b/tests/arch/utils/timespec_utils_tests.cpp
index 736aca7..f57f0ed 100644
--- a/tests/arch/utils/timespec_utils_tests.cpp
+++ b/tests/arch/utils/timespec_utils_tests.cpp
@@ -1,13 +1,15 @@
/*******************************************************************************
-* Copyright (c) 2018 ACIN
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Martin Melik Merkumians - initial test implementation and/or initial documentation
-*******************************************************************************/
+ * Copyright (c) 2018 ACIN
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - initial test implementation and/or initial documentation
+ *******************************************************************************/
#include <boost/test/unit_test.hpp>
diff --git a/tests/core/CMakeLists.txt b/tests/core/CMakeLists.txt
index 93cc105..a50ca22 100644
--- a/tests/core/CMakeLists.txt
+++ b/tests/core/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2015 ACIN, nxtControl, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
+# Copyright (c) 2011 - 2015 ACIN, nxtControl, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
# *******************************************************************************/
#SET(SOURCE_GROUP ${SOURCE_GROUP}\\core)
@@ -20,7 +21,6 @@
forte_test_add_sourcefile_cpp(nameidentifiertest.cpp)
forte_test_add_sourcefile_cpp(mgmstatemachinetest.cpp)
forte_test_add_sourcefile_cpp(iec61131_functionstests.cpp)
-forte_test_add_sourcefile_cpp(convert_functionstests.cpp)
forte_test_add_sourcefile_cpp(internalvartests.cpp)
forte_test_add_subdirectory(datatypes)
diff --git a/tests/core/cominfra/CMakeLists.txt b/tests/core/cominfra/CMakeLists.txt
index 08cfc17..34a7710 100644
--- a/tests/core/cominfra/CMakeLists.txt
+++ b/tests/core/cominfra/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2011 ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
#SET(SOURCE_GROUP ${SOURCE_GROUP}\\core)
diff --git a/tests/core/cominfra/fbdkasn1layer_serdeserdata.h b/tests/core/cominfra/fbdkasn1layer_serdeserdata.h
index bf59b28..e8e8fbd 100644
--- a/tests/core/cominfra/fbdkasn1layer_serdeserdata.h
+++ b/tests/core/cominfra/fbdkasn1layer_serdeserdata.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN and nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/cominfra/fbdkasn1layerdeser_test.cpp b/tests/core/cominfra/fbdkasn1layerdeser_test.cpp
index c482d30..fd352d0 100644
--- a/tests/core/cominfra/fbdkasn1layerdeser_test.cpp
+++ b/tests/core/cominfra/fbdkasn1layerdeser_test.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 ACIN, fortiss, nxtControl and Profactor
* 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny, Michael Hofmann, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/cominfra/fbdkasn1layerser_test.cpp b/tests/core/cominfra/fbdkasn1layerser_test.cpp
index 6e7f6ac..9a4fb4a 100644
--- a/tests/core/cominfra/fbdkasn1layerser_test.cpp
+++ b/tests/core/cominfra/fbdkasn1layerser_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 ACIN, fortiss, nxtControl and Profactor
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Ingo Hegny, Michael Hofmann, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/convert_functionstests.cpp b/tests/core/convert_functionstests.cpp
deleted file mode 100644
index c29f208..0000000
--- a/tests/core/convert_functionstests.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2018 TU Vienna/ACIN
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Martin Melik Merkumians - initial API and implementation and/or initial documentation
-* Martin Melik-Merkumians - adds tests for REAL and LREAL casts
-*******************************************************************************/
-
-#include <boost/test/unit_test.hpp>
-
-#include "convert_functions.h"
-
-#include "forte_sint.h"
-#include "forte_real.h"
-#include "forte_date_and_time.h"
-#include "forte_time_of_day.h"
-
-BOOST_AUTO_TEST_SUITE(convert_functions)
-
-BOOST_AUTO_TEST_CASE(CONVERT_DT_TO_TOD)
-{
- CIEC_DATE_AND_TIME date;
- date.fromString("DT#2018-07-10-12:38:50.123");
-
- CIEC_TIME_OF_DAY tod(DT_TO_TOD(date));
- BOOST_TEST((TForteUInt64)tod == (12*3600 + 38*60 + 50)*1000ULL + 123);
-}
-
-BOOST_AUTO_TEST_CASE(CONVERT_REAL_TO_XINT)
-{
- CIEC_REAL roundUpReal(50.5f);
- CIEC_REAL roundDownReal(50.4f);
-
- BOOST_TEST(REAL_TO_SINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_SINT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_INT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_INT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_DINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_DINT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_LINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_LINT(roundDownReal) == 50);
-
- BOOST_TEST(REAL_TO_USINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_USINT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_UINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_UINT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_UDINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_UDINT(roundDownReal) == 50);
- BOOST_TEST(REAL_TO_ULINT(roundUpReal) == 51);
- BOOST_TEST(REAL_TO_ULINT(roundDownReal) == 50);
-}
-
-BOOST_AUTO_TEST_CASE(CONVERT_LREAL_TO_XINT)
-{
- CIEC_LREAL roundUpReal(50.5f);
- CIEC_LREAL roundDownReal(50.4f);
-
- BOOST_TEST(LREAL_TO_SINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_SINT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_INT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_INT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_DINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_DINT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_LINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_LINT(roundDownReal) == 50);
-
- BOOST_TEST(LREAL_TO_USINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_USINT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_UINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_UINT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_UDINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_UDINT(roundDownReal) == 50);
- BOOST_TEST(LREAL_TO_ULINT(roundUpReal) == 51);
- BOOST_TEST(LREAL_TO_ULINT(roundDownReal) == 50);
-}
-
-BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/core/datatypes/CIEC_ANY_tests.cpp b/tests/core/datatypes/CIEC_ANY_tests.cpp
index ccf3f4d..6927fda 100644
--- a/tests/core/datatypes/CIEC_ANY_tests.cpp
+++ b/tests/core/datatypes/CIEC_ANY_tests.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Monika Wenger - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_ARRAY_test.cpp b/tests/core/datatypes/CIEC_ARRAY_test.cpp
index 9bb224a..267fa72 100644
--- a/tests/core/datatypes/CIEC_ARRAY_test.cpp
+++ b/tests/core/datatypes/CIEC_ARRAY_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2015 ACIN, fortiss GmbH, Profactor, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl, Micheal Hofmann, Stanislav Meduna, Ingo Hegny - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_BOOL_CASTS_test.cpp b/tests/core/datatypes/CIEC_BOOL_CASTS_test.cpp
index b1eae06..6ca3750 100644
--- a/tests/core/datatypes/CIEC_BOOL_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_BOOL_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_BOOL_test.cpp b/tests/core/datatypes/CIEC_BOOL_test.cpp
index 4a75878..3293db9 100644
--- a/tests/core/datatypes/CIEC_BOOL_test.cpp
+++ b/tests/core/datatypes/CIEC_BOOL_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_BYTE_CASTS_test.cpp b/tests/core/datatypes/CIEC_BYTE_CASTS_test.cpp
index 03eae10..4f8390e 100644
--- a/tests/core/datatypes/CIEC_BYTE_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_BYTE_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_BYTE_test.cpp b/tests/core/datatypes/CIEC_BYTE_test.cpp
index b306e56..741e7c6 100644
--- a/tests/core/datatypes/CIEC_BYTE_test.cpp
+++ b/tests/core/datatypes/CIEC_BYTE_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DATE_AND_TIME_test.cpp b/tests/core/datatypes/CIEC_DATE_AND_TIME_test.cpp
index 868134d..c6276d9 100644
--- a/tests/core/datatypes/CIEC_DATE_AND_TIME_test.cpp
+++ b/tests/core/datatypes/CIEC_DATE_AND_TIME_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DATE_test.cpp b/tests/core/datatypes/CIEC_DATE_test.cpp
index aac81e8..1d1c261 100644
--- a/tests/core/datatypes/CIEC_DATE_test.cpp
+++ b/tests/core/datatypes/CIEC_DATE_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_DINT_CASTS_test.cpp
index 9a00b75..7da8073 100644
--- a/tests/core/datatypes/CIEC_DINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_DINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DINT_test.cpp b/tests/core/datatypes/CIEC_DINT_test.cpp
index 40f0190..b02fe57 100644
--- a/tests/core/datatypes/CIEC_DINT_test.cpp
+++ b/tests/core/datatypes/CIEC_DINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DWORD_CASTS_test.cpp b/tests/core/datatypes/CIEC_DWORD_CASTS_test.cpp
index da67328..9da8421 100644
--- a/tests/core/datatypes/CIEC_DWORD_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_DWORD_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_DWORD_test.cpp b/tests/core/datatypes/CIEC_DWORD_test.cpp
index 6beeb82..c61064c 100644
--- a/tests/core/datatypes/CIEC_DWORD_test.cpp
+++ b/tests/core/datatypes/CIEC_DWORD_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_INT_CASTS_test.cpp b/tests/core/datatypes/CIEC_INT_CASTS_test.cpp
index 618242b..74136ce 100644
--- a/tests/core/datatypes/CIEC_INT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_INT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_INT_test.cpp b/tests/core/datatypes/CIEC_INT_test.cpp
index 5002696..2810c58 100644
--- a/tests/core/datatypes/CIEC_INT_test.cpp
+++ b/tests/core/datatypes/CIEC_INT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_LINT_CASTS_test.cpp
index 03c7cdf..5e809fc 100644
--- a/tests/core/datatypes/CIEC_LINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_LINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, nxtControl, fortiss GmbH, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LINT_test.cpp b/tests/core/datatypes/CIEC_LINT_test.cpp
index 2a0add8..e2f42cc 100644
--- a/tests/core/datatypes/CIEC_LINT_test.cpp
+++ b/tests/core/datatypes/CIEC_LINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LREAL_CASTS_test.cpp b/tests/core/datatypes/CIEC_LREAL_CASTS_test.cpp
index 88c176f..14297f6 100644
--- a/tests/core/datatypes/CIEC_LREAL_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_LREAL_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LREAL_test.cpp b/tests/core/datatypes/CIEC_LREAL_test.cpp
index b5d8c91..cfb8f22 100644
--- a/tests/core/datatypes/CIEC_LREAL_test.cpp
+++ b/tests/core/datatypes/CIEC_LREAL_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, nxtControl, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LWORD_CASTS_test.cpp b/tests/core/datatypes/CIEC_LWORD_CASTS_test.cpp
index 79da5f2..0f26ebb 100644
--- a/tests/core/datatypes/CIEC_LWORD_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_LWORD_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_LWORD_test.cpp b/tests/core/datatypes/CIEC_LWORD_test.cpp
index f93bae5..ae524c9 100644
--- a/tests/core/datatypes/CIEC_LWORD_test.cpp
+++ b/tests/core/datatypes/CIEC_LWORD_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_REAL_CASTS_test.cpp b/tests/core/datatypes/CIEC_REAL_CASTS_test.cpp
index 4859af2..a78dfdd 100644
--- a/tests/core/datatypes/CIEC_REAL_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_REAL_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_REAL_test.cpp b/tests/core/datatypes/CIEC_REAL_test.cpp
index abfafcf..33da99e 100644
--- a/tests/core/datatypes/CIEC_REAL_test.cpp
+++ b/tests/core/datatypes/CIEC_REAL_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, nxtControl, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_SINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_SINT_CASTS_test.cpp
index 3e5ff12..9cba9e3 100644
--- a/tests/core/datatypes/CIEC_SINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_SINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_SINT_test.cpp b/tests/core/datatypes/CIEC_SINT_test.cpp
index 23f604a..79085bd 100644
--- a/tests/core/datatypes/CIEC_SINT_test.cpp
+++ b/tests/core/datatypes/CIEC_SINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_STRING_test.cpp b/tests/core/datatypes/CIEC_STRING_test.cpp
index a490fe0..0587d73 100644
--- a/tests/core/datatypes/CIEC_STRING_test.cpp
+++ b/tests/core/datatypes/CIEC_STRING_test.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, nxtControl, Profactor GmbH, fortiss GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna,
diff --git a/tests/core/datatypes/CIEC_STRUCT_test.cpp b/tests/core/datatypes/CIEC_STRUCT_test.cpp
index 0ffc4f5..0e08406 100755
--- a/tests/core/datatypes/CIEC_STRUCT_test.cpp
+++ b/tests/core/datatypes/CIEC_STRUCT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_TIME_OF_DAY_test.cpp b/tests/core/datatypes/CIEC_TIME_OF_DAY_test.cpp
index 7f6625a..aa2b8b6 100644
--- a/tests/core/datatypes/CIEC_TIME_OF_DAY_test.cpp
+++ b/tests/core/datatypes/CIEC_TIME_OF_DAY_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN, nxtControl
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_TIME_test.cpp b/tests/core/datatypes/CIEC_TIME_test.cpp
index 832fd2d..ff5f1f8 100644
--- a/tests/core/datatypes/CIEC_TIME_test.cpp
+++ b/tests/core/datatypes/CIEC_TIME_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011, 2103 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
@@ -115,7 +116,7 @@
strcpy(cBuffer, "");*/
BOOST_CHECK_EQUAL(nTest.fromString("TIME#4h36m"), 10);
- BOOST_CHECK_EQUAL(nTest, 16560000LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000));
+ BOOST_CHECK_EQUAL(nTest, 16560000LL * (cgForteTimeBaseUnitsPerSecond / 1000));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 12);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#16560000ms");
@@ -123,7 +124,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("time#4h36m"), 10);
- BOOST_CHECK_EQUAL(nTest, 16560000LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000));
+ BOOST_CHECK_EQUAL(nTest, 16560000LL * (cgForteTimeBaseUnitsPerSecond / 1000));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 12);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#16560000ms");
@@ -131,7 +132,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("T#4h36m"), 7);
- BOOST_CHECK_EQUAL(nTest, 16560000LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000));
+ BOOST_CHECK_EQUAL(nTest, 16560000LL * (cgForteTimeBaseUnitsPerSecond / 1000));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 12);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#16560000ms");
@@ -139,7 +140,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("t#4h36m"), 7);
- BOOST_CHECK_EQUAL(nTest, 16560000LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000));
+ BOOST_CHECK_EQUAL(nTest, 16560000LL * (cgForteTimeBaseUnitsPerSecond / 1000));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 12);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#16560000ms");
@@ -153,7 +154,7 @@
strcpy(cBuffer, "");*/
BOOST_CHECK_EQUAL(nTest.fromString("TIME#3s_22ms"), 12);
- BOOST_CHECK_EQUAL(nTest, (CIEC_TIME::TValueType)(3022LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000LL)));
+ BOOST_CHECK_EQUAL(nTest, (CIEC_TIME::TValueType)(3022LL * (cgForteTimeBaseUnitsPerSecond / 1000LL)));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 8);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#3022ms");
@@ -161,7 +162,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("time#3s_22ms"), 12);
- BOOST_CHECK_EQUAL(nTest, 3022LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000LL));
+ BOOST_CHECK_EQUAL(nTest, 3022LL * (cgForteTimeBaseUnitsPerSecond / 1000LL));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 8);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#3022ms");
@@ -169,7 +170,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("T#3s_22ms"), 9);
- BOOST_CHECK_EQUAL(nTest, 3022LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000LL));
+ BOOST_CHECK_EQUAL(nTest, 3022LL * (cgForteTimeBaseUnitsPerSecond / 1000LL));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 8);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#3022ms");
@@ -177,7 +178,7 @@
nTest = 0;
BOOST_CHECK_EQUAL(nTest.fromString("t#3s_22ms"), 9);
- BOOST_CHECK_EQUAL(nTest, 3022LL * (FORTE_TIME_BASE_UNITS_PER_SECOND / 1000LL));
+ BOOST_CHECK_EQUAL(nTest, 3022LL * (cgForteTimeBaseUnitsPerSecond / 1000LL));
BOOST_CHECK_EQUAL(nTest.toString(cBuffer, 17), 8);
BOOST_CHECK_EQUAL(nTest.toString(cBufferFail, 2), -1);
BOOST_CHECK_EQUAL(std::string(cBuffer), "T#3022ms");
@@ -185,7 +186,7 @@
nTest = 0;
}
-BOOST_AUTO_TEST_CASE(time_fromString_with_microseconds_test){
+BOOST_AUTO_TEST_CASE(toString_with_microseconds_test){
CIEC_TIME time;
char cBuffer[17];
@@ -214,14 +215,14 @@
BOOST_AUTO_TEST_CASE(time_comparision_tests){
CIEC_TIME time1, time2;
- time1.setFromMiliSeconds(200);
- time2.setFromMiliSeconds(200);
+ time1.setFromMilliSeconds(200);
+ time2.setFromMilliSeconds(200);
BOOST_CHECK(time1 == time2);
BOOST_CHECK_EQUAL(true, time1 >= time2);
BOOST_CHECK_EQUAL(true, time1 <= time2);
- time2.setFromMiliSeconds(150);
+ time2.setFromMilliSeconds(150);
BOOST_CHECK_EQUAL(true, time1 > time2);
BOOST_CHECK_EQUAL(true, time1 >= time2);
@@ -229,7 +230,7 @@
BOOST_CHECK_EQUAL(false, time1 < time2);
BOOST_CHECK_EQUAL(false, time1 <= time2);
- time1.setFromMiliSeconds(120);
+ time1.setFromMilliSeconds(120);
BOOST_CHECK_EQUAL(false, time1 > time2);
BOOST_CHECK_EQUAL(false, time1 >= time2);
BOOST_CHECK_EQUAL(true, time1 != time2);
@@ -238,4 +239,140 @@
}
+BOOST_AUTO_TEST_CASE(get_time_in_nanoseconds)
+{
+ CIEC_TIME time;
+
+ time.setFromNanoSeconds(1);
+ BOOST_CHECK(time.getInNanoSeconds() == 1);
+
+ time.setFromNanoSeconds(10);
+ BOOST_CHECK(time.getInNanoSeconds() == 10);
+
+ time.setFromNanoSeconds(999);
+ BOOST_CHECK(time.getInNanoSeconds() == 999);
+
+ time.setFromNanoSeconds(10325643);
+ BOOST_CHECK(time.getInNanoSeconds() == 10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_time_literal_in_milliseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#1ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 1);
+
+ time.fromString("T#10ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 10);
+
+ time.fromString("T#999ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 999);
+
+ time.fromString("T#10325643ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_positive_signed_time_literal_in_milliseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#+1ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 1);
+
+ time.fromString("T#+10ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 10);
+
+ time.fromString("T#+999ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 999);
+
+ time.fromString("T#+10325643ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), 10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_negative_signed_time_literal_in_milliseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#-1ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), -1);
+
+ time.fromString("T#-10ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), -10);
+
+ time.fromString("T#-999ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), -999);
+
+ time.fromString("T#-10325643ms");
+ BOOST_CHECK_EQUAL(time.getInMilliSeconds(), -10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_time_literal_in_microseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#1us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), 1);
+
+ time.fromString("T#10us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), 10);
+
+ time.fromString("T#999us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), 999);
+
+ time.fromString("T#10325643us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), 10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_negative_signed_time_literal_in_microseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#-1us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), -1);
+
+ time.fromString("T#-10us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), -10);
+
+ time.fromString("T#-999us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), -999);
+
+ time.fromString("T#-10325643us");
+ BOOST_CHECK_EQUAL(time.getInMicroSeconds(), -10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_time_literal_in_nanoseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#1ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), 1);
+
+ time.fromString("T#10ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), 10);
+
+ time.fromString("T#999ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), 999);
+
+ time.fromString("T#10325643ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), 10325643);
+}
+
+BOOST_AUTO_TEST_CASE(parse_negative_signed_time_literal_in_nanoseconds)
+{
+ CIEC_TIME time;
+
+ time.fromString("T#-1ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), -1);
+
+ time.fromString("T#-10ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), -10);
+
+ time.fromString("T#-999ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), -999);
+
+ time.fromString("T#-10325643ns");
+ BOOST_CHECK_EQUAL(time.getInNanoSeconds(), -10325643);
+}
+
BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/core/datatypes/CIEC_UDINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_UDINT_CASTS_test.cpp
index 2a7eea1..c3ae8fc 100644
--- a/tests/core/datatypes/CIEC_UDINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_UDINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_UDINT_test.cpp b/tests/core/datatypes/CIEC_UDINT_test.cpp
index d5af778..e0357bc 100644
--- a/tests/core/datatypes/CIEC_UDINT_test.cpp
+++ b/tests/core/datatypes/CIEC_UDINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_UINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_UINT_CASTS_test.cpp
index 3a8f4c4..1cfa6a3 100644
--- a/tests/core/datatypes/CIEC_UINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_UINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_UINT_test.cpp b/tests/core/datatypes/CIEC_UINT_test.cpp
index f65401a..5822b08 100644
--- a/tests/core/datatypes/CIEC_UINT_test.cpp
+++ b/tests/core/datatypes/CIEC_UINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_ULINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_ULINT_CASTS_test.cpp
index 866c2e8..ceaaa72 100644
--- a/tests/core/datatypes/CIEC_ULINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_ULINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_ULINT_test.cpp b/tests/core/datatypes/CIEC_ULINT_test.cpp
index 19a1d74..89cb8db 100644
--- a/tests/core/datatypes/CIEC_ULINT_test.cpp
+++ b/tests/core/datatypes/CIEC_ULINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_USINT_CASTS_test.cpp b/tests/core/datatypes/CIEC_USINT_CASTS_test.cpp
index 581940c..7c7f9f5 100644
--- a/tests/core/datatypes/CIEC_USINT_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_USINT_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_USINT_test.cpp b/tests/core/datatypes/CIEC_USINT_test.cpp
index e255b83..23d517b 100644
--- a/tests/core/datatypes/CIEC_USINT_test.cpp
+++ b/tests/core/datatypes/CIEC_USINT_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_WORD_CASTS_test.cpp b/tests/core/datatypes/CIEC_WORD_CASTS_test.cpp
index 932b88c..a85aa8d 100644
--- a/tests/core/datatypes/CIEC_WORD_CASTS_test.cpp
+++ b/tests/core/datatypes/CIEC_WORD_CASTS_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 - 2012 ACIN, nxtControl, 2018 TU Vienna/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl, Stanislav Meduna - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_WORD_test.cpp b/tests/core/datatypes/CIEC_WORD_test.cpp
index c77f693..8ce7026 100644
--- a/tests/core/datatypes/CIEC_WORD_test.cpp
+++ b/tests/core/datatypes/CIEC_WORD_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/CIEC_WSTRING_test.cpp b/tests/core/datatypes/CIEC_WSTRING_test.cpp
index 1d08a65..9baafd5 100644
--- a/tests/core/datatypes/CIEC_WSTRING_test.cpp
+++ b/tests/core/datatypes/CIEC_WSTRING_test.cpp
@@ -1,10 +1,11 @@
/*******************************************************************************
* Copyright (c) 2011 - 2014 ACIN, nxtControl, Profactor GmbH, fortiss GmbH
* 2018 TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik Merkumians, Ingo Hegny, Alois Zoitl,
diff --git a/tests/core/datatypes/CMakeLists.txt b/tests/core/datatypes/CMakeLists.txt
index 41f8c11..45e3f77 100644
--- a/tests/core/datatypes/CMakeLists.txt
+++ b/tests/core/datatypes/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2014 nxtControl, ACIN, fortiss GmbH, Profactor GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Stanislav Meduna, Ingo Hegny, Alois Zoitl, Monika Wenger, Matthias Plasch - initial API and implementation and/or initial documentation
+# Copyright (c) 2011 - 2014 nxtControl, ACIN, fortiss GmbH, Profactor GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Stanislav Meduna, Ingo Hegny, Alois Zoitl, Monika Wenger, Matthias Plasch - initial API and implementation and/or initial documentation
# *******************************************************************************/
#SET(SOURCE_GROUP ${SOURCE_GROUP}\\core)
@@ -80,10 +81,5 @@
forte_test_add_sourcefile_cpp(CIEC_TIME_OF_DAY_test.cpp)
forte_test_add_sourcefile_cpp(CIEC_STRUCT_test.cpp)
-
-# convert functions for TO_(W)STRING conversions
- forte_test_add_sourcefile_cpp(convert_to_STRING_test.cpp)
-
-IF(FORTE_USE_WSTRING_DATATYPE)
- forte_test_add_sourcefile_cpp(convert_to_WSTRING_test.cpp)
-ENDIF(FORTE_USE_WSTRING_DATATYPE)
\ No newline at end of file
+
+ forte_test_add_subdirectory(convert)
\ No newline at end of file
diff --git a/tests/core/datatypes/CUnicodeUtilities_test.cpp b/tests/core/datatypes/CUnicodeUtilities_test.cpp
index 4c1d564..81c1f6d 100644
--- a/tests/core/datatypes/CUnicodeUtilities_test.cpp
+++ b/tests/core/datatypes/CUnicodeUtilities_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2011, 2015 nxtControl, ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Stanislav Meduna, Ingo Hegny, Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/anytostringtests.cpp b/tests/core/datatypes/anytostringtests.cpp
index 2b473e0..8a69281 100644
--- a/tests/core/datatypes/anytostringtests.cpp
+++ b/tests/core/datatypes/anytostringtests.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/datatypes/convert/CMakeLists.txt b/tests/core/datatypes/convert/CMakeLists.txt
new file mode 100644
index 0000000..d3719a7
--- /dev/null
+++ b/tests/core/datatypes/convert/CMakeLists.txt
@@ -0,0 +1,20 @@
+#*******************************************************************************
+# Copyright (c) 2019 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - adds package layer for convert tests
+# *******************************************************************************/
+
+forte_test_add_sourcefile_cpp(convert_functionstests.cpp)
+
+# convert functions for TO_(W)STRING conversions
+ forte_test_add_sourcefile_cpp(convert_to_STRING_test.cpp)
+
+IF(FORTE_USE_WSTRING_DATATYPE)
+ forte_test_add_sourcefile_cpp(convert_to_WSTRING_test.cpp)
+ENDIF(FORTE_USE_WSTRING_DATATYPE)
diff --git a/tests/core/datatypes/convert/convert_functionstests.cpp b/tests/core/datatypes/convert/convert_functionstests.cpp
new file mode 100644
index 0000000..471e617
--- /dev/null
+++ b/tests/core/datatypes/convert/convert_functionstests.cpp
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2018 TU Vienna/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - initial API and implementation and/or initial documentation
+ * Martin Melik-Merkumians - adds tests for REAL and LREAL casts
+ *******************************************************************************/
+
+#include <boost/test/unit_test.hpp>
+
+#include "convert_functions.h"
+
+#include "forte_sint.h"
+#include "forte_lint.h"
+#include "forte_real.h"
+#include "forte_date_and_time.h"
+#include "forte_time_of_day.h"
+
+BOOST_AUTO_TEST_SUITE(convert_functions)
+
+ BOOST_AUTO_TEST_CASE(CONVERT_DT_TO_TOD) {
+ CIEC_DATE_AND_TIME date;
+ date.fromString("DT#2018-07-10-12:38:50.123");
+
+ CIEC_TIME_OF_DAY tod(DT_TO_TOD(date));
+ BOOST_TEST((TForteUInt64)tod == (12*3600 + 38*60 + 50)*1000ULL + 123);
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_REAL_TO_XINT) {
+ CIEC_REAL roundUpReal(50.5f);
+ CIEC_REAL roundDownReal(50.4f);
+
+ BOOST_TEST(REAL_TO_SINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_SINT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_INT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_INT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_DINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_DINT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_LINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_LINT(roundDownReal) == 50);
+
+ BOOST_TEST(REAL_TO_USINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_USINT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_UINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_UINT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_UDINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_UDINT(roundDownReal) == 50);
+ BOOST_TEST(REAL_TO_ULINT(roundUpReal) == 51);
+ BOOST_TEST(REAL_TO_ULINT(roundDownReal) == 50);
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_LREAL_TO_XINT) {
+ CIEC_LREAL roundUpReal(50.5f);
+ CIEC_LREAL roundDownReal(50.4f);
+
+ BOOST_TEST(LREAL_TO_SINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_SINT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_INT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_INT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_DINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_DINT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_LINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_LINT(roundDownReal) == 50);
+
+ BOOST_TEST(LREAL_TO_USINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_USINT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_UINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_UINT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_UDINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_UDINT(roundDownReal) == 50);
+ BOOST_TEST(LREAL_TO_ULINT(roundUpReal) == 51);
+ BOOST_TEST(LREAL_TO_ULINT(roundDownReal) == 50);
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_S_LINT) {
+ CIEC_TIME time("T#2d5h43m12s");
+ CIEC_LINT timeInS;
+ timeInS = TIME_IN_S_TO_LINT(time);
+ BOOST_TEST(timeInS == (INT64_C(172800) + INT64_C(18000) + INT64_C(2580) + INT64_C(12)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_MS_LINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms");
+ CIEC_LINT timeInMs;
+ timeInMs = TIME_IN_MS_TO_LINT(time);
+ BOOST_TEST(timeInMs == (INT64_C(172800000) + INT64_C(18000000) + INT64_C(2580000) + INT64_C(12000) + INT64_C(44)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_US_LINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us");
+ CIEC_LINT timeInUs;
+ timeInUs = TIME_IN_US_TO_LINT(time);
+ BOOST_TEST(timeInUs == (INT64_C(172800000000) + INT64_C(18000000000) + INT64_C(2580000000) + INT64_C(12000000) + INT64_C(44000) + INT64_C(27)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_NS_LINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_LINT timeInNs;
+ timeInNs = TIME_IN_NS_TO_LINT(time);
+ BOOST_TEST(timeInNs == (INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_S_ULINT) {
+ CIEC_TIME time("T#2d5h43m12s");
+ CIEC_ULINT timeInS;
+ timeInS = TIME_IN_S_TO_ULINT(time);
+ BOOST_TEST(timeInS == (UINT64_C(172800) + UINT64_C(18000) + UINT64_C(2580) + UINT64_C(12)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_MS_ULINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms");
+ CIEC_ULINT timeInMs;
+ timeInMs = TIME_IN_MS_TO_ULINT(time);
+ BOOST_TEST(timeInMs == (UINT64_C(172800000) + UINT64_C(18000000) + UINT64_C(2580000) + UINT64_C(12000) + UINT64_C(44)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_US_ULINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us");
+ CIEC_ULINT timeInUs;
+ timeInUs = TIME_IN_US_TO_ULINT(time);
+ BOOST_TEST(timeInUs == (UINT64_C(172800000000) + UINT64_C(18000000000) + UINT64_C(2580000000) + UINT64_C(12000000) + UINT64_C(44000) + UINT64_C(27)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_NS_ULINT) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_ULINT timeInNs;
+ timeInNs = TIME_IN_NS_TO_ULINT(time);
+ BOOST_TEST(timeInNs == (UINT64_C(172800000000000) + UINT64_C(18000000000000) + UINT64_C(2580000000000) + UINT64_C(12000000000) + UINT64_C(44000000) + UINT64_C(27000) + UINT64_C(31)));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_S_LREAL) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_LREAL timeInS;
+ timeInS = TIME_IN_S_TO_LREAL(time);
+ BOOST_TEST(timeInS == static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E9));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_MS_LREAL) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_LREAL timeInMs;
+ timeInMs = TIME_IN_MS_TO_LREAL(time);
+ BOOST_TEST(
+ timeInMs == static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E6));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_US_LREAL) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_LREAL timeInUs;
+ timeInUs = TIME_IN_US_TO_LREAL(time);
+ BOOST_TEST(
+ timeInUs == static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E3));
+ }
+
+ BOOST_AUTO_TEST_CASE(CONVERT_TIME_TO_NS_LREAL) {
+ CIEC_TIME time("T#2d5h43m12s44ms27us31ns");
+ CIEC_LREAL timeInNs;
+ timeInNs = TIME_IN_NS_TO_LREAL(time);
+ BOOST_TEST(
+ timeInNs == static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)));
+ }
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/core/datatypes/convert_to_STRING_test.cpp b/tests/core/datatypes/convert/convert_to_STRING_test.cpp
similarity index 95%
rename from tests/core/datatypes/convert_to_STRING_test.cpp
rename to tests/core/datatypes/convert/convert_to_STRING_test.cpp
index 10ee79c..6e44238 100644
--- a/tests/core/datatypes/convert_to_STRING_test.cpp
+++ b/tests/core/datatypes/convert/convert_to_STRING_test.cpp
@@ -1,16 +1,17 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch - initial API and implementation and/or initial documentation
*******************************************************************************/
#include <boost/test/unit_test.hpp>
-#include "../../../src/core/convert_functions.h"
+#include "convert_functions.h"
#include "../../../src/core/datatypes/forte_string.h"
//BOOLEAN
diff --git a/tests/core/datatypes/convert_to_WSTRING_test.cpp b/tests/core/datatypes/convert/convert_to_WSTRING_test.cpp
similarity index 95%
rename from tests/core/datatypes/convert_to_WSTRING_test.cpp
rename to tests/core/datatypes/convert/convert_to_WSTRING_test.cpp
index 16d5891..11b758c 100644
--- a/tests/core/datatypes/convert_to_WSTRING_test.cpp
+++ b/tests/core/datatypes/convert/convert_to_WSTRING_test.cpp
@@ -1,16 +1,17 @@
/*******************************************************************************
* Copyright (c) 2014 Profactor GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthias Plasch - initial API and implementation and/or initial documentation
*******************************************************************************/
#include <boost/test/unit_test.hpp>
-#include "../../../src/core/convert_functions.h"
+#include "convert_functions.h"
#include "../../../src/core/datatypes/forte_wstring.h"
//BOOLEAN
diff --git a/tests/core/fbtests/CMakeLists.txt b/tests/core/fbtests/CMakeLists.txt
index 5e4c35f..9ede695 100644
--- a/tests/core/fbtests/CMakeLists.txt
+++ b/tests/core/fbtests/CMakeLists.txt
@@ -1,14 +1,16 @@
#*******************************************************************************
-# * Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\fbtests)
-forte_test_add_sourcefile_cpp(fbtester.cpp)
-forte_test_add_sourcefile_cpp(fbtestsmanager.cpp)
+
+forte_test_add_sourcefile_cpp(fbtesterglobalfixture.cpp)
+forte_test_add_sourcefile_cpp(fbtestfixture.cpp)
diff --git a/tests/core/fbtests/fbtester.cpp b/tests/core/fbtests/fbtester.cpp
deleted file mode 100644
index 57b2118..0000000
--- a/tests/core/fbtests/fbtester.cpp
+++ /dev/null
@@ -1,396 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
- * 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
- *******************************************************************************/
-#include "fbtester.h"
-#include <boost/test/unit_test.hpp>
-#include "stringdict.h"
-#include <stdio.h>
-#include <algorithm>
-#include <ecet.h>
-#include <criticalregion.h>
-#include <if2indco.h>
-
-#ifdef WIN32
-# include <windows.h>
-# define usleep(x) Sleep((x)/1000)
-#else
-# include <unistd.h>
-# endif
-#include <stdio.h>
-
-/**Helper functor for deleting stuff in containers
- *
- */
-struct SDeleteFunctor {
- template<class T>
- void operator()(T* paVal) const {
- delete paVal;
- }
-};
-
-//! Helper class allowing to access the can be connected function from the FBTester
-class CFBTestConn : public CDataConnection {
- public:
- static bool canBeConnected(const CIEC_ANY *pa_poSrcDataPoint, const CIEC_ANY *pa_poDstDataPoint) {
- bool bSpecialCast;
- return CDataConnection::canBeConnected(pa_poSrcDataPoint, pa_poDstDataPoint, bSpecialCast);
- }
- private:
- //you should not be allowed to create this class their for constructor and destructor are private
- CFBTestConn();
- virtual ~CFBTestConn();
-};
-
-CFBTester::CFBTester(CResource *pa_poTestResource) :
- CFunctionBlock(pa_poTestResource, 0, 0, 0, 0), mFBUnderTest(0), m_nNumSuccesfulTestCases(0), m_nNumUnsuccesfulTestCases(0), mFBConnData(0), mFBVarsData(0) {
-
- changeFBExecutionState(cg_nMGM_CMD_Reset);
- changeFBExecutionState(cg_nMGM_CMD_Start);
- //assure that we are in running state
- BOOST_CHECK_EQUAL(CFunctionBlock::e_RUNNING, getState());
-}
-
-CFBTester::~CFBTester() {
- if(0 != m_pstInterfaceSpec) {
- freeAllData(); //clean the interface and connections first.
- delete[] mFBConnData;
- delete[] mFBVarsData;
- delete m_pstInterfaceSpec;
- m_pstInterfaceSpec = 0; //this stops the base classes from any wrong clean-up
- }
-}
-
-void CFBTester::executeTests() {
- if(prepareTests()) {
- evaluateTestResult(testCaseWrongInputEvent(), "Wrong Input Event");
- executeAllTests();
- }
- cleanupTestData();
-}
-
-bool CFBTester::prepareTests() {
- bool retVal = false;
-
- m_nNumSuccesfulTestCases = 0;
- m_nNumUnsuccesfulTestCases = 0;
-
- performCreationTest();
-
- if(0 != mFBUnderTest) {
- performDataInterfaceTests();
-
- mFBUnderTest->changeFBExecutionState(cg_nMGM_CMD_Start);
-
- createEventOutputConnections();
- if(createDataInputConnections()) {
- if(createDataOutputConnections()) {
- retVal = true;
- }
- }
- if(false == retVal) {
- //Inform test runner that we had an issue
- m_nNumUnsuccesfulTestCases++;
- }
- }
-
- return retVal;
-}
-
-void CFBTester::cleanupTestData() {
-
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- for(TPortId i = 0; i < interfaceSpec->m_nNumEOs; i++) {
- CEventConnection *eventCon = mFBUnderTest->getEOConnection(interfaceSpec->m_aunEONames[i]);
- BOOST_CHECK_EQUAL(e_RDY, eventCon->disconnect(this, interfaceSpec->m_aunEONames[i]));
- }
-
- for(unsigned int i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
- CDataConnection *dataCon = mFBUnderTest->getDOConnection(interfaceSpec->m_aunDONames[i]);
- //set it to zero so that when the FB under test is deleted it will not delete our test output data
- dataCon->setValue(0);
-
- BOOST_CHECK_EQUAL(e_RDY, dataCon->disconnect(this, interfaceSpec->m_aunDONames[i]));
- }
-
- for(unsigned int i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
- BOOST_CHECK_EQUAL(e_RDY, mDIConnections[i]->disconnect(mFBUnderTest, interfaceSpec->m_aunDINames[i]));
- }
-
- for_each(mDIConnections.begin(), mDIConnections.end(), SDeleteFunctor());
-
- performFBDeleteTests();
-}
-
-void CFBTester::performFBDeleteTests() {
- bool bTestResult = true;
-
- if(0 != mFBUnderTest) {
- if(mFBUnderTest->isCurrentlyDeleteable()) {
- bTestResult = false;
- }
-
- if(e_RDY != mFBUnderTest->changeFBExecutionState(cg_nMGM_CMD_Stop)) {
- bTestResult = false;
- }
-
- if(!mFBUnderTest->isCurrentlyDeleteable()) {
- bTestResult = false;
- }
-
- if(!CTypeLib::deleteFB(mFBUnderTest)) {
- bTestResult = false;
- }
- } else {
- bTestResult = false;
- }
-
- mFBUnderTest = 0;
-
- evaluateTestResult(bTestResult, "Type deletion");
-}
-
-void CFBTester::executeEvent(int paEIID) {
- CCriticalRegion criticalRegion(mOutputEventLock);
- mFBOutputEvents.push_back(paEIID);
-}
-
-void CFBTester::triggerEvent(TPortId paEIId) {
- CEventChainExecutionThread *execThread = getResource().getResourceEventExecution();
- SEventEntry entry(mFBUnderTest, paEIId);
-
- execThread->startEventChain(&entry);
-
- //Wait till event execution for this input event has finished
- do {
- usleep(1);
- } while(execThread->isProcessingEvents());
-
-}
-
-void CFBTester::performCreationTest() {
- bool testResult = false;
-
- mFBUnderTest = CTypeLib::createFB(getFBTypeId(), getFBTypeId(), getResourcePtr());
-
- if(0 != mFBUnderTest) {
- if((CFunctionBlock::e_IDLE == mFBUnderTest->getState()) && (getFBTypeId() == mFBUnderTest->getFBTypeId())
- && (getFBTypeId() == mFBUnderTest->getInstanceNameId())) {
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- SFBInterfaceSpec* testerInterfaceSpec = new SFBInterfaceSpec;
- testerInterfaceSpec->m_nNumEIs = interfaceSpec->m_nNumEOs;
- testerInterfaceSpec->m_aunEINames = interfaceSpec->m_aunEONames;
- testerInterfaceSpec->m_anEIWith = 0;
- testerInterfaceSpec->m_anEIWithIndexes = 0;
- testerInterfaceSpec->m_nNumEOs = 0;
- testerInterfaceSpec->m_aunEONames = 0;
- testerInterfaceSpec->m_anEOWith = 0;
- testerInterfaceSpec->m_anEOWithIndexes = 0;
- testerInterfaceSpec->m_nNumDIs = interfaceSpec->m_nNumDOs;
- testerInterfaceSpec->m_aunDINames = interfaceSpec->m_aunDONames;
- testerInterfaceSpec->m_aunDIDataTypeNames = interfaceSpec->m_aunDODataTypeNames;
- testerInterfaceSpec->m_nNumDOs = 0;
- testerInterfaceSpec->m_aunDONames = 0;
- testerInterfaceSpec->m_aunDODataTypeNames = 0;
- testerInterfaceSpec->m_nNumAdapters = 0;
- testerInterfaceSpec->m_pstAdapterInstanceDefinition = 0;
-
- mFBConnData =
- (0 != testerInterfaceSpec->m_nNumDIs) ?
- new TForteByte[genFBConnDataSize(testerInterfaceSpec->m_nNumEOs, testerInterfaceSpec->m_nNumDIs, testerInterfaceSpec->m_nNumDOs)] : 0;
- mFBVarsData =
- (0 != testerInterfaceSpec->m_nNumDIs) ? new TForteByte[genFBVarsDataSize(testerInterfaceSpec->m_nNumDIs, testerInterfaceSpec->m_nNumDOs)] : 0;
-
- setupFBInterface(testerInterfaceSpec, mFBConnData, mFBVarsData);
- testResult = true;
- }
- }
-
- evaluateTestResult(testResult, "Type creation");
-}
-
-void CFBTester::evaluateTestResult(bool paSuccess, const char* pa_acTestCaseName) {
- if(paSuccess) {
- ++m_nNumSuccesfulTestCases;
- } else {
- ++m_nNumUnsuccesfulTestCases;
- }
-
- printf("%s - %s: %s\n", CStringDictionary::getInstance().get(getFBTypeId()), pa_acTestCaseName,
- (paSuccess) ? "OK" : "=============> ERROR <====================");
-}
-
-int CFBTester::pullFirstChainEventID() {
- CCriticalRegion criticalRegion(mOutputEventLock);
- int retVal = mFBOutputEvents.front();
- mFBOutputEvents.pop_front();
- return retVal;
-}
-
-bool CFBTester::eventChainEmpty() {
- CCriticalRegion criticalRegion(mOutputEventLock);
- bool retVal = mFBOutputEvents.empty();
- return retVal;
-}
-
-void CFBTester::clearEventChain() {
- mFBOutputEvents.clear();
-}
-
-bool CFBTester::checkForSingleOutputEventOccurence(int paExpectedEOId) {
- //Test if event chain is not empty, that the first entry is the expected one and that no furhter events are there
- return (!eventChainEmpty() && (pullFirstChainEventID() == paExpectedEOId) && eventChainEmpty());
-}
-
-void CFBTester::setInputData(TIEC_ANYPtr paInputData[], size_t paLenght) {
- mInputDataBuffers.reserve(paLenght);
- mInputDataBuffers.assign(paInputData, paInputData + paLenght);
-}
-
-void CFBTester::setOutputData(TIEC_ANYPtr paOutputData[], size_t paLenght) {
- mOutputDataBuffers.reserve(paLenght);
- mOutputDataBuffers.assign(paOutputData, paOutputData + paLenght);
-}
-
-void CFBTester::createEventOutputConnections() {
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- for(TPortId i = 0; i < interfaceSpec->m_nNumEOs; i++) {
- CEventConnection *eventCon = mFBUnderTest->getEOConnection(interfaceSpec->m_aunEONames[i]);
- BOOST_CHECK_EQUAL(e_RDY, eventCon->connect(this, interfaceSpec->m_aunEONames[i]));
- }
-}
-
-bool CFBTester::createDataInputConnections() {
- bool retVal = true;
-
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- if(interfaceSpec->m_nNumDIs == mInputDataBuffers.size()) {
- for(TPortId i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
- CInterface2InternalDataConnection *con = new CInterface2InternalDataConnection();
- mDIConnections.push_back(con);
- con->setValue(mInputDataBuffers[i]);
- if(e_RDY != con->connect(mFBUnderTest, interfaceSpec->m_aunDINames[i])) {
- printf("*** FB test preparation: Given input data value for input %s can not be connected!\n",
- CStringDictionary::getInstance().get(interfaceSpec->m_aunDINames[i]));
- retVal = false;
- break;
- }
- }
- } else {
- printf("*** FB test preparation: Wrong amount of input data given! Expected: %d, got: %lu\n", interfaceSpec->m_nNumDIs,
- static_cast<long unsigned int>(mInputDataBuffers.size()));
- retVal = false;
- }
-
- return retVal;
-}
-
-bool CFBTester::createDataOutputConnections() {
- bool retVal = true;
-
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- if(interfaceSpec->m_nNumDOs == mOutputDataBuffers.size()) {
- for(unsigned int i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
- if(CFBTestConn::canBeConnected(mOutputDataBuffers[i], mFBUnderTest->getDataOutput(interfaceSpec->m_aunDONames[i]))) {
- CDataConnection *dataCon = mFBUnderTest->getDOConnection(interfaceSpec->m_aunDONames[i]);
- dataCon->setValue(mOutputDataBuffers[i]);
- if(e_RDY != dataCon->connect(this, interfaceSpec->m_aunDONames[i])) {
- printf("*** FB test preparation: Cannot create data connection for output %s!\n",
- CStringDictionary::getInstance().get(interfaceSpec->m_aunDONames[i]));
- retVal = false;
- break;
- }
- } else {
- printf("*** FB test preparation: Given output data value for output %s can not be connected!\n",
- CStringDictionary::getInstance().get(interfaceSpec->m_aunDONames[i]));
- retVal = false;
- break;
- }
- }
- } else {
- printf("*** FB test preparation: Wrong amount of output data given! Expected: %d, got: %lu\n", interfaceSpec->m_nNumDOs,
- static_cast<long unsigned int>(mOutputDataBuffers.size()));
- retVal = false;
- }
-
- return retVal;
-
-}
-
-bool CFBTester::testCaseWrongInputEvent() {
- bool bResult = true;
-
- for(TPortId i = mFBUnderTest->getFBInterfaceSpec()->m_nNumEIs; i < cg_nExternalEventID; i++) {
- triggerEvent(i);
- if(!eventChainEmpty()) {
- bResult = false;
- break;
- }
- }
-
- return bResult;
-}
-
-void CFBTester::performDataInterfaceTests() {
- const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
-
- BOOST_CHECK_EQUAL(interfaceSpec->m_nNumDIs, mInputDataBuffers.size());
-
- BOOST_CHECK(0 == mFBUnderTest->getDataInput(CStringDictionary::scm_nInvalidStringId));
- BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDIID(CStringDictionary::scm_nInvalidStringId));
-
- for(TPortId i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
- CIEC_ANY *val = mFBUnderTest->getDataInput(interfaceSpec->m_aunDINames[i]);
- BOOST_CHECK(0 != val);
- //either we have the same datatypeid or the input is any
- BOOST_CHECK((mInputDataBuffers[i]->getDataTypeID(), val->getDataTypeID()) || (CIEC_ANY::e_ANY == val->getDataTypeID()));
-
- BOOST_CHECK_EQUAL(val, mFBUnderTest->getDIFromPortId(i));
- CStringDictionary::TStringId stringIdBuf = interfaceSpec->m_aunDINames[i];
- BOOST_CHECK_EQUAL(val, mFBUnderTest->getVar(&stringIdBuf, 1));
-
- BOOST_CHECK_EQUAL(i, mFBUnderTest->getDIID(interfaceSpec->m_aunDINames[i]));
-
- //we should not be able to get a data output with a data input name
- BOOST_CHECK(0 == mFBUnderTest->getDataOutput(interfaceSpec->m_aunDINames[i]));
- BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDOID(interfaceSpec->m_aunDINames[i]));
- }
-
- for(TPortId i = interfaceSpec->m_nNumDIs; i <= cg_unInvalidPortId; ++i) {
- BOOST_CHECK(0 == mFBUnderTest->getDIFromPortId(i));
- }
-
- BOOST_CHECK_EQUAL(interfaceSpec->m_nNumDOs, mOutputDataBuffers.size());
-
- BOOST_CHECK(0 == mFBUnderTest->getDataOutput(CStringDictionary::scm_nInvalidStringId));
- BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDOID(CStringDictionary::scm_nInvalidStringId));
-
- for(TPortId i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
- CIEC_ANY *val = mFBUnderTest->getDataOutput(interfaceSpec->m_aunDONames[i]);
- BOOST_CHECK(0 != val);
- //either we have the same datatypeid or the input is any
- BOOST_CHECK((mOutputDataBuffers[i]->getDataTypeID(), val->getDataTypeID()) || (CIEC_ANY::e_ANY == val->getDataTypeID()));
-
- CStringDictionary::TStringId stringIdBuf = interfaceSpec->m_aunDONames[i];
- BOOST_CHECK_EQUAL(val, mFBUnderTest->getVar(&stringIdBuf, 1));
-
- BOOST_CHECK_EQUAL(i, mFBUnderTest->getDOID(interfaceSpec->m_aunDONames[i]));
-
- //we should not be able to get a data out with a data output name
- BOOST_CHECK(0 == mFBUnderTest->getDataInput(interfaceSpec->m_aunDONames[i]));
- BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDIID(interfaceSpec->m_aunDONames[i]));
- }
-}
diff --git a/tests/core/fbtests/fbtester.h b/tests/core/fbtests/fbtester.h
deleted file mode 100644
index 9ef37e0..0000000
--- a/tests/core/fbtests/fbtester.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
- * 2018 Johannes Kepler University
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- * Alois Zoitl - introduced new CGenFB class for better handling generic FBs
- *******************************************************************************/
-#ifndef FBTESTER_H_
-#define FBTESTER_H_
-
-#include "funcbloc.h"
-#include "fbtestsmanager.h"
-#include <vector>
-#include <deque>
-
-
-#define SETUP_INPUTDATA(...) \
- { \
- TIEC_ANYPtr inputData[] = {__VA_ARGS__}; \
- setInputData(inputData, (sizeof(inputData) / sizeof(inputData[0])) ); \
- } \
-
-
-#define SETUP_OUTPUTDATA(...) \
- { \
- TIEC_ANYPtr outputData[] = {__VA_ARGS__}; \
- setOutputData(outputData, (sizeof(outputData) / sizeof(outputData[0])) ); \
- } \
-
-
-class CFBTester : public CFunctionBlock{
- public:
- virtual ~CFBTester();
-
- //!execute the test cases for the FB and generate a test report
- void executeTests();
-
- unsigned int getNumSuccesfullTestCases(){
- return m_nNumSuccesfulTestCases;
- }
-
- unsigned int getNumUnsuccesfullTestCases(){
- return m_nNumUnsuccesfulTestCases;
- }
-
- virtual bool connectDI(TPortId , CDataConnection *){
- //for the FB test we can just return true here
- return true;
- }
-
- protected:
- explicit CFBTester(CResource *pa_poTestResource);
-
- /*!\brief invoke the FB under Test with the given event id
- *
- * @param pa_nEIId input event id to be sent to the fb under test
- */
- void triggerEvent(TPortId pa_nEIId);
-
- /*!\brief report the status of a test case
- *
- * This function should be invoked for each test case executed within
- * executeAllTests().
- *
- * @param pa_bSuccess true if the test case was successful
- * @param pa_acTestCaseName name of the test case
- */
- void evaluateTestResult(bool pa_bSuccess, const char* pa_acTestCaseName);
-
- int pullFirstChainEventID();
-
- bool eventChainEmpty();
-
- /*!\brief Remove all events from the event chain bringing the tester into a defined state
- *
- */
- void clearEventChain();
-
- /** Check if only one output event of the given event output Id has been sent by the FB
- *
- * @param pa_nExpectedEOId the output event Id to be checked for
- * @return true if only one event of the given Id is in the event queue
- */
- bool checkForSingleOutputEventOccurence(int pa_nExpectedEOId);
-
- void setInputData(TIEC_ANYPtr paInputData[], size_t paLenght);
- void setOutputData(TIEC_ANYPtr paInputData[], size_t paLenght);
-
- private:
- virtual void executeEvent(int pa_nEIID);
- /*!\brief attempt to create the type from the type library
- *
- */
- void performCreationTest();
-
- /*! \brief execute all tests cases of the FB
- *
- * This function needs to be implemented by the specific test class of
- * a FB. each test cases has to report its results by invoking
- * evaluateTestResult(bool pa_bSuccess, const char* pa_acTestCaseName)
- */
- virtual void executeAllTests() = 0;
-
- /*! Prepare internal variables and the testee for the test
- *
- */
- bool prepareTests();
- void cleanupTestData();
- void performFBDeleteTests();
- void createEventOutputConnections();
- bool createDataInputConnections();
- bool createDataOutputConnections();
-
- bool testCaseWrongInputEvent();
-
- /* Check if all data inputs and data outputs as given in the interface struct can be accessed and
- * if the data types are equal to the data provided by the fb tester
- */
- void performDataInterfaceTests();
-
-
- std::vector<CIEC_ANY *> mInputDataBuffers;
- std::vector<CIEC_ANY *> mOutputDataBuffers;
-
-
- CFunctionBlock *mFBUnderTest;
- std::vector<CInterface2InternalDataConnection *> mDIConnections;
-
- /*! \brief list for storing the output events received from the testee
- *
- * TODO add timestamps to the list
- */
- std::deque<int> mFBOutputEvents;
-
- CSyncObject mOutputEventLock;
-
- unsigned int m_nNumSuccesfulTestCases;
- unsigned int m_nNumUnsuccesfulTestCases;
-
- TForteByte *mFBConnData;
- TForteByte *mFBVarsData;
-};
-
-#endif /* FBTESTER_H_ */
diff --git a/tests/core/fbtests/fbtesterglobalfixture.cpp b/tests/core/fbtests/fbtesterglobalfixture.cpp
new file mode 100644
index 0000000..0680d75
--- /dev/null
+++ b/tests/core/fbtests/fbtesterglobalfixture.cpp
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+
+#include "fbtesterglobalfixture.h"
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "fbtesterglobalfixture_gen.cpp"
+#endif
+#include <boost/test/unit_test.hpp>
+
+const static SFBInterfaceSpec gscTestDevSpec = { 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ 0 };
+
+CDevice *CFBTestDataGlobalFixture::smTestDev;
+CResource *CFBTestDataGlobalFixture::smTestRes;
+
+CFBTestDataGlobalFixture::CFBTestDataGlobalFixture(){
+ //setup is done in the setup so that boost_test can throw exceptions
+ smTestDev = new CDevice(&gscTestDevSpec, CStringDictionary::scm_nInvalidStringId, 0, 0);
+ //mimick the behavior provided by typelib
+ smTestDev->changeFBExecutionState(cg_nMGM_CMD_Reset);
+
+ smTestRes = (CResource *)CTypeLib::createFB(g_nStringIdEMB_RES, g_nStringIdEMB_RES, smTestDev);
+
+ if(smTestRes != 0){
+ smTestDev->addFB(smTestRes);
+ smTestDev->startDevice();
+ }
+}
+
+
+CFBTestDataGlobalFixture::~CFBTestDataGlobalFixture(){
+ smTestDev->changeFBExecutionState(cg_nMGM_CMD_Stop);
+ delete smTestDev;
+ //we don't need to delete the res here as the res is deletes in the destructor of the device
+}
diff --git a/tests/core/fbtests/fbtesterglobalfixture.h b/tests/core/fbtests/fbtesterglobalfixture.h
new file mode 100644
index 0000000..64901bb
--- /dev/null
+++ b/tests/core/fbtests/fbtesterglobalfixture.h
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+#ifndef TESTS_CORE_FBTESTS_FBTESTERGLOBALFIXTURE_H_
+#define TESTS_CORE_FBTESTS_FBTESTERGLOBALFIXTURE_H_
+
+#include <device.h>
+
+/**Global fixture for provding the resource and device needed for fb testing
+ *
+ */
+class CFBTestDataGlobalFixture{
+
+ public:
+ CFBTestDataGlobalFixture();
+ ~CFBTestDataGlobalFixture();
+
+ static CResource *getResource(){
+ return smTestRes;
+ }
+
+ private:
+ static CDevice *smTestDev;
+ static CResource *smTestRes;
+};
+
+
+
+#endif
diff --git a/tests/core/fbtests/fbtestfixture.cpp b/tests/core/fbtests/fbtestfixture.cpp
new file mode 100644
index 0000000..7b9f552
--- /dev/null
+++ b/tests/core/fbtests/fbtestfixture.cpp
@@ -0,0 +1,287 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2014, 2018 ACIN, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
+ *******************************************************************************/
+#include "fbtestfixture.h"
+#include "fbtesterglobalfixture.h"
+#include <device.h>
+#include <criticalregion.h>
+#include <ecet.h>
+
+#ifdef WIN32
+# define usleep(x) Sleep((x)/1000)
+#endif
+
+/**Helper functor for deleting stuff in containers
+ *
+ */
+struct SDeleteFunctor {
+ template<class T>
+ void operator()(T* paVal) const {
+ delete paVal;
+ }
+};
+
+//! Helper class allowing to access the can be connected function from the FBTester
+class CFBTestConn : public CDataConnection {
+ public:
+ static bool canBeConnected(const CIEC_ANY *paSrcDataPoint, const CIEC_ANY *paDstDataPoint) {
+ bool bSpecialCast;
+ return CDataConnection::canBeConnected(paSrcDataPoint, paDstDataPoint, bSpecialCast);
+ }
+ private:
+ //you are not allowed to create this class therefor constructor and destructor are private
+ CFBTestConn();
+ virtual ~CFBTestConn();
+};
+
+
+CFBTestFixtureBase::CFBTestFixtureBase(CStringDictionary::TStringId paTypeId) :
+ CFunctionBlock(CFBTestDataGlobalFixture::getResource(), 0, 0, 0, 0), mTypeId(paTypeId),
+ mFBUnderTest(CTypeLib::createFB(paTypeId, paTypeId, getResourcePtr())), mFBConnData(0), mFBVarsData(0) {
+
+ changeFBExecutionState(cg_nMGM_CMD_Reset);
+ changeFBExecutionState(cg_nMGM_CMD_Start);
+ //assure that we are in running state
+ BOOST_REQUIRE_EQUAL(CFunctionBlock::e_RUNNING, getState());
+ BOOST_REQUIRE(0 != mFBUnderTest);
+}
+
+CFBTestFixtureBase::~CFBTestFixtureBase(){
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ for(size_t i = 0; i < interfaceSpec->m_nNumEOs; i++) {
+ CEventConnection *eventCon = mFBUnderTest->getEOConnection(interfaceSpec->m_aunEONames[i]);
+ BOOST_CHECK_EQUAL(e_RDY, eventCon->disconnect(this, interfaceSpec->m_aunEONames[i]));
+ }
+
+ for(size_t i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
+ CDataConnection *dataCon = mFBUnderTest->getDOConnection(interfaceSpec->m_aunDONames[i]);
+ //set it to zero so that when the FB under test is deleted it will not delete our test output data
+ dataCon->setValue(0);
+
+ BOOST_CHECK_EQUAL(e_RDY, dataCon->disconnect(this, interfaceSpec->m_aunDONames[i]));
+ }
+
+ for(size_t i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
+ BOOST_CHECK_EQUAL(e_RDY, mDIConnections[i]->disconnect(mFBUnderTest, interfaceSpec->m_aunDINames[i]));
+ }
+
+ for_each(mDIConnections.begin(), mDIConnections.end(), SDeleteFunctor());
+
+ performFBDeleteTests();
+
+ if(0 != m_pstInterfaceSpec){
+ freeAllData(); //clean the interface and connections first.
+ delete[] mFBConnData;
+ delete[] mFBVarsData;
+ delete m_pstInterfaceSpec;
+ m_pstInterfaceSpec = 0; //this stops the base classes from any wrong clean-up
+ }
+}
+
+void CFBTestFixtureBase::performFBDeleteTests() {
+ BOOST_CHECK(!mFBUnderTest->isCurrentlyDeleteable());
+
+ BOOST_CHECK_EQUAL(e_RDY, mFBUnderTest->changeFBExecutionState(cg_nMGM_CMD_Stop));
+
+ BOOST_CHECK(mFBUnderTest->isCurrentlyDeleteable());
+
+ BOOST_CHECK(CTypeLib::deleteFB(mFBUnderTest));
+ mFBUnderTest = 0;
+}
+
+void CFBTestFixtureBase::setup(){
+ setupTestInterface();
+ performDataInterfaceTests();
+
+ mFBUnderTest->changeFBExecutionState(cg_nMGM_CMD_Start);
+
+ createEventOutputConnections();
+ createDataInputConnections();
+ createDataOutputConnections();
+}
+
+void CFBTestFixtureBase::executeEvent(int paEIID){
+ CCriticalRegion criticalRegion(mOutputEventLock);
+ mFBOutputEvents.push_back(paEIID);
+}
+
+void CFBTestFixtureBase::triggerEvent(TPortId paEIId) {
+ CEventChainExecutionThread *execThread = getResource().getResourceEventExecution();
+ SEventEntry entry(mFBUnderTest, paEIId);
+
+ execThread->startEventChain(&entry);
+
+ //Wait till event execution for this input event has finished
+ do {
+ usleep(1);
+ } while(execThread->isProcessingEvents());
+
+}
+
+int CFBTestFixtureBase::pullFirstChainEventID() {
+ CCriticalRegion criticalRegion(mOutputEventLock);
+ int retVal = mFBOutputEvents.front();
+ mFBOutputEvents.pop_front();
+ return retVal;
+}
+
+bool CFBTestFixtureBase::eventChainEmpty() {
+ CCriticalRegion criticalRegion(mOutputEventLock);
+ return mFBOutputEvents.empty();
+}
+
+void CFBTestFixtureBase::clearEventChain() {
+ mFBOutputEvents.clear();
+}
+
+bool CFBTestFixtureBase::checkForSingleOutputEventOccurence(int paExpectedEOId) {
+ //Test if event chain is not empty, that the first entry is the expected one and that no furhter events are there
+ return (!eventChainEmpty() && (pullFirstChainEventID() == paExpectedEOId) && eventChainEmpty());
+}
+
+void CFBTestFixtureBase::setInputData(TIEC_ANYPtr paInputData[], size_t paLenght){
+ mInputDataBuffers.reserve(paLenght);
+ mInputDataBuffers.assign(paInputData, paInputData + paLenght);
+}
+
+void CFBTestFixtureBase::setOutputData(TIEC_ANYPtr paOutputData[], size_t paLenght){
+ mOutputDataBuffers.reserve(paLenght);
+ mOutputDataBuffers.assign(paOutputData, paOutputData + paLenght);
+}
+
+void CFBTestFixtureBase::setupTestInterface(){
+ BOOST_CHECK(CFunctionBlock::e_IDLE == mFBUnderTest->getState());
+ BOOST_CHECK(getFBTypeId() == mFBUnderTest->getFBTypeId());
+ BOOST_CHECK(getFBTypeId() == mFBUnderTest->getInstanceNameId());
+
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ SFBInterfaceSpec* testerInterfaceSpec = new SFBInterfaceSpec;
+ testerInterfaceSpec->m_nNumEIs = interfaceSpec->m_nNumEOs;
+ testerInterfaceSpec->m_aunEINames = interfaceSpec->m_aunEONames;
+ testerInterfaceSpec->m_anEIWith = 0;
+ testerInterfaceSpec->m_anEIWithIndexes = 0;
+ testerInterfaceSpec->m_nNumEOs = 0;
+ testerInterfaceSpec->m_aunEONames = 0;
+ testerInterfaceSpec->m_anEOWith = 0;
+ testerInterfaceSpec->m_anEOWithIndexes = 0;
+ testerInterfaceSpec->m_nNumDIs = interfaceSpec->m_nNumDOs;
+ testerInterfaceSpec->m_aunDINames = interfaceSpec->m_aunDONames;
+ testerInterfaceSpec->m_aunDIDataTypeNames = interfaceSpec->m_aunDODataTypeNames;
+ testerInterfaceSpec->m_nNumDOs = 0;
+ testerInterfaceSpec->m_aunDONames = 0;
+ testerInterfaceSpec->m_aunDODataTypeNames = 0;
+ testerInterfaceSpec->m_nNumAdapters = 0;
+ testerInterfaceSpec->m_pstAdapterInstanceDefinition = 0;
+
+ mFBConnData = (0 != testerInterfaceSpec->m_nNumDIs) ?
+ new TForteByte[genFBConnDataSize(testerInterfaceSpec->m_nNumEOs, testerInterfaceSpec->m_nNumDIs, testerInterfaceSpec->m_nNumDOs)] : 0;
+ mFBVarsData = (0 != testerInterfaceSpec->m_nNumDIs) ?
+ new TForteByte[genFBVarsDataSize(testerInterfaceSpec->m_nNumDIs, testerInterfaceSpec->m_nNumDOs)] : 0;
+
+ setupFBInterface(testerInterfaceSpec, mFBConnData, mFBVarsData);
+
+ for(unsigned int i = 0; i < testerInterfaceSpec->m_nNumDIs; ++i){
+ CIEC_ANY *di = getDI(i);
+ if(CIEC_ANY::e_ANY == di->getDataTypeID()){
+ //if one of the inputs is any reclone it with the type given in the test
+ di->~CIEC_ANY();
+ mOutputDataBuffers[i]->clone(reinterpret_cast<TForteByte *>(di));
+ }
+ }
+}
+
+void CFBTestFixtureBase::performDataInterfaceTests() {
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ BOOST_REQUIRE_EQUAL(interfaceSpec->m_nNumDIs, mInputDataBuffers.size());
+
+ BOOST_CHECK(0 == mFBUnderTest->getDataInput(CStringDictionary::scm_nInvalidStringId));
+ BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDIID(CStringDictionary::scm_nInvalidStringId));
+
+ for(TPortId i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
+ CIEC_ANY *val = mFBUnderTest->getDataInput(interfaceSpec->m_aunDINames[i]);
+ BOOST_REQUIRE(0 != val);
+ //either we have the same datatypeid or the input is any
+ BOOST_REQUIRE((mInputDataBuffers[i]->getDataTypeID() == val->getDataTypeID()) || (CIEC_ANY::e_ANY == val->getDataTypeID()));
+
+ BOOST_CHECK_EQUAL(val, mFBUnderTest->getDIFromPortId(i));
+ CStringDictionary::TStringId stringIdBuf = interfaceSpec->m_aunDINames[i];
+ BOOST_CHECK_EQUAL(val, mFBUnderTest->getVar(&stringIdBuf, 1));
+
+ BOOST_CHECK_EQUAL(i, mFBUnderTest->getDIID(interfaceSpec->m_aunDINames[i]));
+
+ //we should not be able to get a data output with a data input name
+ BOOST_CHECK(0 == mFBUnderTest->getDataOutput(interfaceSpec->m_aunDINames[i]));
+ BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDOID(interfaceSpec->m_aunDINames[i]));
+ }
+
+ for(TPortId i = interfaceSpec->m_nNumDIs; i <= cg_unInvalidPortId; ++i) {
+ BOOST_CHECK(0 == mFBUnderTest->getDIFromPortId(i));
+ }
+
+ BOOST_CHECK_EQUAL(interfaceSpec->m_nNumDOs, mOutputDataBuffers.size());
+
+ BOOST_CHECK(0 == mFBUnderTest->getDataOutput(CStringDictionary::scm_nInvalidStringId));
+ BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDOID(CStringDictionary::scm_nInvalidStringId));
+
+ for(TPortId i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
+ CIEC_ANY *val = mFBUnderTest->getDataOutput(interfaceSpec->m_aunDONames[i]);
+ BOOST_REQUIRE(0 != val);
+ //either we have the same datatypeid or the input is any
+ BOOST_REQUIRE((mOutputDataBuffers[i]->getDataTypeID() == val->getDataTypeID()) || (CIEC_ANY::e_ANY == val->getDataTypeID()));
+
+ CStringDictionary::TStringId stringIdBuf = interfaceSpec->m_aunDONames[i];
+ BOOST_CHECK_EQUAL(val, mFBUnderTest->getVar(&stringIdBuf, 1));
+
+ BOOST_CHECK_EQUAL(i, mFBUnderTest->getDOID(interfaceSpec->m_aunDONames[i]));
+
+ //we should not be able to get a data out with a data output name
+ BOOST_CHECK(0 == mFBUnderTest->getDataInput(interfaceSpec->m_aunDONames[i]));
+ BOOST_CHECK_EQUAL(cg_unInvalidPortId, mFBUnderTest->getDIID(interfaceSpec->m_aunDONames[i]));
+ }
+}
+
+void CFBTestFixtureBase::createEventOutputConnections() {
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ for(TPortId i = 0; i < interfaceSpec->m_nNumEOs; i++) {
+ CEventConnection *eventCon = mFBUnderTest->getEOConnection(interfaceSpec->m_aunEONames[i]);
+ BOOST_REQUIRE_EQUAL(e_RDY, eventCon->connect(this, interfaceSpec->m_aunEONames[i]));
+ }
+}
+
+void CFBTestFixtureBase::createDataInputConnections() {
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ for(size_t i = 0; i < interfaceSpec->m_nNumDIs; ++i) {
+ CInterface2InternalDataConnection *con = new CInterface2InternalDataConnection();
+ mDIConnections.push_back(con);
+ con->setValue(mInputDataBuffers[i]);
+ BOOST_REQUIRE_EQUAL(e_RDY, con->connect(mFBUnderTest, interfaceSpec->m_aunDINames[i]));
+ }
+}
+
+void CFBTestFixtureBase::createDataOutputConnections() {
+ const SFBInterfaceSpec* interfaceSpec = mFBUnderTest->getFBInterfaceSpec();
+
+ for(size_t i = 0; i < interfaceSpec->m_nNumDOs; ++i) {
+ if(CFBTestConn::canBeConnected(mOutputDataBuffers[i], mFBUnderTest->getDataOutput(interfaceSpec->m_aunDONames[i]))) {
+ CDataConnection *dataCon = mFBUnderTest->getDOConnection(interfaceSpec->m_aunDONames[i]);
+ BOOST_REQUIRE_EQUAL(e_RDY, dataCon->connect(this, interfaceSpec->m_aunDONames[i]));
+ dataCon->getValue()->~CIEC_ANY();
+ dataCon->setValue(mOutputDataBuffers[i]);
+ }
+ }
+}
diff --git a/tests/core/fbtests/fbtestfixture.h b/tests/core/fbtests/fbtestfixture.h
new file mode 100644
index 0000000..c74398a
--- /dev/null
+++ b/tests/core/fbtests/fbtestfixture.h
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2014, 2018 ACIN, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
+ *******************************************************************************/
+#ifndef TESTS_CORE_FBTESTS_FBTESTFIXTURE_H_
+#define TESTS_CORE_FBTESTS_FBTESTFIXTURE_H_
+
+#include <fortenew.h>
+#include <funcbloc.h>
+#include <if2indco.h>
+#include <forte_sync.h>
+#include <boost/test/unit_test.hpp>
+#include <vector>
+#include <deque>
+
+#define SETUP_INPUTDATA(...) \
+ { \
+ TIEC_ANYPtr inputData[] = {__VA_ARGS__}; \
+ setInputData(inputData, (sizeof(inputData) / sizeof(inputData[0])) ); \
+ } \
+
+
+#define SETUP_OUTPUTDATA(...) \
+ { \
+ TIEC_ANYPtr outputData[] = {__VA_ARGS__}; \
+ setOutputData(outputData, (sizeof(outputData) / sizeof(outputData[0])) ); \
+ } \
+
+
+class CFBTestFixtureBase : public CFunctionBlock{
+ public:
+ ~CFBTestFixtureBase();
+
+ CStringDictionary::TStringId getFBTypeId(void) const {
+ return mTypeId;
+ }
+
+ protected:
+ explicit CFBTestFixtureBase(CStringDictionary::TStringId paTypeId);
+
+ void setup();
+
+ /*!\brief invoke the FB under Test with the given event id
+ *
+ * @param paEIId input event id to be sent to the fb under test
+ */
+ void triggerEvent(TPortId paEIId);
+
+ int pullFirstChainEventID();
+
+ bool eventChainEmpty();
+
+ /*!\brief Remove all events from the event chain bringing the tester into a defined state
+ *
+ */
+ void clearEventChain();
+
+ /** Check if only one output event of the given event output Id has been sent by the FB
+ *
+ * @param paExpectedEOId the output event Id to be checked for
+ * @return true if only one event of the given Id is in the event queue
+ */
+ bool checkForSingleOutputEventOccurence(int paExpectedEOId);
+
+ void setInputData(TIEC_ANYPtr paInputData[], size_t paLenght);
+ void setOutputData(TIEC_ANYPtr paInputData[], size_t paLenght);
+
+ private:
+ virtual void executeEvent(int paEIID);
+
+ void setupTestInterface();
+ void performFBDeleteTests();
+
+ /* Check if all data inputs and data outputs as given in the interface struct can be accessed and
+ * if the data types are equal to the data provided by the fb tester
+ */
+ void performDataInterfaceTests();
+
+ void createEventOutputConnections();
+ void createDataInputConnections();
+ void createDataOutputConnections();
+
+ CStringDictionary::TStringId mTypeId;
+ CFunctionBlock *mFBUnderTest;
+ std::vector<CInterface2InternalDataConnection *> mDIConnections;
+
+ /*! \brief list for storing the output events received from the testee
+ *
+ * TODO add timestamps to the list
+ */
+ std::deque<int> mFBOutputEvents;
+
+ CSyncObject mOutputEventLock;
+
+ std::vector<CIEC_ANY *> mInputDataBuffers;
+ std::vector<CIEC_ANY *> mOutputDataBuffers;
+
+ TForteByte *mFBConnData;
+ TForteByte *mFBVarsData;
+
+};
+
+
+
+#endif /* TESTS_CORE_FBTESTS_FBTESTFIXTURE_H_ */
diff --git a/tests/core/fbtests/fbtestsmanager.cpp b/tests/core/fbtests/fbtestsmanager.cpp
deleted file mode 100644
index 9972ac3..0000000
--- a/tests/core/fbtests/fbtestsmanager.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 - 2015 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- *******************************************************************************/
-#include "fbtestsmanager.h"
-#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
-#include "fbtestsmanager_gen.cpp"
-#endif
-#include "fbtester.h"
-#include <boost/test/unit_test.hpp>
-#include "../../src/core/device.h"
-#include <stdio.h>
-
-CFBTesterEntry::CFBTesterEntry(CStringDictionary::TStringId pa_nTypeNameId,
- TFBTesterCreateFunc pa_pfuncCreateTester) :
- CTypeLib::CTypeEntry(pa_nTypeNameId), m_pfuncCreateTester(pa_pfuncCreateTester){
- CFBTestsManager::getInstance().addFBTester(this);
-}
-
-/*******************************************************************************/
-DEFINE_SINGLETON(CFBTestsManager)
-
-CFBTestsManager::CFBTestsManager(): m_nNumSuccessfulTestCases(0), m_nNumUnsuccessfulTestCases(0){
-}
-
-CFBTestsManager::~CFBTestsManager(){
-}
-
-unsigned int CFBTestsManager::runAllTests(CResource *paRessource){
- clearTestLog();
-
- printf("*****************************************************\n");
- printf("*** Running all FB Tests!");
- printf("*** \n");
-
- for(TFBTesterList::Iterator itRunner = m_lstroFBTesterList.begin();
- itRunner != m_lstroFBTesterList.end(); ++itRunner){
- executeFBTests(*itRunner, paRessource);
- }
-
- printf("*****************************************************\n");
- printf("*** Overall Test Summary:\n");
- printf("*** Executed %u test cases (%u successful, %u unsuccessful)\n", m_nNumSuccessfulTestCases
- + m_nNumUnsuccessfulTestCases, m_nNumSuccessfulTestCases, m_nNumUnsuccessfulTestCases);
- printf("*****************************************************\n");
-
- return m_nNumUnsuccessfulTestCases;
-}
-
-void CFBTestsManager::addFBTester(CFBTesterEntry* pa_poFBTester){
- m_lstroFBTesterList.pushBack(pa_poFBTester);
-}
-
-void CFBTestsManager::executeFBTests(CFBTesterEntry* pa_poFBTestEntery, CResource *paRessource){
- CFBTester* poTester = pa_poFBTestEntery->createFBInstance(paRessource);
- poTester->executeTests();
-
- m_nNumSuccessfulTestCases += poTester->getNumSuccesfullTestCases();
- m_nNumUnsuccessfulTestCases += poTester->getNumUnsuccesfullTestCases();
-
- delete poTester;
-}
-
-void CFBTestsManager::clearTestLog(){
- m_nNumSuccessfulTestCases = 0;
- m_nNumUnsuccessfulTestCases = 0;
-}
-
-BOOST_AUTO_TEST_SUITE(FBTests)
-
- const SFBInterfaceSpec scm_stFBInterfaceSpec = { 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0,
- 0 };
-
- BOOST_AUTO_TEST_CASE(runallFBTests){
- CDevice dev(&scm_stFBInterfaceSpec, CStringDictionary::scm_nInvalidStringId, 0, 0);
- //mimick the behavior provided by typelib
- dev.changeFBExecutionState(cg_nMGM_CMD_Reset);
-
- CResource *res = (CResource *)CTypeLib::createFB(g_nStringIdEMB_RES, g_nStringIdEMB_RES, &dev);
- BOOST_CHECK(0 != res);
-
- if(res != 0){
- dev.addFB(res);
-
- BOOST_CHECK_EQUAL(1, dev.startDevice());
- CFunctionBlock::E_FBStates state = dev.getState();
- BOOST_CHECK_EQUAL(CFunctionBlock::e_RUNNING, state);
-
- if(CFunctionBlock::e_RUNNING == state){
- //only run fb tests if the environment is correctly up and running
- BOOST_CHECK_EQUAL(0, CFBTestsManager::getInstance().runAllTests(res));
- }
-
- BOOST_CHECK_EQUAL(false, res->isCurrentlyDeleteable());
- BOOST_CHECK_EQUAL(e_RDY, dev.changeFBExecutionState(cg_nMGM_CMD_Stop));
- BOOST_CHECK_EQUAL(true, res->isCurrentlyDeleteable());
- //as we added the resource to the device's object handler it will be deleted by it
- }
-
- }
-
- BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/core/fbtests/fbtestsmanager.h b/tests/core/fbtests/fbtestsmanager.h
deleted file mode 100644
index df0f512..0000000
--- a/tests/core/fbtests/fbtestsmanager.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
- *******************************************************************************/
-#ifndef FBTESTSMANAGER_H_
-#define FBTESTSMANAGER_H_
-
-#include <stringdict.h>
-#include <typelib.h>
-#include <fortelist.h>
-#include <resource.h>
-
-class CFBTester;
-
-typedef CFBTester *(*TFBTesterCreateFunc)(CResource *);
-
-
-#define DECLARE_FB_TESTER(testerclass) \
- private: \
- const static CFBTesterEntry csm_oFBTesterEntry_##fbclass; \
- public: \
- static CFBTester *createFBTester(CResource *m_poTestResource){ \
- return new testerclass(m_poTestResource); \
- }; \
- virtual CStringDictionary::TStringId getFBTypeId(void) const; \
- private:
-
-#define DEFINE_FB_TESTER(testerclass, fbTypeNameId)\
- const CFBTesterEntry testerclass::csm_oFBTesterEntry_##fbclass((fbTypeNameId), testerclass::createFBTester); \
- CStringDictionary::TStringId testerclass::getFBTypeId(void) const {return (fbTypeNameId); }
-
-
-class CFBTesterEntry : public CTypeLib::CTypeEntry{
- public:
- CFBTesterEntry(CStringDictionary::TStringId pa_nTypeNameId, TFBTesterCreateFunc pa_pfuncCreateTester);
-
- CFBTester *createFBInstance(CResource *m_poTestResource){
- return m_pfuncCreateTester(m_poTestResource);
- }
- private:
- TFBTesterCreateFunc m_pfuncCreateTester;
-};
-
-
-class CFBTestsManager{
- DECLARE_SINGLETON(CFBTestsManager)
-
- public:
- /**\brief Run the FB test for all registered function block tests.
- *
- * \return returns the number of unsuccessful test cases
- */
- unsigned int runAllTests(CResource *paRessource);
- void runTestsForFB(CStringDictionary::TStringId pa_nFBTypeNameId);
-
- void addFBTester(CFBTesterEntry* pa_poFBTester);
-
- private:
- void executeFBTests(CFBTesterEntry* pa_poFBTestEntery, CResource *paRessource);
- void clearTestLog();
-
- typedef CSinglyLinkedList<CFBTesterEntry*> TFBTesterList;
-
- TFBTesterList m_lstroFBTesterList;
-
- unsigned int m_nNumSuccessfulTestCases;
- unsigned int m_nNumUnsuccessfulTestCases;
-};
-
-#endif /* FBTESTSMANGER_H_ */
diff --git a/tests/core/iec61131_functionstests.cpp b/tests/core/iec61131_functionstests.cpp
index 8756a80..89aad02 100644
--- a/tests/core/iec61131_functionstests.cpp
+++ b/tests/core/iec61131_functionstests.cpp
@@ -1,17 +1,19 @@
/*******************************************************************************
-* Copyright (c) 2011 - 2013, 2018 TU Vienna/ACIN, nxtControl, Profactor GmbH, fortiss GmbH
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Martin Melik Merkumians - initial API and implementation and/or initial documentation
-* Martin Melik-Merkumians - adds test for FIND
-* Martin Melik-Merkumians - adds tests for LEN, LEFT, RIGHT, MID, REPLACE, DELETE,
-* INSERT, EQ, NE, ADD, and AND
-* Martin Melik-Merkumians - adds test for TRUNC
-*******************************************************************************/
+ * Copyright (c) 2011 - 2013, 2018 TU Vienna/ACIN, nxtControl, Profactor GmbH, fortiss GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik Merkumians - initial API and implementation and/or initial documentation
+ * Martin Melik-Merkumians - adds test for FIND
+ * Martin Melik-Merkumians - adds tests for LEN, LEFT, RIGHT, MID, REPLACE, DELETE,
+ * INSERT, EQ, NE, ADD, and AND
+ * Martin Melik-Merkumians - adds test for TRUNC
+ *******************************************************************************/
#include <boost/test/unit_test.hpp>
diff --git a/tests/core/interalvartests.cpp b/tests/core/interalvartests.cpp
deleted file mode 100644
index 4f8585c..0000000
--- a/tests/core/interalvartests.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2018 Johannes Kepler University
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Alois Zoitl - initial API and implementation and/or initial documentation
-*******************************************************************************/
-
-#include <boost/test/unit_test.hpp>
-#include <basicfb.h>
-
-#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
-#include "interalvartests_gen.cpp"
-#else
-#include "stringlist.h"
-#endif
-
-const SFBInterfaceSpec gcEmptyInterface = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-class CInternalVarTestFB : public CBasicFB{
- public:
- CInternalVarTestFB(const SInternalVarsInformation *paVarInternals, TForteByte *paBasicFBVarsData) :
- CBasicFB(0, &gcEmptyInterface, CStringDictionary::scm_nInvalidStringId,
- paVarInternals, 0, paBasicFBVarsData) {
- }
-
- CIEC_ANY *getVarInternal(unsigned int paVarIntNum){
- return CBasicFB::getVarInternal(paVarIntNum);
- }
-
- virtual CStringDictionary::TStringId getFBTypeId() const {
- return CStringDictionary::scm_nInvalidStringId;
- }
-
- virtual void executeEvent(int){
- //nothiing to do here
- }
-};
-
-
-BOOST_AUTO_TEST_SUITE(internal_vars)
-
-BOOST_AUTO_TEST_CASE(checkNullInternalVarsAreAllowed){
- //check that we can create an FB where we have a 0 internal struct which has all parts set to zero
- TForteByte varsDataBuffer[10];
- CStringDictionary::TStringId namelist[1] = {g_nStringIdDT};
-
- CInternalVarTestFB testFB(0, varsDataBuffer);
- BOOST_CHECK(0 == testFB.getVar(namelist, 1));
- //check that we should at least get the ECC variable
- namelist[0] = CStringDictionary::getInstance().insert("$ECC");
- BOOST_CHECK(0 != testFB.getVar(namelist, 1));
-}
-
-
-BOOST_AUTO_TEST_CASE(checkEmptyInternalVarsAreAllowed){
- //check that we can create an FB where we have a var internal struct which has all parts set to zero
- SInternalVarsInformation varData = {0,0,0};
- TForteByte varsDataBuffer[10];
- CStringDictionary::TStringId namelist[1] = {g_nStringIdDT};
-
- CInternalVarTestFB testFB(&varData, varsDataBuffer);
- BOOST_CHECK(0 == testFB.getVar(namelist, 1));
- //check that we should at least get the ECC variable
- namelist[0] = CStringDictionary::getInstance().insert("$ECC");
- BOOST_CHECK(0 != testFB.getVar(namelist, 1));
-}
-
-BOOST_AUTO_TEST_CASE(sampleInteralVarList){
-
- CStringDictionary::TStringId varInternalNames[] = {g_nStringIdQU, g_nStringIdQD, g_nStringIdCV};
- CStringDictionary::TStringId varInternalTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdUINT};
-
- SInternalVarsInformation varData{3, varInternalNames, varInternalTypeIds};
- TForteByte varsDataBuffer[CBasicFB::genBasicFBVarsDataSize(0, 0, varData.m_nNumIntVars)];
-
- CInternalVarTestFB testFB(&varData, varsDataBuffer);
-
- for(size_t i = 0; i < varData.m_nNumIntVars; i++){
- CIEC_ANY *var = testFB.getVar(&(varInternalNames[i]), 1);
- BOOST_CHECK(0 != var);
- BOOST_CHECK_EQUAL(var, testFB.getVarInternal(static_cast<unsigned int>(i)));
- }
-
- BOOST_CHECK_EQUAL(CIEC_ANY::e_BOOL, testFB.getVarInternal(0)->getDataTypeID());
- BOOST_CHECK_EQUAL(CIEC_ANY::e_BOOL, testFB.getVarInternal(1)->getDataTypeID());
- BOOST_CHECK_EQUAL(CIEC_ANY::e_UINT, testFB.getVarInternal(2)->getDataTypeID());
-}
-
-
-BOOST_AUTO_TEST_SUITE_END()
-
-
diff --git a/tests/core/internalvartests.cpp b/tests/core/internalvartests.cpp
index eb86379..5610ce5 100644
--- a/tests/core/internalvartests.cpp
+++ b/tests/core/internalvartests.cpp
@@ -1,19 +1,22 @@
/*******************************************************************************
-* Copyright (c) 2018 Johannes Kepler University
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Alois Zoitl - initial API and implementation and/or initial documentation
-*******************************************************************************/
+ * Copyright (c) 2018 Johannes Kepler University
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ *******************************************************************************/
#include <boost/test/unit_test.hpp>
#include <basicfb.h>
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
-# include "internalvartests_gen.cpp"
+//don't add a space between # and include so the cmake script finds the line
+#include "internalvartests_gen.cpp"
#else
# include "stringlist.h"
#endif
diff --git a/tests/core/mgmstatemachinetest.cpp b/tests/core/mgmstatemachinetest.cpp
index 1dcd8cf..fd10e19 100644
--- a/tests/core/mgmstatemachinetest.cpp
+++ b/tests/core/mgmstatemachinetest.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/nameidentifiertest.cpp b/tests/core/nameidentifiertest.cpp
index c1f442b..6d5891e 100644
--- a/tests/core/nameidentifiertest.cpp
+++ b/tests/core/nameidentifiertest.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2015 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/stringdicttests.cpp b/tests/core/stringdicttests.cpp
index 8636c84..3fddba8 100644
--- a/tests/core/stringdicttests.cpp
+++ b/tests/core/stringdicttests.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/typelibdatatypetests.cpp b/tests/core/typelibdatatypetests.cpp
index 5c08f9e..3756ee1 100644
--- a/tests/core/typelibdatatypetests.cpp
+++ b/tests/core/typelibdatatypetests.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/utils/CMakeLists.txt b/tests/core/utils/CMakeLists.txt
index cff9916..5ca4bce 100644
--- a/tests/core/utils/CMakeLists.txt
+++ b/tests/core/utils/CMakeLists.txt
@@ -1,12 +1,13 @@
#/*******************************************************************************
-# * Copyright (c) 2013 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2013 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
diff --git a/tests/core/utils/parameterParserTest.cpp b/tests/core/utils/parameterParserTest.cpp
index e28c444..f97b2b0 100644
--- a/tests/core/utils/parameterParserTest.cpp
+++ b/tests/core/utils/parameterParserTest.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -13,325 +14,384 @@
#include "../../../src/core/datatypes/forte_string.h"
#include <string.h>
-
-// For most cases, the test case checks the boundaries of the number of
-// arguments specified, or the actual amount of parameter in the string
-// E.g.: If 3 arguments were specified in the constructor,
-// it will be checked for index 2,3 and 4, event though only up to index 2
-// there should be something. In the case the string has 4 arguments, index
-// up to 5 should be checked, to make sure the parser is not parsing more than
-// asked
BOOST_AUTO_TEST_SUITE(ParameterParser_Test)
- BOOST_AUTO_TEST_CASE(ParameterParser_NullString){
- CParameterParser test2(0, 2);
+ void testParameterParameterParser_NullString(CParameterParser& paParser) {
+ BOOST_CHECK(1 == paParser.parseParameters());
- BOOST_CHECK(1 == test2.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test2[0], ""));
- BOOST_CHECK(0 == test2[1]);
-
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == paParser[1]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_SourceStringRemainsUntouched){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test2(emptyTest.getValue(), 2);
+ BOOST_AUTO_TEST_CASE(ParameterParser_NullString) {
+ CParameterParser test1(0, ',');
+ CParameterParser test2(0, ',', 0);
+ CParameterParser test3(0, ',', 1);
+ CParameterParser test4(0, ',', 20);
+
+ testParameterParameterParser_NullString(test1);
+ testParameterParameterParser_NullString(test2);
+ testParameterParameterParser_NullString(test3);
+ testParameterParameterParser_NullString(test4);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_SourceStringRemainsUntouched) {
+ CIEC_STRING stringTest = "123,456";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ BOOST_CHECK(2 == test1.parseParameters());
+ BOOST_CHECK(0 == strcmp(stringTest.getValue(), "123,456"));
BOOST_CHECK(2 == test2.parseParameters());
- BOOST_CHECK(0 == strcmp(emptyTest.getValue(), "123,456"));
-
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_InitializedToZero){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test2(emptyTest.getValue(), 2);
-
- BOOST_CHECK(0 == test2[0]);
- BOOST_CHECK(0 == test2[1]);
- BOOST_CHECK(0 == test2[2]);
- BOOST_CHECK(0 == test2[3]);
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_RegularParamsZeroArgumentsSpecified){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test0(emptyTest.getValue(), 0);
-
- BOOST_CHECK(0 == test0.parseParameters());
-
- BOOST_CHECK(0 == test0[0]);
- BOOST_CHECK(0 == test0[1]);
-
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_RegularParamsTooFewArgumentsSpecified){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test1(emptyTest.getValue(), 1);
-
- BOOST_CHECK(1 == test1.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test1[0], "123"));
- BOOST_CHECK(0 == test1[1]);
- BOOST_CHECK(0 == test1[2]);
-
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_RegularParamsRightArgumentsSpecified){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test2(emptyTest.getValue(), 2);
-
- BOOST_CHECK(2 == test2.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test2[0], "123"));
- BOOST_CHECK(0 == strcmp(test2[1], "456"));
- BOOST_CHECK(0 == test2[2]);
- BOOST_CHECK(0 == test2[3]);
-
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_RegularParamsTooManyArgumentsSpecified){
- CIEC_STRING emptyTest = "123,456";
- CParameterParser test3(emptyTest.getValue(), 3);
+ BOOST_CHECK(0 == strcmp(stringTest.getValue(), "123,456"));
BOOST_CHECK(2 == test3.parseParameters());
+ BOOST_CHECK(0 == strcmp(stringTest.getValue(), "123,456"));
- BOOST_CHECK(0 == strcmp(test3[0], "123"));
- BOOST_CHECK(0 == strcmp(test3[1], "456"));
- BOOST_CHECK(0 == test3[3]);
-
+ BOOST_CHECK(2 == test4.parseParameters());
+ BOOST_CHECK(0 == strcmp(stringTest.getValue(), "123,456"));
}
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyStringZeroArgumentsSpecified){
- CIEC_STRING emptyTest = "";
- CParameterParser test0(emptyTest.getValue(), 0);
-
- BOOST_CHECK(0 == test0.parseParameters());
-
- BOOST_CHECK(0 == test0[0]);
- BOOST_CHECK(0 == test0[1]);
-
+ void testParameterParser_InitializedToZero(CParameterParser& paParser) {
+ BOOST_CHECK(0 == paParser[0]);
+ BOOST_CHECK(0 == paParser[1]);
+ BOOST_CHECK(0 == paParser[2]);
+ BOOST_CHECK(0 == paParser[3]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyStringRightArgumentsSpecified){
- CIEC_STRING emptyTest = "";
- CParameterParser test1(emptyTest.getValue(), 1);
+ BOOST_AUTO_TEST_CASE(ParameterParser_InitializedToZero) {
+ CIEC_STRING stringTest = "123,456";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
- BOOST_CHECK(1 == test1.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test1[0], ""));
- BOOST_CHECK(0 == test1[1]);
- BOOST_CHECK(0 == test1[2]);
-
+ testParameterParser_InitializedToZero(test1);
+ testParameterParser_InitializedToZero(test2);
+ testParameterParser_InitializedToZero(test3);
+ testParameterParser_InitializedToZero(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyStringTooManyArgumentsSpecified){
- CIEC_STRING emptyTest = "";
- CParameterParser test2(emptyTest.getValue(), 2);
+ void testParameterParser_RegularParams(CParameterParser& paParser) {
+ BOOST_CHECK(2 == paParser.parseParameters());
- BOOST_CHECK(1 == test2.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test2[0], ""));
- BOOST_CHECK(0 == test2[1]);
- BOOST_CHECK(0 == test2[2]);
- BOOST_CHECK(0 == test2[3]);
+ BOOST_CHECK(0 == strcmp(paParser[0], "123"));
+ BOOST_CHECK(0 == strcmp(paParser[1], "456"));
+ BOOST_CHECK(0 == paParser[2]);
+ BOOST_CHECK(0 == paParser[3]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpacesZeroArgumentsSpecified){
- CIEC_STRING emptyTest = " 1 2 3 , 4 56 , 789 ";
- CParameterParser test0(emptyTest.getValue(), 0);
+ BOOST_AUTO_TEST_CASE(ParameterParser_RegularParams) {
+ CIEC_STRING stringTest = "123,456";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
- BOOST_CHECK(0 == test0.parseParameters());
-
- BOOST_CHECK(0 == test0[0]);
- BOOST_CHECK(0 == test0[1]);
-
+ testParameterParser_RegularParams(test1);
+ testParameterParser_RegularParams(test2);
+ testParameterParser_RegularParams(test3);
+ testParameterParser_RegularParams(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpacesTooFewArgumentsSpecified){
- CIEC_STRING emptyTest = " 1 2 3 , 4 56 , 789 ";
- CParameterParser test2(emptyTest.getValue(), 2);
+ void testParameterParser_EmptyString(CParameterParser& paParser) {
+ BOOST_CHECK(1 == paParser.parseParameters());
- BOOST_CHECK(2 == test2.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test2[0], "1 2 3"));
- BOOST_CHECK(0 == strcmp(test2[1], "4 56"));
- BOOST_CHECK(0 == test2[2]);
- BOOST_CHECK(0 == test2[3]);
-
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == paParser[1]);
+ BOOST_CHECK(0 == paParser[2]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpacesRightArgumentsSpecified){
- CIEC_STRING emptyTest = " 1 2 3 , 4 56 , 789 ";
- CParameterParser test3(emptyTest.getValue(), 3);
+ BOOST_AUTO_TEST_CASE(ParameterParser_EmptyString) {
+ CIEC_STRING stringTest = "";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
- BOOST_CHECK(3 == test3.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test3[0], "1 2 3"));
- BOOST_CHECK(0 == strcmp(test3[1], "4 56"));
- BOOST_CHECK(0 == strcmp(test3[2], "789"));
- BOOST_CHECK(0 == test3[3]);
-
+ testParameterParser_EmptyString(test1);
+ testParameterParser_EmptyString(test2);
+ testParameterParser_EmptyString(test3);
+ testParameterParser_EmptyString(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpacesTooManyArgumentsSpecified){
- CIEC_STRING emptyTest = " 1 2 3 , 4 56 , 789 ";
- CParameterParser test4(emptyTest.getValue(), 4);
+ void testParameterParser_BlankSpaces(CParameterParser& paParser) {
+ BOOST_CHECK(3 == paParser.parseParameters());
- BOOST_CHECK(3 == test4.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test4[0], "1 2 3"));
- BOOST_CHECK(0 == strcmp(test4[1], "4 56"));
- BOOST_CHECK(0 == strcmp(test4[2], "789"));
- BOOST_CHECK(0 == test4[3]);
- BOOST_CHECK(0 == test4[4]);
+ BOOST_CHECK(0 == strcmp(paParser[0], "1 2 3"));
+ BOOST_CHECK(0 == strcmp(paParser[1], "4 56"));
+ BOOST_CHECK(0 == strcmp(paParser[2], "789"));
+ BOOST_CHECK(0 == paParser[3]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParameters){
- CIEC_STRING emptyTest = ",123,456,,789,";
- CParameterParser test7(emptyTest.getValue(), 7);
+ BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpaces) {
+ CIEC_STRING stringTest = " 1 2 3 , 4 56 , 789 ";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
- BOOST_CHECK(6 == test7.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test7[0], ""));
- BOOST_CHECK(0 == strcmp(test7[1], "123"));
- BOOST_CHECK(0 == strcmp(test7[2], "456"));
- BOOST_CHECK(0 == strcmp(test7[3], ""));
- BOOST_CHECK(0 == strcmp(test7[4], "789"));
- BOOST_CHECK(0 == strcmp(test7[5], ""));
- BOOST_CHECK(0 == test7[6]);
- BOOST_CHECK(0 == test7[7]);
+ testParameterParser_BlankSpaces(test1);
+ testParameterParser_BlankSpaces(test2);
+ testParameterParser_BlankSpaces(test3);
+ testParameterParser_BlankSpaces(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_OtherSeparatorPresentInString){
- CIEC_STRING emptyTest = " 123, 456, 789 ";
- CParameterParser test2(emptyTest.getValue(), 2, '5');
+ void testParameterParser_EmptyParameters(CParameterParser& paParser) {
+ BOOST_CHECK(6 == paParser.parseParameters());
- BOOST_CHECK(2 == test2.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test2[0], "123, 4"));
- BOOST_CHECK(0 == strcmp(test2[1], "6, 789"));
- BOOST_CHECK(0 == test2[2]);
-
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], "123"));
+ BOOST_CHECK(0 == strcmp(paParser[2], "456"));
+ BOOST_CHECK(0 == strcmp(paParser[3], ""));
+ BOOST_CHECK(0 == strcmp(paParser[4], "789"));
+ BOOST_CHECK(0 == strcmp(paParser[5], ""));
+ BOOST_CHECK(0 == paParser[6]);
+ BOOST_CHECK(0 == paParser[7]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_OtherSeparatorNonPresentInString){
- CIEC_STRING emptyTest = " 123, 456, 789 ";
- CParameterParser test1(emptyTest.getValue(), 1, ';');
+ BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParameters) {
+ CIEC_STRING stringTest = ",123,456,,789,";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
- BOOST_CHECK(1 == test1.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test1[0], "123, 456, 789"));
- BOOST_CHECK(0 == test1[1]);
-
+ testParameterParser_EmptyParameters(test1);
+ testParameterParser_EmptyParameters(test2);
+ testParameterParser_EmptyParameters(test3);
+ testParameterParser_EmptyParameters(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpaceSeparator){
- CIEC_STRING emptyTest = " 123, 456, 789 ";
- CParameterParser test8(emptyTest.getValue(), 8, ' ');
+ void testParameterParser_OtherSeparatorPresentInString(CParameterParser& paParser) {
+ BOOST_CHECK(2 == paParser.parseParameters());
- BOOST_CHECK(7 == test8.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test8[0], ""));
- BOOST_CHECK(0 == strcmp(test8[1], "123,"));
- BOOST_CHECK(0 == strcmp(test8[2], "456,"));
- BOOST_CHECK(0 == strcmp(test8[3], "789"));
- BOOST_CHECK(0 == strcmp(test8[4], ""));
- BOOST_CHECK(0 == strcmp(test8[5], ""));
- BOOST_CHECK(0 == strcmp(test8[6], ""));
- BOOST_CHECK(0 == test8[7]);
+ BOOST_CHECK(0 == strcmp(paParser[0], "123, 4"));
+ BOOST_CHECK(0 == strcmp(paParser[1], "6, 789"));
+ BOOST_CHECK(0 == paParser[2]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_OnlyBlankSpace){
- CIEC_STRING emptyTest = " "; //3 Blank Spaces
- CParameterParser test4(emptyTest.getValue(), 4);
+ BOOST_AUTO_TEST_CASE(ParameterParser_OtherSeparatorPresentInString) {
+ CIEC_STRING stringTest = " 123, 456, 789 ";
+ CParameterParser test1(stringTest.getValue(), '5');
+ CParameterParser test2(stringTest.getValue(), '5', 2);
+ CParameterParser test3(stringTest.getValue(), '5', 1);
+ CParameterParser test4(stringTest.getValue(), '5', 20);
- BOOST_CHECK(1 == test4.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test4[0], ""));
- BOOST_CHECK(0 == test4[1]);
+ testParameterParser_OtherSeparatorPresentInString(test1);
+ testParameterParser_OtherSeparatorPresentInString(test2);
+ testParameterParser_OtherSeparatorPresentInString(test3);
+ testParameterParser_OtherSeparatorPresentInString(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParametersWithBlankSpace){
- CIEC_STRING emptyTest = " , ";
- CParameterParser test4(emptyTest.getValue(), 4);
+ void testParameterParser_OtherSeparatorNonPresentInString(CParameterParser& paParser) {
+ BOOST_CHECK(1 == paParser.parseParameters());
- BOOST_CHECK(2 == test4.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test4[0], ""));
- BOOST_CHECK(0 == strcmp(test4[1], ""));
- BOOST_CHECK(0 == test4[2]);
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter){
- CIEC_STRING emptyTest = " , ,";
- CParameterParser test4(emptyTest.getValue(), 4);
-
- BOOST_CHECK(3 == test4.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test4[0], ""));
- BOOST_CHECK(0 == strcmp(test4[1], ""));
- BOOST_CHECK(0 == strcmp(test4[2], ""));
- BOOST_CHECK(0 == test4[3]);
- }
-
- BOOST_AUTO_TEST_CASE(ParameterParser_OnlySeparator){
- CIEC_STRING emptyTest = ",,,";
- CParameterParser test5(emptyTest.getValue(), 5);
-
- BOOST_CHECK(4 == test5.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test5[0], ""));
- BOOST_CHECK(0 == strcmp(test5[1], ""));
- BOOST_CHECK(0 == strcmp(test5[2], ""));
- BOOST_CHECK(0 == strcmp(test5[3], ""));
- BOOST_CHECK(0 == test5[4]);
- BOOST_CHECK(0 == test5[5]);
+ BOOST_CHECK(0 == strcmp(paParser[0], "123, 456, 789"));
+ BOOST_CHECK(0 == paParser[1]);;
}
- BOOST_AUTO_TEST_CASE(ParameterParser_OnlyBlankSpaceSeparator){
- CIEC_STRING emptyTest = " "; //3 Blank Spaces
- CParameterParser test5(emptyTest.getValue(), 5, ' ');
+ BOOST_AUTO_TEST_CASE(ParameterParser_OtherSeparatorNonPresentInString) {
+ CIEC_STRING stringTest = " 123, 456, 789 ";
+ CParameterParser test1(stringTest.getValue(), ';');
+ CParameterParser test2(stringTest.getValue(), ';', 2);
+ CParameterParser test3(stringTest.getValue(), ';', 1);
+ CParameterParser test4(stringTest.getValue(), ';', 20);
- BOOST_CHECK(4 == test5.parseParameters());
-
- BOOST_CHECK(0 == strcmp(test5[0], ""));
- BOOST_CHECK(0 == strcmp(test5[1], ""));
- BOOST_CHECK(0 == strcmp(test5[2], ""));
- BOOST_CHECK(0 == strcmp(test5[3], ""));
- BOOST_CHECK(0 == test5[4]);
- BOOST_CHECK(0 == test5[5]);
+ testParameterParser_OtherSeparatorNonPresentInString(test1);
+ testParameterParser_OtherSeparatorNonPresentInString(test2);
+ testParameterParser_OtherSeparatorNonPresentInString(test3);
+ testParameterParser_OtherSeparatorNonPresentInString(test4);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_SerialCase1)
- {
- CIEC_STRING sParameterString = "COM1, 19200, 8, 1, NONE, $n";
- CParameterParser parser(sParameterString.getValue(), 6);
+ void testParameterParser_BlankSpaceSeparator(CParameterParser& paParser) {
+ BOOST_CHECK(7 == paParser.parseParameters());
- BOOST_CHECK(6 == parser.parseParameters());
-
- BOOST_CHECK(0 == strcmp(parser[0], "COM1"));
- BOOST_CHECK(0 == strcmp(parser[1], "19200"));
- BOOST_CHECK(0 == strcmp(parser[2], "8"));
- BOOST_CHECK(0 == strcmp(parser[3], "1"));
- BOOST_CHECK(0 == strcmp(parser[4], "NONE"));
- BOOST_CHECK(0 == strcmp(parser[5], "$n"));
- BOOST_CHECK(0 == parser[6]);
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], "123,"));
+ BOOST_CHECK(0 == strcmp(paParser[2], "456,"));
+ BOOST_CHECK(0 == strcmp(paParser[3], "789"));
+ BOOST_CHECK(0 == strcmp(paParser[4], ""));
+ BOOST_CHECK(0 == strcmp(paParser[5], ""));
+ BOOST_CHECK(0 == strcmp(paParser[6], ""));
+ BOOST_CHECK(0 == paParser[7]);
}
- BOOST_AUTO_TEST_CASE(ParameterParser_SerialCase2)
- {
- CIEC_STRING sParameterString = "COM1, 19200, 8, 1, NONE, $r$n";
- CParameterParser parser(sParameterString.getValue(), 6);
+ BOOST_AUTO_TEST_CASE(ParameterParser_BlankSpaceSeparator) {
+ CIEC_STRING stringTest = " 123, 456, 789 ";
+ CParameterParser test1(stringTest.getValue(), ' ');
+ CParameterParser test2(stringTest.getValue(), ' ', 2);
+ CParameterParser test3(stringTest.getValue(), ' ', 1);
+ CParameterParser test4(stringTest.getValue(), ' ', 20);
- BOOST_CHECK(6 == parser.parseParameters());
-
- BOOST_CHECK(0 == strcmp(parser[0], "COM1"));
- BOOST_CHECK(0 == strcmp(parser[1], "19200"));
- BOOST_CHECK(0 == strcmp(parser[2], "8"));
- BOOST_CHECK(0 == strcmp(parser[3], "1"));
- BOOST_CHECK(0 == strcmp(parser[4], "NONE"));
- BOOST_CHECK(0 == strcmp(parser[5], "$r$n"));
- BOOST_CHECK(0 == parser[6]);
+ testParameterParser_BlankSpaceSeparator(test1);
+ testParameterParser_BlankSpaceSeparator(test2);
+ testParameterParser_BlankSpaceSeparator(test3);
+ testParameterParser_BlankSpaceSeparator(test4);
}
-BOOST_AUTO_TEST_SUITE_END()
+ void testParameterParser_OnlyBlankSpace(CParameterParser& paParser) {
+ BOOST_CHECK(1 == paParser.parseParameters());
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == paParser[1]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_OnlyBlankSpace) {
+ CIEC_STRING stringTest = " "; //3 Blank Spaces
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_OnlyBlankSpace(test1);
+ testParameterParser_OnlyBlankSpace(test2);
+ testParameterParser_OnlyBlankSpace(test3);
+ testParameterParser_OnlyBlankSpace(test4);
+ }
+
+ void testParameterParser_EmptyParametersWithBlankSpace(CParameterParser& paParser) {
+ BOOST_CHECK(2 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], ""));
+ BOOST_CHECK(0 == paParser[2]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParametersWithBlankSpace) {
+ CIEC_STRING stringTest = " , ";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_EmptyParametersWithBlankSpace(test1);
+ testParameterParser_EmptyParametersWithBlankSpace(test2);
+ testParameterParser_EmptyParametersWithBlankSpace(test3);
+ testParameterParser_EmptyParametersWithBlankSpace(test4);
+ }
+
+ void testParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter(CParameterParser& paParser) {
+ BOOST_CHECK(3 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], ""));
+ BOOST_CHECK(0 == strcmp(paParser[2], ""));
+ BOOST_CHECK(0 == paParser[3]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter) {
+ CIEC_STRING stringTest = " , ,";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter(test1);
+ testParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter(test2);
+ testParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter(test3);
+ testParameterParser_EmptyParametersWithBlankSpaceAndEndingInParameter(test4);
+ }
+
+ void testParameterParser_OnlySeparator(CParameterParser& paParser) {
+ BOOST_CHECK(4 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], ""));
+ BOOST_CHECK(0 == strcmp(paParser[2], ""));
+ BOOST_CHECK(0 == strcmp(paParser[3], ""));
+ BOOST_CHECK(0 == paParser[4]);
+ BOOST_CHECK(0 == paParser[5]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_OnlySeparator) {
+ CIEC_STRING stringTest = ",,,";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_OnlySeparator(test1);
+ testParameterParser_OnlySeparator(test2);
+ testParameterParser_OnlySeparator(test3);
+ testParameterParser_OnlySeparator(test4);
+ }
+
+ void testParameterParser_OnlyBlankSpaceSeparator(CParameterParser& paParser) {
+ BOOST_CHECK(4 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], ""));
+ BOOST_CHECK(0 == strcmp(paParser[1], ""));
+ BOOST_CHECK(0 == strcmp(paParser[2], ""));
+ BOOST_CHECK(0 == strcmp(paParser[3], ""));
+ BOOST_CHECK(0 == paParser[4]);
+ BOOST_CHECK(0 == paParser[5]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_OnlyBlankSpaceSeparator) {
+ CIEC_STRING stringTest = " "; //3 Blank Spaces
+ CParameterParser test1(stringTest.getValue(), ' ');
+ CParameterParser test2(stringTest.getValue(), ' ', 2);
+ CParameterParser test3(stringTest.getValue(), ' ', 1);
+ CParameterParser test4(stringTest.getValue(), ' ', 20);
+
+ testParameterParser_OnlyBlankSpaceSeparator(test1);
+ testParameterParser_OnlyBlankSpaceSeparator(test2);
+ testParameterParser_OnlyBlankSpaceSeparator(test3);
+ testParameterParser_OnlyBlankSpaceSeparator(test4);
+ }
+
+ void testParameterParser_SerialCase1(CParameterParser& paParser) {
+ BOOST_CHECK(6 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], "COM1"));
+ BOOST_CHECK(0 == strcmp(paParser[1], "19200"));
+ BOOST_CHECK(0 == strcmp(paParser[2], "8"));
+ BOOST_CHECK(0 == strcmp(paParser[3], "1"));
+ BOOST_CHECK(0 == strcmp(paParser[4], "NONE"));
+ BOOST_CHECK(0 == strcmp(paParser[5], "$n"));
+ BOOST_CHECK(0 == paParser[6]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_SerialCase1) {
+ CIEC_STRING stringTest = "COM1, 19200, 8, 1, NONE, $n";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_SerialCase1(test1);
+ testParameterParser_SerialCase1(test2);
+ testParameterParser_SerialCase1(test3);
+ testParameterParser_SerialCase1(test4);
+ }
+
+ void testParameterParser_SerialCase2(CParameterParser& paParser) {
+ BOOST_CHECK(6 == paParser.parseParameters());
+
+ BOOST_CHECK(0 == strcmp(paParser[0], "COM1"));
+ BOOST_CHECK(0 == strcmp(paParser[1], "19200"));
+ BOOST_CHECK(0 == strcmp(paParser[2], "8"));
+ BOOST_CHECK(0 == strcmp(paParser[3], "1"));
+ BOOST_CHECK(0 == strcmp(paParser[4], "NONE"));
+ BOOST_CHECK(0 == strcmp(paParser[5], "$r$n"));
+ BOOST_CHECK(0 == paParser[6]);
+ }
+
+ BOOST_AUTO_TEST_CASE(ParameterParser_SerialCase2) {
+ CIEC_STRING stringTest = "COM1, 19200, 8, 1, NONE, $r$n";
+ CParameterParser test1(stringTest.getValue(), ',');
+ CParameterParser test2(stringTest.getValue(), ',', 2);
+ CParameterParser test3(stringTest.getValue(), ',', 1);
+ CParameterParser test4(stringTest.getValue(), ',', 20);
+
+ testParameterParser_SerialCase2(test1);
+ testParameterParser_SerialCase2(test2);
+ testParameterParser_SerialCase2(test3);
+ testParameterParser_SerialCase2(test4);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/core/utils/singeltontest.cpp b/tests/core/utils/singeltontest.cpp
index 5ae84a5..61875df 100644
--- a/tests/core/utils/singeltontest.cpp
+++ b/tests/core/utils/singeltontest.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/utils/singletontest2ndunit.cpp b/tests/core/utils/singletontest2ndunit.cpp
index bcbb8f7..fb9ade4 100644
--- a/tests/core/utils/singletontest2ndunit.cpp
+++ b/tests/core/utils/singletontest2ndunit.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/utils/string_utils_test.cpp b/tests/core/utils/string_utils_test.cpp
index 5e3ac4f..a5016b7 100644
--- a/tests/core/utils/string_utils_test.cpp
+++ b/tests/core/utils/string_utils_test.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 - 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/utils/testsingleton.cpp b/tests/core/utils/testsingleton.cpp
index 91b5fe9..a545eff 100644
--- a/tests/core/utils/testsingleton.cpp
+++ b/tests/core/utils/testsingleton.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/core/utils/testsingleton.h b/tests/core/utils/testsingleton.h
index 538dfe0..ce9494a 100644
--- a/tests/core/utils/testsingleton.h
+++ b/tests/core/utils/testsingleton.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/forte_boost_tester.cpp b/tests/forte_boost_tester.cpp
index 2b274b2..b8137e2 100644
--- a/tests/forte_boost_tester.cpp
+++ b/tests/forte_boost_tester.cpp
@@ -1,13 +1,27 @@
/*******************************************************************************
- * Copyright (c) 2011 ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2011, 2018 ACIN, fortiss GmbH,
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ingo Hegny - initial API and implementation and/or initial documentation
+ * Jose Cabral - Add dummy function for throw_exception
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
#define BOOST_TEST_MODULE FORTE_TESTS
#include <boost/test/included/unit_test.hpp>
+#include "core/fbtests/fbtesterglobalfixture.h"
+#if defined(BOOST_NO_EXCEPTIONS) && BOOST_VERSION < 106500 // At least Boost v1.65 provides a simple NO_EXCEPTION version of throw_exception
+void boost::throw_exception(std::exception const&) {
+ //dummy
+}
+#endif
+
+//BOOST_TEST_GLOBAL_FIXTURE(MyGlobalFixture)();
+//fix for a problem in BOOST_TEST_GLOBAL_FIXTURE, revert when fixed, issue seams to be in BOOST_JOIN
+static boost::unit_test::ut_detail::global_fixture_impl<CFBTestDataGlobalFixture> gfCFBTestDataGlobalFixture;
diff --git a/tests/modules/CMakeLists.txt b/tests/modules/CMakeLists.txt
index 7491988..7060794 100644
--- a/tests/modules/CMakeLists.txt
+++ b/tests/modules/CMakeLists.txt
@@ -1,15 +1,24 @@
#*******************************************************************************
-# * Copyright (c) 2018 TU Wien/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik Merkumians - initial API and implementation and/or initial documentation
+# Copyright (c) 2018 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik Merkumians - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\fblib)
IF(FORTE_MODULE_IEC61131)
- add_subdirectory(IEC61131-3)
-ENDIF(FORTE_MODULE_IEC61131)
\ No newline at end of file
+ add_subdirectory(IEC61131-3)
+ENDIF(FORTE_MODULE_IEC61131)
+
+IF(FORTE_MODULE_UTILS)
+ add_subdirectory(utils)
+ENDIF(FORTE_MODULE_UTILS)
+
+IF(FORTE_COM_HTTP)
+ add_subdirectory(HTTP)
+ENDIF(FORTE_COM_HTTP)
diff --git a/tests/modules/HTTP/CMakeLists.txt b/tests/modules/HTTP/CMakeLists.txt
new file mode 100644
index 0000000..20ee96d
--- /dev/null
+++ b/tests/modules/HTTP/CMakeLists.txt
@@ -0,0 +1,17 @@
+#*******************************************************************************
+# Copyright (c) 2018 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+#############################################################################
+# Tests for the HTTP module
+#############################################################################
+
+forte_test_add_sourcefile_cpp(HTTP_test.cpp)
diff --git a/tests/modules/HTTP/HTTP_test.cpp b/tests/modules/HTTP/HTTP_test.cpp
new file mode 100644
index 0000000..1df4b2d
--- /dev/null
+++ b/tests/modules/HTTP/HTTP_test.cpp
@@ -0,0 +1,258 @@
+/*******************************************************************************
+ * Copyright (c) 2018 fortiss GmbH
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+#include <boost/test/unit_test.hpp>
+
+#include "../../../src/modules/HTTP/httpparser.h"
+
+BOOST_AUTO_TEST_SUITE (HTTPParser_function_test)
+
+ BOOST_AUTO_TEST_CASE(createGetRequest_test) {
+
+ const char* resultValid1 = "GET / HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ const char* resultValid2 = "GET / HTTP/1.1\r\nHost: 192.168.0.1\r\n\r\n";
+ const char* resultValid3 = "GET /lookFor HTTP/1.1\r\nHost: 192.168.0.1\r\n\r\n";
+ const char* resultValid4 = "GET /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\n\r\n";
+
+ CIEC_STRING dest = "random text";
+ CIEC_STRING host = "0.0.0.0";
+ CIEC_STRING path = "/";
+
+ forte::com_infra::CHttpParser::createGetRequest(dest, host, path);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), resultValid1));
+
+ host = "192.168.0.1";
+ forte::com_infra::CHttpParser::createGetRequest(dest, host, path);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), resultValid2));
+
+ path = "/lookFor";
+ forte::com_infra::CHttpParser::createGetRequest(dest, host, path);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), resultValid3));
+
+ path = "/lookFor/something/else";
+ forte::com_infra::CHttpParser::createGetRequest(dest, host, path);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), resultValid4));
+
+ }
+
+ BOOST_AUTO_TEST_CASE(PUTPOST_test) {
+
+ const char* putResultValid1 = "PUT / HTTP/1.1\r\nHost: 0.0.0.0\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* putResultValid1Changed =
+ "PUT / HTTP/1.1\r\nHost: 0.0.0.0\r\nContent-type: text/xml\r\nContent-length: 33\r\n\r\nkey1=val1Changed;key2Changed=val2";
+ const char* putResultValid2 = "PUT / HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* putResultValid3 = "PUT /lookFor HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* putResultValid4 =
+ "PUT /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+
+ const char* putEmptyData = "PUT /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 0\r\n\r\n";
+ const char* putJSONType =
+ "PUT /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: application/json\r\nContent-length: 29\r\n\r\n{\"key1\" : val1,\"key2\" : val2}";
+
+ const char* postResultValid1 = "POST / HTTP/1.1\r\nHost: 0.0.0.0\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* postResultValid1Changed =
+ "POST / HTTP/1.1\r\nHost: 0.0.0.0\r\nContent-type: text/xml\r\nContent-length: 33\r\n\r\nkey1=val1Changed;key2Changed=val2";
+ const char* postResultValid2 = "POST / HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* postResultValid3 = "POST /lookFor HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+ const char* postResultValid4 =
+ "POST /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 19\r\n\r\nkey1=val1;key2=val2";
+
+ const char* postEmptyData = "POST /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: text/xml\r\nContent-length: 0\r\n\r\n";
+
+ const char* postJSONType =
+ "POST /lookFor/something/else HTTP/1.1\r\nHost: 192.168.0.1\r\nContent-type: application/json\r\nContent-length: 29\r\n\r\n{\"key1\" : val1,\"key2\" : val2}";
+
+
+ CIEC_STRING dest = "random text";
+ CIEC_STRING destEmpty = "";
+ CIEC_STRING host = "0.0.0.0";
+ CIEC_STRING path = "/";
+ CIEC_STRING data = "key1=val1;key2=val2";
+ CIEC_STRING dataChanged = "key1=val1Changed;key2Changed=val2";
+ CIEC_STRING contentType = "text/xml";
+
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid1));
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::changePutPostData(dest, dataChanged));
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid1Changed));
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::changePutPostData(dest, data));
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid1));
+
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid1));
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::changePutPostData(dest, dataChanged));
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid1Changed));
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::changePutPostData(dest, data));
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid1));
+
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::changePutPostData(destEmpty, data));
+ dataChanged = "";
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::changePutPostData(destEmpty, dataChanged));
+
+ host = "192.168.0.1";
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid2));
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid2));
+
+ path = "/lookFor";
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid3));
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid3));
+
+ path = "/lookFor/something/else";
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putResultValid4));
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postResultValid4));
+
+ data = "";
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putEmptyData));
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postEmptyData));
+
+ contentType = "application/json";
+ data = "{\"key1\" : val1,\"key2\" : val2}";
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_PUT);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), putJSONType));
+ forte::com_infra::CHttpParser::createPutPostRequest(dest, host, path, data, contentType, forte::com_infra::CHttpComLayer::e_POST);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), postJSONType));
+ }
+
+ BOOST_AUTO_TEST_CASE(parseResponse_test) {
+
+ CIEC_STRING validReponse = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nkey1=val1;key2=val2";
+ CIEC_STRING validReponseNoBody = "HTTP/1.1 200 OK\r\n";
+ CIEC_STRING worngFirstLine = "HTTP/1.1 200 OK\nContent-Type: text/html";
+ CIEC_STRING worngStatusLine = "HTTP/1.1 200OK\r\nContent-Type: text/html\r\n\r\nkey1=val1;key2=val2";
+
+ CIEC_STRING body;
+ CIEC_STRING responseCode;
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseResponse(body, responseCode, validReponse.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(body.getValue(), "key1=val1;key2=val2"));
+ BOOST_CHECK_EQUAL(0, strcmp(responseCode.getValue(), "200"));
+
+ responseCode = "";
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseResponse(body, responseCode, validReponseNoBody.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(body.getValue(), ""));
+ BOOST_CHECK_EQUAL(0, strcmp(responseCode.getValue(), "200"));
+
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::parseResponse(body, responseCode, worngFirstLine.getValue()));
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::parseResponse(body, responseCode, worngStatusLine.getValue()));
+
+ }
+
+ BOOST_AUTO_TEST_CASE(createResponse_test) {
+
+ const char* validResult = "HTTP/1.1 200 OK\r\nContent-type: application/json\r\nContent-length: 29\r\n\r\n{\"key1\" : val1,\"key2\" : val2}";
+ const char* validResultNoBody = "HTTP/1.1 200 OK\r\n";
+
+ CIEC_STRING dest;
+ CIEC_STRING result = "HTTP/1.1 200 OK";
+ CIEC_STRING contentType = "application/json";
+ CIEC_STRING data = "{\"key1\" : val1,\"key2\" : val2}";
+
+ forte::com_infra::CHttpParser::createResponse(dest, result, contentType, data);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), validResult));
+
+ data = "";
+ forte::com_infra::CHttpParser::createResponse(dest, result, contentType, data);
+ BOOST_CHECK_EQUAL(0, strcmp(dest.getValue(), validResultNoBody));
+
+ }
+
+ BOOST_AUTO_TEST_CASE(parseGetRequest_test) {
+ CIEC_STRING resultValidNoParameters = "GET / HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING resultValidNoParameters2 = "GET /path/to/look HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING resultValidParam = "GET /?key1=val1 HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING resultValidParams = "GET /?key1=val1&key2=val2 HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING resultValidParam2 = "GET /path/to/look?key1=val1 HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING resultValidParams2 = "GET /path/to/look?key1=val1&key2=val2 HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+
+ CIEC_STRING invalidGET = "Get / HTTP/1.1\r\nHost: 0.0.0.0\r\n\r\n";
+ CIEC_STRING invalidPath = "GET /pathHTTP/1.1\r\n";
+
+ CIEC_STRING path;
+ CSinglyLinkedList<CIEC_STRING> parameterNames;
+ CSinglyLinkedList<CIEC_STRING> parameterValues;
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidNoParameters.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/"));
+ BOOST_CHECK_EQUAL(true, parameterNames.isEmpty());
+ BOOST_CHECK_EQUAL(true, parameterValues.isEmpty());
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidNoParameters2.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/path/to/look"));
+ BOOST_CHECK_EQUAL(true, parameterNames.isEmpty());
+ BOOST_CHECK_EQUAL(true, parameterValues.isEmpty());
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidParam.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/"));
+
+ CSinglyLinkedList<CIEC_STRING>::Iterator namesIter = parameterNames.begin();
+ CSinglyLinkedList<CIEC_STRING>::Iterator valuesIter = parameterValues.begin();
+
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key1"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val1"));
+
+ parameterNames.clearAll();
+ parameterValues.clearAll();
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidParams.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/"));
+
+ namesIter = parameterNames.begin();
+ valuesIter = parameterValues.begin();
+
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key1"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val1"));
+ ++namesIter;
+ ++valuesIter;
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key2"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val2"));
+
+ parameterNames.clearAll();
+ parameterValues.clearAll();
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidParam2.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/path/to/look"));
+
+ namesIter = parameterNames.begin();
+ valuesIter = parameterValues.begin();
+
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key1"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val1"));
+
+ parameterNames.clearAll();
+ parameterValues.clearAll();
+
+ BOOST_CHECK_EQUAL(true, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, resultValidParams2.getValue()));
+ BOOST_CHECK_EQUAL(0, strcmp(path.getValue(), "/path/to/look"));
+
+ namesIter = parameterNames.begin();
+ valuesIter = parameterValues.begin();
+
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key1"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val1"));
+ ++namesIter;
+ ++valuesIter;
+ BOOST_CHECK_EQUAL(0, strcmp((*namesIter).getValue(), "key2"));
+ BOOST_CHECK_EQUAL(0, strcmp((*valuesIter).getValue(), "val2"));
+
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, invalidGET.getValue()));
+ BOOST_CHECK_EQUAL(false, forte::com_infra::CHttpParser::parseGetRequest(path, parameterNames, parameterValues, invalidPath.getValue()));
+
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/CMakeLists.txt b/tests/modules/IEC61131-3/CMakeLists.txt
index 5258676..a528d9f 100644
--- a/tests/modules/IEC61131-3/CMakeLists.txt
+++ b/tests/modules/IEC61131-3/CMakeLists.txt
@@ -1,15 +1,22 @@
#*******************************************************************************
-# * Copyright (c) 2018 TU Wien/ACIN
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Martin Melik-Merkumians - initial API and implementation and/or initial documentation
+# Copyright (c) 2018 TU Wien/ACIN
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Martin Melik-Merkumians - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
# Tests for the IEC 61131-3 function FBs
#############################################################################
forte_test_add_sourcefile_cpp(F_DIV_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_S_TO_LINT_tester.cpp F_TIME_IN_MS_TO_LINT_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_US_TO_LINT_tester.cpp F_TIME_IN_NS_TO_LINT_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_S_TO_ULINT_tester.cpp F_TIME_IN_MS_TO_ULINT_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_US_TO_ULINT_tester.cpp F_TIME_IN_NS_TO_ULINT_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_S_TO_LREAL_tester.cpp F_TIME_IN_MS_TO_LREAL_tester.cpp)
+forte_test_add_sourcefile_cpp(F_TIME_IN_US_TO_LREAL_tester.cpp F_TIME_IN_NS_TO_LREAL_tester.cpp)
\ No newline at end of file
diff --git a/tests/modules/IEC61131-3/F_DIV_tester.cpp b/tests/modules/IEC61131-3/F_DIV_tester.cpp
index 47e0e0e..709d6ff 100644
--- a/tests/modules/IEC61131-3/F_DIV_tester.cpp
+++ b/tests/modules/IEC61131-3/F_DIV_tester.cpp
@@ -1,52 +1,30 @@
/*******************************************************************************
- * Copyright (c) 2018, TU Wien/ACIN
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2018 TU Wien/ACIN
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Martin Melik-Merkumians - initial tests
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
-#include "../../modules/IEC61131-3/Arithmetic/F_DIV.h"
+#include "../../core/fbtests/fbtestfixture.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "F_DIV_tester_gen.cpp"
#endif
-class F_DIV_tester : public CFBTester{
- DECLARE_FB_TESTER(F_DIV_tester)
- ;
- public:
+struct F_DEV_TestFixture : public CFBTestFixtureBase{
- private:
- F_DIV_tester(CResource* mTestResource) :
- CFBTester(mTestResource){
+ F_DEV_TestFixture() : CFBTestFixtureBase(g_nStringIdF_DIV){
SETUP_INPUTDATA(&mIn1_DIV, &mIn2_DIV);
SETUP_OUTPUTDATA(&mOut_DIV);
- }
- virtual void executeAllTests(){
- evaluateTestResult(testCase_validDivision(), "Valid division");
- evaluateTestResult(testCase_divisionByZero(), "Division by zero");
+ CFBTestFixtureBase::setup();
}
- /***********************************************************************************/
- bool testCase_validDivision(){
- mIn1_DIV = 30;
- mIn2_DIV = 5;
- /* trigger the inputevent */
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
-
- bool testCase_divisionByZero(){
- mIn1_DIV = 30;
- mIn2_DIV = 0;
- /* trigger the inputevent */
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
CIEC_INT mIn1_DIV; //DATA INPUT
CIEC_INT mIn2_DIV; //DATA INPUT
@@ -54,4 +32,23 @@
CIEC_INT mOut_DIV;
};
-DEFINE_FB_TESTER(F_DIV_tester, g_nStringIdF_DIV);
+BOOST_FIXTURE_TEST_SUITE( F_DIV_Tests, F_DEV_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(validDivision){
+ mIn1_DIV = 30;
+ mIn2_DIV = 5;
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(6, mOut_DIV);
+ }
+
+ BOOST_AUTO_TEST_CASE(divisionByZero){
+ mIn1_DIV = 30;
+ mIn2_DIV = 0;
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LINT_tester.cpp
new file mode 100644
index 0000000..aa78a59
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LINT_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_LINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_MS_TO_LINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_MS_TO_LINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_MS_TO_LINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_MS_TO_LINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_MS_TO_LINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_MS_TO_LINT; //DATA INPUT
+ CIEC_LINT mOut_F_TIME_IN_MS_TO_LINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_MS_TO_LINT_Tests, F_TIME_IN_MS_TO_LINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_MS_TO_LINT.fromString("T#2d5h43m12s44ms");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(INT64_C(172800000) + INT64_C(18000000) + INT64_C(2580000) + INT64_C(12000) + INT64_C(44), mOut_F_TIME_IN_MS_TO_LINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LREAL_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LREAL_tester.cpp
new file mode 100644
index 0000000..d003e6e
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_LREAL_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_LREAL_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_MS_TO_LREAL_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_MS_TO_LREAL_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_MS_TO_LREAL) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_MS_TO_LREAL);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_MS_TO_LREAL);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_MS_TO_LREAL; //DATA INPUT
+ CIEC_LREAL mOut_F_TIME_IN_MS_TO_LREAL; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_MS_TO_LREAL_Tests, F_TIME_IN_MS_TO_LREAL_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_MS_TO_LREAL.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E6), mOut_F_TIME_IN_MS_TO_LREAL);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_ULINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_ULINT_tester.cpp
new file mode 100644
index 0000000..7a10127
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_MS_TO_ULINT_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_MS_TO_ULINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_MS_TO_ULINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_MS_TO_ULINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_MS_TO_ULINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_MS_TO_ULINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_MS_TO_ULINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_MS_TO_ULINT; //DATA INPUT
+ CIEC_ULINT mOut_F_TIME_IN_MS_TO_ULINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_MS_TO_ULINT_Tests, F_TIME_IN_MS_TO_ULINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_MS_TO_ULINT.fromString("T#2d5h43m12s44ms");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(UINT64_C(172800000) + UINT64_C(18000000) + UINT64_C(2580000) + UINT64_C(12000) + UINT64_C(44), mOut_F_TIME_IN_MS_TO_ULINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LINT_tester.cpp
new file mode 100644
index 0000000..5ebd16b
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LINT_tester.cpp
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_LINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_NS_TO_LINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_NS_TO_LINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_NS_TO_LINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_NS_TO_LINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_NS_TO_LINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_NS_TO_LINT; //DATA INPUT
+ CIEC_LINT mOut_F_TIME_IN_NS_TO_LINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_NS_TO_LINT_Tests, F_TIME_IN_NS_TO_LINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_NS_TO_LINT.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(
+ INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31),
+ mOut_F_TIME_IN_NS_TO_LINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LREAL_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LREAL_tester.cpp
new file mode 100644
index 0000000..4d87eb8
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_LREAL_tester.cpp
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_LREAL_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_NS_TO_LREAL_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_NS_TO_LREAL_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_NS_TO_LREAL) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_NS_TO_LREAL);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_NS_TO_LREAL);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_NS_TO_LREAL; //DATA INPUT
+ CIEC_LREAL mOut_F_TIME_IN_NS_TO_LREAL; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_NS_TO_LREAL_Tests, F_TIME_IN_NS_TO_LREAL_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_NS_TO_LREAL.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(
+ static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)),
+ mOut_F_TIME_IN_NS_TO_LREAL);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_ULINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_ULINT_tester.cpp
new file mode 100644
index 0000000..111f8bc
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_NS_TO_ULINT_tester.cpp
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_NS_TO_ULINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_NS_TO_ULINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_NS_TO_ULINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_NS_TO_ULINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_NS_TO_ULINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_NS_TO_ULINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_NS_TO_ULINT; //DATA INPUT
+ CIEC_ULINT mOut_F_TIME_IN_NS_TO_ULINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_NS_TO_ULINT_Tests, F_TIME_IN_NS_TO_ULINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_NS_TO_ULINT.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(
+ UINT64_C(172800000000000) + UINT64_C(18000000000000) + UINT64_C(2580000000000) + UINT64_C(12000000000) + UINT64_C(44000000) + UINT64_C(27000) + UINT64_C(31),
+ mOut_F_TIME_IN_NS_TO_ULINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LINT_tester.cpp
new file mode 100644
index 0000000..0ce3938
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LINT_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_LINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_S_TO_LINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_S_TO_LINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_S_TO_LINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_S_TO_LINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_S_TO_LINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_S_TO_LINT; //DATA INPUT
+ CIEC_LINT mOut_F_TIME_IN_S_TO_LINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_S_TO_LINT_Tests, F_TIME_IN_S_TO_LINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_S_TO_LINT.fromString("T#2d5h43m12s");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(INT64_C(172800) + INT64_C(18000) + INT64_C(2580) + INT64_C(12), mOut_F_TIME_IN_S_TO_LINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LREAL_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LREAL_tester.cpp
new file mode 100644
index 0000000..1317af0
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_LREAL_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_LREAL_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_S_TO_LREAL_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_S_TO_LREAL_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_S_TO_LREAL) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_S_TO_LREAL);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_S_TO_LREAL);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_S_TO_LREAL; //DATA INPUT
+ CIEC_LREAL mOut_F_TIME_IN_S_TO_LREAL; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_S_TO_LREAL_Tests, F_TIME_IN_S_TO_LREAL_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_S_TO_LREAL.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E9), mOut_F_TIME_IN_S_TO_LREAL);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_S_TO_ULINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_ULINT_tester.cpp
new file mode 100644
index 0000000..faeec0a
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_S_TO_ULINT_tester.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_S_TO_ULINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_S_TO_ULINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_S_TO_ULINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_S_TO_ULINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_S_TO_ULINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_S_TO_ULINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_S_TO_ULINT; //DATA INPUT
+ CIEC_ULINT mOut_F_TIME_IN_S_TO_ULINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_S_TO_ULINT_Tests, F_TIME_IN_S_TO_ULINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_S_TO_ULINT.fromString("T#2d5h43m12s");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(UINT64_C(172800) + UINT64_C(18000) + UINT64_C(2580) + UINT64_C(12), mOut_F_TIME_IN_S_TO_ULINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LINT_tester.cpp
new file mode 100644
index 0000000..ad60b3f
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LINT_tester.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_LINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_US_TO_LINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_US_TO_LINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_US_TO_LINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_US_TO_LINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_US_TO_LINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_US_TO_LINT; //DATA INPUT
+ CIEC_LINT mOut_F_TIME_IN_US_TO_LINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_US_TO_LINT_Tests, F_TIME_IN_US_TO_LINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_US_TO_LINT.fromString("T#2d5h43m12s44ms27us");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(INT64_C(172800000000) + INT64_C(18000000000) + INT64_C(2580000000) + INT64_C(12000000) + INT64_C(44000) + INT64_C(27),
+ mOut_F_TIME_IN_US_TO_LINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LREAL_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LREAL_tester.cpp
new file mode 100644
index 0000000..f97654f
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_LREAL_tester.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_LREAL_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_US_TO_LREAL_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_US_TO_LREAL_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_US_TO_LREAL) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_US_TO_LREAL);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_US_TO_LREAL);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_US_TO_LREAL; //DATA INPUT
+ CIEC_LREAL mOut_F_TIME_IN_US_TO_LREAL; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_US_TO_LREAL_Tests, F_TIME_IN_US_TO_LREAL_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_US_TO_LREAL.fromString("T#2d5h43m12s44ms27us31ns");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(static_cast<CIEC_LREAL>(INT64_C(172800000000000) + INT64_C(18000000000000) + INT64_C(2580000000000) + INT64_C(12000000000) + INT64_C(44000000) + INT64_C(27000) + INT64_C(31)) / static_cast<CIEC_LREAL>(1E3),
+ mOut_F_TIME_IN_US_TO_LREAL);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/IEC61131-3/F_TIME_IN_US_TO_ULINT_tester.cpp b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_ULINT_tester.cpp
new file mode 100644
index 0000000..f015a14
--- /dev/null
+++ b/tests/modules/IEC61131-3/F_TIME_IN_US_TO_ULINT_tester.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2019 TU Wien/ACIN
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Martin Melik-Merkumians - initial tests
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "F_TIME_IN_US_TO_ULINT_tester_gen.cpp"
+#endif
+
+struct F_TIME_IN_US_TO_ULINT_TestFixture : public CFBTestFixtureBase {
+
+ F_TIME_IN_US_TO_ULINT_TestFixture() :
+ CFBTestFixtureBase(g_nStringIdF_TIME_IN_US_TO_ULINT) {
+ SETUP_INPUTDATA(&mIn_F_TIME_IN_US_TO_ULINT);
+ SETUP_OUTPUTDATA(&mOut_F_TIME_IN_US_TO_ULINT);
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_TIME mIn_F_TIME_IN_US_TO_ULINT; //DATA INPUT
+ CIEC_ULINT mOut_F_TIME_IN_US_TO_ULINT; //DATA OUTPUT
+};
+
+BOOST_FIXTURE_TEST_SUITE( F_TIME_IN_US_TO_ULINT_Tests, F_TIME_IN_US_TO_ULINT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(timeConversion) {
+ mIn_F_TIME_IN_US_TO_ULINT.fromString("T#2d5h43m12s44ms27us");
+ /* trigger the inputevent */
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(UINT64_C(172800000000) + UINT64_C(18000000000) + UINT64_C(2580000000) + UINT64_C(12000000) + UINT64_C(44000) + UINT64_C(27),
+ mOut_F_TIME_IN_US_TO_ULINT);
+ }
+
+ BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/modules/utils/CMakeLists.txt b/tests/modules/utils/CMakeLists.txt
new file mode 100644
index 0000000..714b049
--- /dev/null
+++ b/tests/modules/utils/CMakeLists.txt
@@ -0,0 +1,17 @@
+#*******************************************************************************
+# Copyright (c) 2018 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Jose Cabral - initial API and implementation and/or initial documentation
+# *******************************************************************************/
+
+#############################################################################
+# Tests for the utils function FBs
+#############################################################################
+
+forte_test_add_sourcefile_cpp(GET_STRUCT_VALUE_tester.cpp)
diff --git a/tests/modules/utils/GET_STRUCT_VALUE_tester.cpp b/tests/modules/utils/GET_STRUCT_VALUE_tester.cpp
new file mode 100644
index 0000000..c73e74d
--- /dev/null
+++ b/tests/modules/utils/GET_STRUCT_VALUE_tester.cpp
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2018, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Jose Cabral - initial tests
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
+ *******************************************************************************/
+#include "../../core/fbtests/fbtestfixture.h"
+
+#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
+#include "GET_STRUCT_VALUE_tester_gen.cpp"
+#endif
+
+class CIEC_GET_STRUCT_VALUE_Struct_test1 : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(GET_STRUCT_VALUE_Struct_test1)
+
+ /* Struct:
+ * Val1 : String[3]
+ * Val2 : INT
+ */
+
+ public:
+ CIEC_GET_STRUCT_VALUE_Struct_test1() :
+ CIEC_STRUCT(g_nStringIdGET_STRUCT_VALUE_Struct_test1, 2, scm_unElementTypes, scm_unElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+ }
+
+ virtual ~CIEC_GET_STRUCT_VALUE_Struct_test1() {
+ }
+
+ static const unsigned int sizeOfFirstArray = 2;
+
+ private:
+ static const CStringDictionary::TStringId scm_unElementTypes[];
+ static const CStringDictionary::TStringId scm_unElementNames[];
+};
+
+const CStringDictionary::TStringId CIEC_GET_STRUCT_VALUE_Struct_test1::scm_unElementTypes[] = { g_nStringIdARRAY, sizeOfFirstArray, g_nStringIdSTRING,
+ g_nStringIdINT };
+const CStringDictionary::TStringId CIEC_GET_STRUCT_VALUE_Struct_test1::scm_unElementNames[] = { g_nStringIdVal1, g_nStringIdVal2 };
+
+DEFINE_FIRMWARE_DATATYPE(GET_STRUCT_VALUE_Struct_test1, g_nStringIdGET_STRUCT_VALUE_Struct_test1)
+
+class CIEC_GET_STRUCT_VALUE_Struct_test2 : public CIEC_STRUCT {
+ DECLARE_FIRMWARE_DATATYPE(GET_STRUCT_VALUE_Struct_test2)
+
+ /* Struct:
+ * Val1 : INT
+ * Val2 : CIEC_GET_STRUCT_VALUE_Struct_test1
+ */
+
+ public:
+ CIEC_GET_STRUCT_VALUE_Struct_test2() :
+ CIEC_STRUCT(g_nStringIdGET_STRUCT_VALUE_Struct_test2, 2, scm_unElementTypes, scm_unElementNames, e_APPLICATION + e_CONSTRUCTED + 1) {
+ }
+
+ virtual ~CIEC_GET_STRUCT_VALUE_Struct_test2() {
+ }
+
+ private:
+ static const CStringDictionary::TStringId scm_unElementTypes[];
+ static const CStringDictionary::TStringId scm_unElementNames[];
+};
+
+const CStringDictionary::TStringId CIEC_GET_STRUCT_VALUE_Struct_test2::scm_unElementTypes[] = { g_nStringIdINT, g_nStringIdGET_STRUCT_VALUE_Struct_test1 };
+const CStringDictionary::TStringId CIEC_GET_STRUCT_VALUE_Struct_test2::scm_unElementNames[] = { g_nStringIdVal1, g_nStringIdVal2 };
+
+DEFINE_FIRMWARE_DATATYPE(GET_STRUCT_VALUE_Struct_test2, g_nStringIdGET_STRUCT_VALUE_Struct_test2)
+
+
+
+struct GET_STRUCT_VALUE_GenericTestFixture : public CFBTestFixtureBase{
+
+ GET_STRUCT_VALUE_GenericTestFixture(CIEC_ANY *paIN_STRUCT, CIEC_ANY *paOUT) :
+ CFBTestFixtureBase(g_nStringIdGET_STRUCT_VALUE){
+ SETUP_INPUTDATA(paIN_STRUCT, &mMember);
+ SETUP_OUTPUTDATA(&mQO, paOUT);
+ }
+
+ CIEC_STRING mMember;
+ CIEC_BOOL mQO;
+};
+
+struct GET_STRUCT_VALUE_Main_TestFixture : public GET_STRUCT_VALUE_GenericTestFixture{
+
+ GET_STRUCT_VALUE_Main_TestFixture() :
+ GET_STRUCT_VALUE_GenericTestFixture(&mIn_struct, &mOut){
+ mIn_struct.fromString("(Val1:=1,Val2:=(Val1:=['strin1','string2',''], Val2:=2))");
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_GET_STRUCT_VALUE_Struct_test2 mIn_struct;
+ CIEC_INT mOut;
+};
+
+BOOST_FIXTURE_TEST_SUITE( GET_STRUCT_VALUE_MainTests, GET_STRUCT_VALUE_Main_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(firstLevel) {
+ mMember = "Val1";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(true, mQO);
+ BOOST_CHECK_EQUAL(1, mOut);
+ }
+
+ BOOST_AUTO_TEST_CASE(secondLevel) {
+ mMember = "Val2.Val2";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(true, mQO);
+ BOOST_CHECK_EQUAL(2, mOut);
+ }
+
+
+ BOOST_AUTO_TEST_CASE(firstLevelWrongName) {
+ mMember = "xVal1";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+ BOOST_AUTO_TEST_CASE(firstLevelWrongNameWithSecondLevel) {
+ mMember = "xVal1.Val2";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+ BOOST_AUTO_TEST_CASE(secondLevelWrongName) {
+ mMember = "Val2.xVal2";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+ BOOST_AUTO_TEST_CASE(accessNonStruct) {
+ mMember = "Val1.Val1";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+ BOOST_AUTO_TEST_CASE(wrongOutputType) {
+ mMember = "Val2.Val1";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+ BOOST_AUTO_TEST_CASE(WrongEventInput) {
+ mMember = "Val2.Val1";
+ triggerEvent(1);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
+
+
+struct GET_STRUCT_VALUE_WRONG_OUTPUT_TYPE_TestFixture : public GET_STRUCT_VALUE_GenericTestFixture{
+
+ GET_STRUCT_VALUE_WRONG_OUTPUT_TYPE_TestFixture() :
+ GET_STRUCT_VALUE_GenericTestFixture(&mIn_struct, &mOut){
+ mIn_struct = 1;
+ CFBTestFixtureBase::setup();
+ }
+
+ CIEC_INT mIn_struct;
+ CIEC_INT mOut;
+};
+
+BOOST_FIXTURE_TEST_SUITE( GET_STRUCT_VALUE_WRONG_OUTPUT_TYPETests, GET_STRUCT_VALUE_WRONG_OUTPUT_TYPE_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(wrongInputType) {
+ mMember = "Val1";
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mQO);
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
+
diff --git a/tests/stdfblib/CFB_TEST.cpp b/tests/stdfblib/CFB_TEST.cpp
index e904f1c..49ebf8c 100644
--- a/tests/stdfblib/CFB_TEST.cpp
+++ b/tests/stdfblib/CFB_TEST.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/stdfblib/CFB_TEST.h b/tests/stdfblib/CFB_TEST.h
index fa42f69..f46806d 100644
--- a/tests/stdfblib/CFB_TEST.h
+++ b/tests/stdfblib/CFB_TEST.h
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
diff --git a/tests/stdfblib/CFB_TEST_tester.cpp b/tests/stdfblib/CFB_TEST_tester.cpp
index 16fffe5..8459956 100644
--- a/tests/stdfblib/CFB_TEST_tester.cpp
+++ b/tests/stdfblib/CFB_TEST_tester.cpp
@@ -1,135 +1,32 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../core/fbtests/fbtester.h"
-#include <forte_bool.h>
-#include "CFB_TEST.h"
+#include "../../core/fbtests/fbtestfixture.h"
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "CFB_TEST_tester_gen.cpp"
#endif
-class CFB_TEST_tester : public CFBTester{
- DECLARE_FB_TESTER(CFB_TEST_tester);
- public:
- CFB_TEST_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&mIn_QI);
- SETUP_OUTPUTDATA(&mOut_SR);
+struct CFB_TEST_TestFixture : public CFBTestFixtureBase{
+
+ CFB_TEST_TestFixture() : CFBTestFixtureBase(g_nStringIdCFB_TEST){
+ SETUP_INPUTDATA(&mInQI);
+ SETUP_OUTPUTDATA(&mOutSR);
+ CFBTestFixtureBase::setup();
}
- virtual ~CFB_TEST_tester() {
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(inhibitTest(), "Inhibit Test");
- evaluateTestResult(setTest(), "set Test");
- evaluateTestResult(resetTest(), "reset Test");
- evaluateTestResult(toggleTest(), "toggle Test");
- }
-
- bool inhibitTest(){
- bool bResult = true;
- mIn_QI = false;
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- }
- if(false != mOut_SR){
- bResult = false;
- }
- triggerEvent(1);
- if(!eventChainEmpty()){
- bResult = false;
- }
- if(false != mOut_SR){
- bResult = false;
- }
- }
- return bResult;
- }
- bool setTest(){
- bool bResult = true;
- mIn_QI = true;
- triggerEvent(0);
- if(!checkBothOutputEvents()){
- return false;
- }
- if(false == mOut_SR){
- return false;
- }
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(0)){
- bResult = false;
- break;
- }
- if(false == mOut_SR){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool resetTest(){
- bool bResult = true;
- mIn_QI = true;
- triggerEvent(0);
- clearEventChain();
- triggerEvent(1);
- if(!checkBothOutputEvents()){
- return false;
- }
- if(true == mOut_SR){
- return false;
- }
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(1);
- if(!checkForSingleOutputEventOccurence(0)){
- bResult = false;
- break;
- }
- if(true == mOut_SR){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool toggleTest(){
- bool bResult = true;
- mIn_QI = true;
- for(int i = 0; i < 1000; ++i){
- triggerEvent(0);
- if(!checkBothOutputEvents()){
- bResult = false;
- break;
- }
- if(true != mOut_SR){
- bResult = false;
- break;
- }
- triggerEvent(1);
- if(!checkBothOutputEvents()){
- bResult = false;
- break;
- }
- if(false != mOut_SR){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
+ CIEC_BOOL mInQI;
+ CIEC_BOOL mOutSR;
bool checkBothOutputEvents(){
bool bResult = true;
@@ -145,10 +42,59 @@
return bResult;
}
- CIEC_BOOL mIn_QI;
- CIEC_BOOL mOut_SR;
};
-/***********************************************************************************/
-DEFINE_FB_TESTER(CFB_TEST_tester, g_nStringIdCFB_TEST);
+BOOST_FIXTURE_TEST_SUITE( PermitTests, CFB_TEST_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(inhibitTest){
+ mInQI = false;
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ BOOST_CHECK_EQUAL(false, mOutSR);
+ triggerEvent(1);
+ BOOST_CHECK(eventChainEmpty());
+ BOOST_CHECK_EQUAL(false, mOutSR);
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(setTest){
+ mInQI = true;
+ triggerEvent(0);
+ BOOST_CHECK(checkBothOutputEvents());
+ BOOST_CHECK_EQUAL(true, mOutSR);
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(true, mOutSR);
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(resetTest){
+ mInQI = true;
+ triggerEvent(0);
+ clearEventChain();
+ triggerEvent(1);
+ BOOST_CHECK(checkBothOutputEvents());
+ BOOST_CHECK_EQUAL(false, mOutSR);
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(1);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ BOOST_CHECK_EQUAL(false, mOutSR);
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(toggleTest){
+ mInQI = true;
+ for(int i = 0; i < 1000; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(checkBothOutputEvents());
+ BOOST_CHECK_EQUAL(true, mOutSR);
+ triggerEvent(1);
+ BOOST_CHECK(checkBothOutputEvents());
+ BOOST_CHECK_EQUAL(false, mOutSR);
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/CMakeLists.txt b/tests/stdfblib/CMakeLists.txt
index c29716d..4db97e7 100644
--- a/tests/stdfblib/CMakeLists.txt
+++ b/tests/stdfblib/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2014 fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2014 fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
SET(SOURCE_GROUP ${SOURCE_GROUP}\\fblib)
diff --git a/tests/stdfblib/events/CMakeLists.txt b/tests/stdfblib/events/CMakeLists.txt
index dbd32b4..3dda059 100644
--- a/tests/stdfblib/events/CMakeLists.txt
+++ b/tests/stdfblib/events/CMakeLists.txt
@@ -1,12 +1,13 @@
#*******************************************************************************
-# * Copyright (c) 2011, 2014 ACIN, fortiss GmbH
-# * All rights reserved. This program and the accompanying materials
-# * are made available under the terms of the Eclipse Public License v1.0
-# * which accompanies this distribution, and is available at
-# * http://www.eclipse.org/legal/epl-v10.html
-# *
-# * Contributors:
-# * Alois Zoitl - initial API and implementation and/or initial documentation
+# Copyright (c) 2011, 2014 ACIN, fortiss GmbH
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Alois Zoitl - initial API and implementation and/or initial documentation
# *******************************************************************************/
#############################################################################
@@ -19,7 +20,6 @@
#forte_test_add_sourcefile_cpp(E_DELAY_tester.cpp)
forte_test_add_sourcefile_cpp(E_F_TRIG_tester.cpp)
-forte_test_add_sourcefile_cpp(E_DEMUX_tester.cpp)
forte_test_add_sourcefile_cpp(E_PERMIT_tester.cpp)
forte_test_add_sourcefile_cpp(E_R_TRIG_tester.cpp)
forte_test_add_sourcefile_cpp(E_SR_tester.cpp)
diff --git a/tests/stdfblib/events/E_CTD_tester.cpp b/tests/stdfblib/events/E_CTD_tester.cpp
index ccf19ff..46aee09 100644
--- a/tests/stdfblib/events/E_CTD_tester.cpp
+++ b/tests/stdfblib/events/E_CTD_tester.cpp
@@ -1,183 +1,57 @@
/*******************************************************************************
- * Copyright (c) 2016, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2016 fortiss GmbH, 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_uint.h>
#include <forte_bool.h>
-#include <E_CTD.h>
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_CTD_tester_gen.cpp"
#endif
-class E_CTD_tester : public CFBTester{
- DECLARE_FB_TESTER(E_CTD_tester);
+struct E_CTD_TestFixture : public CFBTestFixtureBase{
- public:
- E_CTD_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&m_oIn_PV);
- SETUP_OUTPUTDATA(&m_oOut_Q, &m_oOut_CV);
- }
- virtual ~E_CTD_tester(){
- }
- ;
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_EventCD(), "EventCD");
- evaluateTestResult(testCase_EventLD(), "EventLD");
- evaluateTestResult(testCase_Mix(), "Alternating CD and LD");
+ E_CTD_TestFixture() : CFBTestFixtureBase(g_nStringIdE_CTD){
+ SETUP_INPUTDATA(&mInPV);
+ SETUP_OUTPUTDATA(&mOutQ, &mOutCV);
+ CFBTestFixtureBase::setup();
}
- bool testCase_EventCD(){
- unsigned int numberOfTries = 100;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOfValues; i++){
- for(unsigned int j = 0; j < numberOfTries; j++){
- m_oIn_PV = valuesToTest[i];
- triggerEvent(1);
- checkForSingleOutputEventOccurence(1);
- //Send event
- triggerEvent(0);
- if(!checkCD(valuesToTest[i])){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_EventLD(){
- unsigned int numberOfTries = 100;
- TForteUInt16 PVToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOftest = static_cast<unsigned int>(sizeof(PVToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOftest; ++i){
- for(unsigned int j = 0; j < numberOfTries; j++){
- m_oIn_PV = PVToTest[i];
- triggerEvent(1);
- if(!checkLD(PVToTest[i])){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_Mix(){
- unsigned int numberOfTries = 100;
- for(unsigned int i = 0; i < numberOfTries; i++){
- m_oIn_PV = 0;
- triggerEvent(1);
- if(!checkLD(0)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(0)){
- return false;
- }
- m_oIn_PV = 1;
- triggerEvent(0);
- if(!checkCD(0)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(1)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(1)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(0)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(1)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(1)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(1)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(1)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(0)){
- return false;
- }
- m_oIn_PV = 65535;
- triggerEvent(1);
- if(!checkLD(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(65534)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkLD(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCD(65534)){
- return false;
- }
- }
- return true;
- }
+ CIEC_UINT mInPV; //Preset value
+ CIEC_BOOL mOutQ; //CV < 0
+ CIEC_UINT mOutCV; //count value
bool checkCD(TForteUInt16 pa_prevCV){
if(pa_prevCV < 1){
//no algorithm should have been executed
- if(m_oOut_CV != pa_prevCV || !m_oOut_Q || !eventChainEmpty()){
+ if(mOutCV != pa_prevCV || !mOutQ || !eventChainEmpty()){
return false;
}
}
else{
- if(((pa_prevCV - 1) != m_oOut_CV)){
+ if(((pa_prevCV - 1) != mOutCV)){
return false;
- }
- else if(m_oOut_Q != (m_oOut_CV < 1)){
+ } else if(mOutQ != (mOutCV < 1)){
return false;
- }
- else if(!checkForSingleOutputEventOccurence(0)){
+ } else if(!checkForSingleOutputEventOccurence(0)){
return false;
}
}
return true;
}
+
bool checkLD(TForteUInt16 pa_usedPV){
- if(pa_usedPV != m_oIn_PV || m_oIn_PV != m_oOut_CV || ((pa_usedPV < 1) != (true == m_oOut_Q))){
+ if(pa_usedPV != mInPV || mInPV != mOutCV || ((pa_usedPV < 1) != (true == mOutQ))){
return false;
}
if(!checkForSingleOutputEventOccurence(1)){
@@ -185,10 +59,86 @@
}
return true;
}
-
- CIEC_UINT m_oIn_PV; //Preset value
- CIEC_BOOL m_oOut_Q; //CV < 0
- CIEC_UINT m_oOut_CV; //count value
};
-DEFINE_FB_TESTER(E_CTD_tester, g_nStringIdE_CTD);
+BOOST_FIXTURE_TEST_SUITE( CTDTests, E_CTD_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(EventCD){
+ unsigned int numberOfTries = 100;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(unsigned int i = 0; i < numberOfValues; i++){
+ for(unsigned int j = 0; j < numberOfTries; j++){
+ mInPV = valuesToTest[i];
+ triggerEvent(1);
+ checkForSingleOutputEventOccurence(1);
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(valuesToTest[i]));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventLD){
+ unsigned int numberOfTries = 100;
+ TForteUInt16 PVToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOftest = static_cast<unsigned int>(sizeof(PVToTest) / sizeof(TForteUInt16));
+ for(unsigned int i = 0; i < numberOftest; ++i){
+ for(unsigned int j = 0; j < numberOfTries; j++){
+ mInPV = PVToTest[i];
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(PVToTest[i]));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Mix){
+ unsigned int numberOfTries = 100;
+ for(unsigned int i = 0; i < numberOfTries; i++){
+ mInPV = 0;
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(0));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(0));
+
+ mInPV = 1;
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(0));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(1));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(1));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(0));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(1));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(1));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(1));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(1));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(0));
+
+ mInPV = 65535;
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(65534));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(65535));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(65535));
+ triggerEvent(1);
+ BOOST_CHECK(checkLD(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCD(65534));
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_CTUD_tester.cpp b/tests/stdfblib/events/E_CTUD_tester.cpp
index c7a5a1c..844fc25 100644
--- a/tests/stdfblib/events/E_CTUD_tester.cpp
+++ b/tests/stdfblib/events/E_CTUD_tester.cpp
@@ -1,248 +1,47 @@
/*******************************************************************************
- * Copyright (c) 2016, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2016 fortiss GmbH, 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_uint.h>
#include <forte_bool.h>
-#include <E_CTUD.h>
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_CTUD_tester_gen.cpp"
#endif
-#include <iostream>
+struct E_CTUD_TestFixture : public CFBTestFixtureBase{
-class E_CTUD_tester : public CFBTester{
- DECLARE_FB_TESTER(E_CTUD_tester);
-
- public:
- E_CTUD_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&m_oIn_PV);
- SETUP_OUTPUTDATA(&m_oOut_QU, &m_oOut_QD, &m_oOut_CV);
- }
- virtual ~E_CTUD_tester(){
- }
- ;
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_EventCU(), "EventCU");
- evaluateTestResult(testCase_EventCD(), "EventCD");
- evaluateTestResult(testCase_EventR(), "EventR");
- evaluateTestResult(testCase_EventLD(), "EventLD");
- evaluateTestResult(testCase_Mix(), "Alternating Events");
+ E_CTUD_TestFixture() : CFBTestFixtureBase(g_nStringIdE_CTUD){
+ SETUP_INPUTDATA(&mInPV);
+ SETUP_OUTPUTDATA(&mOutQU, &mOutQD, &mOutCV);
+ CFBTestFixtureBase::setup();
}
- bool testCase_EventCU(){
- TForteUInt16 prevCV = 0;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int j = 0; j < numberOfValues; j++){
- triggerEvent(2);
- if(!checkR()){
- return false;
- }
- m_oIn_PV = valuesToTest[j];
- for(unsigned int k = 0; k < static_cast<unsigned int>(m_oIn_PV + 3); k++){
- prevCV = m_oOut_CV;
- //Send event
- triggerEvent(0);
- if(!checkCU(prevCV)){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_EventCD(){
- unsigned int numberOfTries = 100;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOfTries; i++){
- for(unsigned int j = 0; j < numberOfValues; j++){
- m_oIn_PV = valuesToTest[j];
- triggerEvent(3);
- checkForSingleOutputEventOccurence(1);
- //Send event
- triggerEvent(1);
- if(!checkCD(valuesToTest[j])){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_EventR(){
- unsigned int numberOfTries = 100;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOfTries; i++){
- for(unsigned int j = 0; j < numberOfValues; j++){
- m_oIn_PV = valuesToTest[j];
- triggerEvent(3); //loads the value to input of the FB, because the Rese event doesn't scan the PV input.
- checkForSingleOutputEventOccurence(1);
- triggerEvent(2);
- if(!checkR()){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_EventLD(){
- unsigned int numberOfTries = 100;
- TForteUInt16 PVToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOftest = static_cast<unsigned int>(sizeof(PVToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOfTries; i++){
- for(unsigned int j = 0; j < numberOftest; j++){
- m_oIn_PV = PVToTest[j];
- triggerEvent(3);
- if(!checkLD(PVToTest[j])){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_Mix(){
- unsigned int numberOfTries = 10;
- for(unsigned int i = 0; i < numberOfTries; i++){
- m_oIn_PV = 0;
- triggerEvent(3);
- if(!checkLD(0)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(0)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(1)){
- return false;
- }
- triggerEvent(1);
- if(!checkCD(2)){
- return false;
- }
- triggerEvent(3);
- if(!checkLD(0)){
- return false;
- }
- triggerEvent(2);
- if(!checkR()){
- return false;
- }
- m_oIn_PV = 1;
- triggerEvent(0);
- if(!checkCU(0)){
- return false;
- }
- triggerEvent(3);
- if(!checkLD(1)){
- return false;
- }
- triggerEvent(3);
- if(!checkLD(1)){
- return false;
- }
- m_oIn_PV = 65533;
- triggerEvent(3);
- if(!checkLD(65533)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65533)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65534)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkCD(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkCD(65534)){
- return false;
- }
- triggerEvent(2);
- if(!checkR()){
- return false;
- }
- m_oIn_PV = 65533;
- for(TForteUInt16 i = 0; i < 65533; i++){
- //Send event
- triggerEvent(0);
- if(!checkCU(i)){
- return false;
- }
- }
- triggerEvent(0);
- if(!checkCU(65533)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65534)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkCD(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65534)){
- return false;
- }
- triggerEvent(2);
- if(!checkR()){
- return false;
- }
- }
- return true;
- }
+ CIEC_UINT mInPV; //Preset value
+ CIEC_BOOL mOutQU; //CV >= PV
+ CIEC_BOOL mOutQD; //CV <= 0
+ CIEC_UINT mOutCV; //count value
- bool checkCU(TForteUInt16 pa_prevCV){
- if(pa_prevCV < 65535){
- if(((pa_prevCV + 1) != m_oOut_CV)){
- std::cout << "Error 1\n";
+ bool checkCU(unsigned int paPrevCV){
+ if(paPrevCV < 65535){
+ if(((paPrevCV + 1) != mOutCV)){
return false;
}
else if(!checkForSingleOutputEventOccurence(0)){
- std::cout << "Error 2\n";
return false;
}
}
else{
- if(65535 != m_oOut_CV && !eventChainEmpty()){
- std::cout << "Error 3\n";
+ if(65535 != mOutCV && !eventChainEmpty()){
return false;
}
}
@@ -251,25 +50,22 @@
}
return true;
}
- bool checkCD(TForteUInt16 pa_prevCV){
- if(pa_prevCV < 1){
+
+ bool checkCD(unsigned int paPrevCV){
+ if(paPrevCV < 1){
//no algorithm should have been executed
- if(m_oOut_CV != pa_prevCV || !m_oOut_QD || !eventChainEmpty()){
- std::cout << "Error 4\n";
+ if(mOutCV != paPrevCV || !mOutQD || !eventChainEmpty()){
return false;
}
}
else{
- if(((pa_prevCV - 1) != m_oOut_CV)){
- std::cout << "Error 5\n";
+ if(((paPrevCV - 1) != mOutCV)){
return false;
}
- else if(m_oOut_QD != (m_oOut_CV < 1)){
- std::cout << "Error 6\n";
+ else if(mOutQD != (mOutCV < 1)){
return false;
}
else if(!checkForSingleOutputEventOccurence(0)){
- std::cout << "Error 7\n";
return false;
}
}
@@ -278,51 +74,167 @@
}
return true;
}
+
bool checkR(){
- if(0 != m_oOut_CV){
- std::cout << "Error 8\n";
+ if(0 != mOutCV){
return false;
}
if(!checkForSingleOutputEventOccurence(1)){
- std::cout << "Error 9\n";
return false;
}
if(!checkBooleans()){
- std::cout << "Error 10\n";
return false;
}
return true;
}
- bool checkLD(TForteUInt16 pa_usedPV){
- if(pa_usedPV != m_oIn_PV || m_oIn_PV != m_oOut_CV || ((pa_usedPV < 1) != (true == m_oOut_QD))){
- std::cout << "Error 11\n";
+
+ bool checkLD(unsigned int paUsedPV){
+ if(paUsedPV != mInPV || mInPV != mOutCV || ((paUsedPV < 1) != (true == mOutQD))){
return false;
}
if(!checkForSingleOutputEventOccurence(2)){
- std::cout << "Error 12\n";
return false;
}
if(!checkBooleans()){
- std::cout << "Error 13\n";
return false;
}
return true;
}
+
bool checkBooleans(){
- if(m_oOut_QU != (m_oOut_CV >= m_oIn_PV) || (m_oOut_QD != (m_oOut_CV < 1))){
- std::cout << "m_oIn_PV\tm_oOut_CV\tm_oOut_QU\tm_oOut_QD\n";
- std::cout << m_oIn_PV << "\t" << m_oOut_CV << "\t" << m_oOut_QU << "\t" << m_oOut_QD << "\n";
- std::cout << "Boolean error\n";
- return false;
- }
- return true;
+ return !(mOutQU != (mOutCV >= mInPV) || (mOutQD != (mOutCV < 1)));
}
-
-
- CIEC_UINT m_oIn_PV; //Preset value
- CIEC_BOOL m_oOut_QU; //CV >= PV
- CIEC_BOOL m_oOut_QD; //CV <= 0
- CIEC_UINT m_oOut_CV; //count value
};
-DEFINE_FB_TESTER(E_CTUD_tester, g_nStringIdE_CTUD);
+BOOST_FIXTURE_TEST_SUITE( CTUDTests, E_CTUD_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(EventCU){
+ TForteUInt16 prevCV = 0;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(unsigned int j = 0; j < numberOfValues; j++){
+ triggerEvent(2);
+ BOOST_CHECK(checkR());
+ mInPV = valuesToTest[j];
+ for(unsigned int k = 0; k < static_cast<unsigned int>(mInPV + 3); k++){
+ prevCV = mOutCV;
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(prevCV));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventCD){
+ unsigned int numberOfTries = 100;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(unsigned int i = 0; i < numberOfTries; i++){
+ for(unsigned int j = 0; j < numberOfValues; j++){
+ mInPV = valuesToTest[j];
+ triggerEvent(3);
+ checkForSingleOutputEventOccurence(1);
+ //Send event
+ triggerEvent(1);
+ BOOST_CHECK(checkCD(valuesToTest[j]));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventR){
+ unsigned int numberOfTries = 100;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(unsigned int i = 0; i < numberOfTries; i++){
+ for(unsigned int j = 0; j < numberOfValues; j++){
+ mInPV = valuesToTest[j];
+ triggerEvent(3); //loads the value to input of the FB, because the Rese event doesn't scan the PV input.
+ checkForSingleOutputEventOccurence(1);
+ triggerEvent(2);
+ BOOST_CHECK(checkR());
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventLD){
+ unsigned int numberOfTries = 100;
+ TForteUInt16 PVToTest[] = { 10, 1, 0, 65534, 65535 };
+ unsigned int numberOftest = static_cast<unsigned int>(sizeof(PVToTest) / sizeof(TForteUInt16));
+ for(unsigned int i = 0; i < numberOfTries; i++){
+ for(unsigned int j = 0; j < numberOftest; j++){
+ mInPV = PVToTest[j];
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(PVToTest[j]));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Mix){
+ unsigned int numberOfTries = 10;
+ for(unsigned int i = 0; i < numberOfTries; i++){
+ mInPV = 0;
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(0));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(0));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(1));
+ triggerEvent(1);
+ BOOST_CHECK(checkCD(2));
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(0));
+ triggerEvent(2);
+ BOOST_CHECK(checkR());
+
+ mInPV = 1;
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(0));
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(1));
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(1));
+
+ mInPV = 65533;
+ triggerEvent(3);
+ BOOST_CHECK(checkLD(65533));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65533));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65534));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65535));
+ triggerEvent(1);
+ BOOST_CHECK(checkCD(65535));
+ triggerEvent(1);
+ BOOST_CHECK(checkCD(65534));
+ triggerEvent(2);
+ BOOST_CHECK(checkR());
+
+ mInPV = 65533;
+ for(unsigned int j = 0; j < 65533; j++){
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(j));
+ }
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65533));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65534));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65535));
+ triggerEvent(1);
+ BOOST_CHECK(checkCD(65535));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(65534));
+ triggerEvent(2);
+ BOOST_CHECK(checkR());
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_CTU_tester.cpp b/tests/stdfblib/events/E_CTU_tester.cpp
index 02269ea..5427507 100644
--- a/tests/stdfblib/events/E_CTU_tester.cpp
+++ b/tests/stdfblib/events/E_CTU_tester.cpp
@@ -1,181 +1,143 @@
/*******************************************************************************
- * Copyright (c) 2016, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2016 fortiss GmbH, 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jose Cabral - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_uint.h>
#include <forte_bool.h>
-#include <E_CTU.h>
+
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_CTU_tester_gen.cpp"
#endif
-#include <iostream>
+struct E_CTU_TestFixture : public CFBTestFixtureBase{
-class E_CTU_tester : public CFBTester{
- DECLARE_FB_TESTER(E_CTU_tester);
-
- public:
- E_CTU_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&m_oIn_PV);
- SETUP_OUTPUTDATA(&m_oOut_Q, &m_oOut_CV);
- }
- virtual ~E_CTU_tester() {};
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_EventCU(), "EventCU");
- evaluateTestResult(testCase_EventR(), "EventR");
- evaluateTestResult(testCase_Mix(), "Alternating CU and R");
+ E_CTU_TestFixture() : CFBTestFixtureBase(g_nStringIdE_CTU){
+ SETUP_INPUTDATA(&mInPV);
+ SETUP_OUTPUTDATA(&mOutQ, &mOutCV);
+ CFBTestFixtureBase::setup();
}
- bool testCase_EventCU(){
- TForteUInt16 prevCV = 0;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int j = 0; j < numberOfValues; j++){
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- m_oIn_PV = valuesToTest[j];
- for(unsigned int k = 0; k < static_cast<unsigned int>(m_oIn_PV + 3); k++){
- prevCV = m_oOut_CV;
- //Send event
- triggerEvent(0);
- if(!checkCU(prevCV)){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_EventR(){
- unsigned int numberOfTries = 100;
- TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
- unsigned int numberOfValues = static_cast<unsigned int>(sizeof(valuesToTest) / sizeof(TForteUInt16));
- for(unsigned int i = 0; i < numberOfTries; i++){
- for(unsigned int j = 0; j < numberOfValues; j++){
- m_oIn_PV = valuesToTest[j];
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- }
- }
- return true;
- }
- bool testCase_Mix(){
- m_oIn_PV = 0;
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(0)){
- return false;
- }
- m_oIn_PV = 1;
- triggerEvent(0);
- if(!checkCU(1)){
- return false;
- }
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(0)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(1)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(2)){
- return false;
- }
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- m_oIn_PV = 65533;
- for(TForteUInt16 i = 0; i < 65533; i++){
- //Send event
- triggerEvent(0);
- if(!checkCU(i)){
- return false;
- }
- }
- triggerEvent(0);
- if(!checkCU(65533)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65534)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(0);
- if(!checkCU(65535)){
- return false;
- }
- triggerEvent(1);
- if(!checkR()){
- return false;
- }
- return true;
- }
+ CIEC_UINT mInPV; //Preset value
+ CIEC_BOOL mOutQ; //CV >= PV
+ CIEC_UINT mOutCV; //count value
- bool checkCU(TForteUInt16 pa_prevCV){
- if(pa_prevCV < 65535){
- if(((pa_prevCV + 1) != m_oOut_CV)){
- return false;
- }
- else if(!checkForSingleOutputEventOccurence(0)){
- return false;
- }
- }
- else{
- if(65535 != m_oOut_CV && !eventChainEmpty()){
- return false;
- }
- }
- if(m_oOut_Q != (m_oOut_CV >= m_oIn_PV)){
- return false;
- }
- return true;
- }
- bool checkR(){
- if(0 != m_oOut_CV || m_oOut_Q){
- return false;
- }
- if(!checkForSingleOutputEventOccurence(1)){
- return false;
- }
- return true;
- }
+ bool checkCU(TForteUInt16 paPrevCV){
+ if(paPrevCV < CIEC_UINT::scm_nMaxVal){
+ if(((paPrevCV + 1) != mOutCV)){
+ return false;
+ }
+ else if(!checkForSingleOutputEventOccurence(0)){
+ return false;
+ }
+ }else{
+ if(CIEC_UINT::scm_nMaxVal != mOutCV && !eventChainEmpty()){
+ return false;
+ }
+ }
+ if(mOutQ != (mOutCV >= mInPV)){
+ return false;
+ }
+ return true;
+ }
- CIEC_UINT m_oIn_PV; //Preset value
- CIEC_BOOL m_oOut_Q; //CV >= PV
- CIEC_UINT m_oOut_CV; //count value
+ bool checkR(){
+ if(0 != mOutCV || mOutQ){
+ return false;
+ }
+ if(!checkForSingleOutputEventOccurence(1)){
+ return false;
+ }
+ return true;
+ }
};
-DEFINE_FB_TESTER(E_CTU_tester, g_nStringIdE_CTU)
+BOOST_FIXTURE_TEST_SUITE( CTUTests, E_CTU_TestFixture)
+ BOOST_AUTO_TEST_CASE(EventCU){
+ TForteUInt16 prevCV = 0;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ size_t numberOfValues = static_cast<size_t>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(size_t j = 0; j < numberOfValues; j++){
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+ mInPV = valuesToTest[j];
+ for(unsigned int k = 0; k < static_cast<unsigned int>(mInPV + 3); k++){
+ prevCV = mOutCV;
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(prevCV));
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventR){
+ size_t numberOfTries = 100;
+ TForteUInt16 valuesToTest[] = { 10, 1, 0, 65534, 65535 };
+ size_t numberOfValues = static_cast<size_t>(sizeof(valuesToTest) / sizeof(TForteUInt16));
+ for(size_t i = 0; i < numberOfTries; i++){
+ for(size_t j = 0; j < numberOfValues; j++){
+ mInPV = valuesToTest[j];
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+ }
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Mix){
+ mInPV = 0;
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(0));
+
+ mInPV = 1;
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(1));
+
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(0));
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(1));
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(2));
+
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+
+ mInPV = 65533;
+ for(TForteUInt16 i = 0; i < CIEC_UINT::scm_nMaxVal; i++){
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(i));
+ }
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
+
+ triggerEvent(0);
+ BOOST_CHECK(checkCU(CIEC_UINT::scm_nMaxVal));
+
+ triggerEvent(1);
+ BOOST_CHECK(checkR());
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_DELAY_tester.cpp b/tests/stdfblib/events/E_DELAY_tester.cpp
index 7617af7..05dd3be 100644
--- a/tests/stdfblib/events/E_DELAY_tester.cpp
+++ b/tests/stdfblib/events/E_DELAY_tester.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
@@ -47,14 +48,14 @@
}
bool testCase_NormalDelay(){
- mDT.setFromMiliSeconds(500);
+ mDT.setFromMilliSeconds(500);
triggerEvent(0);
usleep(500000);
return checkForSingleOutputEventOccurence(0);
}
bool testCase_AbortedDelay(){
bool retVal = true;
- mDT.setFromMiliSeconds(1000);
+ mDT.setFromMilliSeconds(1000);
triggerEvent(0);
if(!eventChainEmpty()){
retVal = false;
@@ -71,7 +72,7 @@
}
bool testCase_MultipleStarts(){
bool retVal = true;
- mDT.setFromMiliSeconds(200);
+ mDT.setFromMilliSeconds(200);
triggerEvent(0);
usleep(50000);
if(!eventChainEmpty()){
diff --git a/tests/stdfblib/events/E_DEMUX_tester.cpp b/tests/stdfblib/events/E_DEMUX_tester.cpp
index 4b1ed21..be71a47 100644
--- a/tests/stdfblib/events/E_DEMUX_tester.cpp
+++ b/tests/stdfblib/events/E_DEMUX_tester.cpp
@@ -1,9 +1,10 @@
/*******************************************************************************
* Copyright (c) 2018 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Kirill Dorofeev
diff --git a/tests/stdfblib/events/E_F_TRIG_tester.cpp b/tests/stdfblib/events/E_F_TRIG_tester.cpp
index 390c56d..8c7239b 100644
--- a/tests/stdfblib/events/E_F_TRIG_tester.cpp
+++ b/tests/stdfblib/events/E_F_TRIG_tester.cpp
@@ -1,93 +1,68 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
-#include <E_F_TRIG.h>
+#include "../../core/fbtests/fbtestfixture.h"
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_F_TRIG_tester_gen.cpp"
#endif
-/***********************************************************************************/
-/***********************************************************************************/
+struct E_F_TRIG_TestFixture : public CFBTestFixtureBase{
-class E_F_TRIG_tester : public CFBTester{
- DECLARE_FB_TESTER(E_F_TRIG_tester);
-
- public:
- E_F_TRIG_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&mIn_QI);
+ E_F_TRIG_TestFixture() : CFBTestFixtureBase(g_nStringIdE_F_TRIG){
+ SETUP_INPUTDATA(&mInQI);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_F_TRIG_tester() {
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_RaisingEdge(), "Raising Edge");
- evaluateTestResult(testCase_FallingEdge(), "Falling Edge");
- evaluateTestResult(testCase_StableHigh(), "Stable High");
- evaluateTestResult(testCase_StableLow(), "Stable Low");
- }
-
- bool testCase_RaisingEdge(){
- bool bResult = true;
- mIn_QI = true;
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- }
- return bResult;
- }
- bool testCase_FallingEdge(){
- mIn_QI = true;
- triggerEvent(0);
- mIn_QI = false;
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
- bool testCase_StableHigh(){
- bool bResult = true;
- mIn_QI = true;
- triggerEvent(0);
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool testCase_StableLow(){
- bool bResult = true;
- mIn_QI = false;
- triggerEvent(0); //Just in case that the QI has been true first handle a potential falling edge
- pullFirstChainEventID();
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
-
- CIEC_BOOL mIn_QI; //DATA INPUT
+ CIEC_BOOL mInQI; //DATA INPUT
};
-/***********************************************************************************/
-/***********************************************************************************/
-DEFINE_FB_TESTER(E_F_TRIG_tester, g_nStringIdE_F_TRIG)
+BOOST_FIXTURE_TEST_SUITE( FTrigTests, E_F_TRIG_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(RaisingEdge){
+ mInQI = true;
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+ BOOST_AUTO_TEST_CASE(FallingEdge){
+ mInQI = true;
+ triggerEvent(0);
+ mInQI = false;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+
+ BOOST_AUTO_TEST_CASE(StableHigh){
+ mInQI = true;
+ triggerEvent(0);
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(StableLow){
+ mInQI = false;
+ triggerEvent(0); //Just in case that the QI has been true first handle a potential falling edge
+ clearEventChain();
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
+
diff --git a/tests/stdfblib/events/E_PERMIT_tester.cpp b/tests/stdfblib/events/E_PERMIT_tester.cpp
index 5871bc2..d3fe987 100644
--- a/tests/stdfblib/events/E_PERMIT_tester.cpp
+++ b/tests/stdfblib/events/E_PERMIT_tester.cpp
@@ -1,62 +1,45 @@
/*******************************************************************************
- * Copyright (c) 2011 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2011 - 2014, 2018 ACIN, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
-#include <forte_bool.h>
-#include <E_PERMIT.h>
+#include "../../core/fbtests/fbtestfixture.h"
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_PERMIT_tester_gen.cpp"
#endif
+struct E_PERMIT_TestFixture : public CFBTestFixtureBase{
-class E_PERMIT_tester : public CFBTester{
- DECLARE_FB_TESTER(E_PERMIT_tester);
- public:
-
- E_PERMIT_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&m_oIn_PERMIT);
+ E_PERMIT_TestFixture() : CFBTestFixtureBase(g_nStringIdE_PERMIT){
+ SETUP_INPUTDATA(&mInPERMIT);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_PERMIT_tester() {
-
- }
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_Permit(), "Permit");
- evaluateTestResult(testCase_DontPermit(), "DontPermit");
- }
-
- /***********************************************************************************/
- bool testCase_Permit(){
- /* prepare inputparameters */
- m_oIn_PERMIT = true;
- /* trigger the inputevent */
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
- bool testCase_DontPermit(){
- bool bTestResult = true;
- /* prepare inputparameters */
- m_oIn_PERMIT = false;
- /* trigger the inputevent */
- triggerEvent(0);
- /* verify if there is no output event (testspecification)*/
- if(!eventChainEmpty())
- bTestResult = false;
-
- return bTestResult;
- }
-
- CIEC_BOOL m_oIn_PERMIT; //DATA INPUT
+
+ CIEC_BOOL mInPERMIT; //DATA INPUT
};
-/***********************************************************************************/
-DEFINE_FB_TESTER(E_PERMIT_tester, g_nStringIdE_PERMIT)
+BOOST_FIXTURE_TEST_SUITE( PermitTests, E_PERMIT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(permit){
+ mInPERMIT = true;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+
+ BOOST_AUTO_TEST_CASE(dontPermit){
+ mInPERMIT = false;
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_R_TRIG_tester.cpp b/tests/stdfblib/events/E_R_TRIG_tester.cpp
index 577792a..6ee62bc 100644
--- a/tests/stdfblib/events/E_R_TRIG_tester.cpp
+++ b/tests/stdfblib/events/E_R_TRIG_tester.cpp
@@ -1,90 +1,66 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
-#include <E_R_TRIG.h>
+#include "../../core/fbtests/fbtestfixture.h"
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_R_TRIG_tester_gen.cpp"
#endif
-/***********************************************************************************/
-/***********************************************************************************/
+struct E_R_TRIG_TestFixture : public CFBTestFixtureBase{
-class E_R_TRIG_tester : public CFBTester{
- DECLARE_FB_TESTER(E_R_TRIG_tester);
-
- public:
- E_R_TRIG_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&m_oIn_QI);
+ E_R_TRIG_TestFixture() : CFBTestFixtureBase(g_nStringIdE_R_TRIG){
+ SETUP_INPUTDATA(&mInQI);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_R_TRIG_tester(){
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_RaisingEdge(), "Raising Edge");
- evaluateTestResult(testCase_FallingEdge(), "Falling Edge");
- evaluateTestResult(testCase_StableHigh(), "Stable High");
- evaluateTestResult(testCase_StableLow(), "Stable Low");
- }
-
- bool testCase_RaisingEdge(){
- m_oIn_QI = true;
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
- bool testCase_FallingEdge(){
- bool bResult = true;
- m_oIn_QI = true;
- triggerEvent(0);
- m_oIn_QI = false;
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- }
- return bResult;
- }
- bool testCase_StableHigh(){
- bool bResult = true;
- m_oIn_QI = true;
- triggerEvent(0);
- pullFirstChainEventID();
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool testCase_StableLow(){
- bool bResult = true;
- m_oIn_QI = false;
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
-
- CIEC_BOOL m_oIn_QI; //DATA INPUT
+ CIEC_BOOL mInQI; //DATA INPUT
};
-/***********************************************************************************/
-/***********************************************************************************/
-DEFINE_FB_TESTER(E_R_TRIG_tester, g_nStringIdE_R_TRIG)
+BOOST_FIXTURE_TEST_SUITE( RTrigTests, E_R_TRIG_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(RaisingEdge){
+ mInQI = true;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+
+ BOOST_AUTO_TEST_CASE(FallingEdge){
+ mInQI = true;
+ triggerEvent(0);
+ clearEventChain();
+ mInQI = false;
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+ BOOST_AUTO_TEST_CASE(StableHigh){
+ mInQI = true;
+ triggerEvent(0);
+ pullFirstChainEventID();
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(StableLow){
+ mInQI = false;
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_SELECT_tester.cpp b/tests/stdfblib/events/E_SELECT_tester.cpp
index fd25998..585ee8b 100644
--- a/tests/stdfblib/events/E_SELECT_tester.cpp
+++ b/tests/stdfblib/events/E_SELECT_tester.cpp
@@ -1,146 +1,92 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_bool.h>
-#include <E_SELECT.h>
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_SELECT_tester_gen.cpp"
#endif
+struct E_SELECT_TestFixture : public CFBTestFixtureBase{
-class E_SELECT_tester : public CFBTester{
- DECLARE_FB_TESTER(E_SELECT_tester);
- public:
- E_SELECT_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&mIn_G);
+ E_SELECT_TestFixture() : CFBTestFixtureBase(g_nStringIdE_SELECT){
+ SETUP_INPUTDATA(&mInG);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_SELECT_tester() {
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_SelectEI0(), "Single EI0");
- evaluateTestResult(testCase_SelectEI1(), "Single EI1");
- evaluateTestResult(testCase_MultipleSelectEI0(), "Multiple EI0");
- evaluateTestResult(testCase_MultipleSelectEI1(), "Multiple EI1");
- evaluateTestResult(testCase_Alternate(), "Alternate");
- }
-
- /***********************************************************************************/
- bool testCase_SelectEI0(){
- bool bRetVal = true;
- mIn_G = false;
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- }
- triggerEvent(1);
- if(!eventChainEmpty())
- bRetVal = false;
-
- return bRetVal;
- }
- bool testCase_SelectEI1(){
- bool bRetVal = true;
- mIn_G = true;
- triggerEvent(1);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- }
- triggerEvent(0);
- if(!eventChainEmpty())
- bRetVal = false;
-
- return bRetVal;
- }
- bool testCase_MultipleSelectEI0(){
- bool bRetVal = true;
- mIn_G = false;
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- }
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- triggerEvent(1);
- if(!eventChainEmpty()){
- bRetVal = false;
- break;
- }
- }
- return bRetVal;
- }
- bool testCase_MultipleSelectEI1(){
- bool bRetVal = true;
- mIn_G = true;
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(1);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- }
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent(1);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- triggerEvent(0);
- if(!eventChainEmpty()){
- bRetVal = false;
- break;
- }
- }
- return bRetVal;
- }
- bool testCase_Alternate(){
- bool bRetVal = true;
- for(unsigned int i = 0; i < 1000; ++i){
- mIn_G = !mIn_G;
- triggerEvent((mIn_G) ? 1 : 0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- }
- for(unsigned int i = 0; i < 1000; i++){
- triggerEvent((mIn_G) ? 1 : 0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetVal = false;
- break;
- }
- triggerEvent((mIn_G) ? 0 : 1);
- if(!eventChainEmpty()){
- bRetVal = false;
- break;
- }
- }
- return bRetVal;
- }
-
- CIEC_BOOL mIn_G; //DATA INPUT
+ CIEC_BOOL mInG; //DATA INPUT
};
-/***********************************************************************************/
-DEFINE_FB_TESTER(E_SELECT_tester, g_nStringIdE_SELECT)
+BOOST_FIXTURE_TEST_SUITE( SelectTests, E_SELECT_TestFixture)
+
+ BOOST_AUTO_TEST_CASE(SelectEI0){
+ mInG = false;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ triggerEvent(1);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+ BOOST_AUTO_TEST_CASE(SelectEI1){
+ mInG = true;
+ triggerEvent(1);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+
+ BOOST_AUTO_TEST_CASE(MultipleSelectEI0){
+ mInG = false;
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ triggerEvent(1);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(MultipleSelectEI1){
+ mInG = true;
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(1);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent(1);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Alternate){
+ for(unsigned int i = 0; i < 1000; ++i){
+ mInG = !mInG;
+ triggerEvent((mInG) ? 1 : 0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+ for(unsigned int i = 0; i < 1000; i++){
+ triggerEvent((mInG) ? 1 : 0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ triggerEvent((mInG) ? 0 : 1);
+ BOOST_CHECK(eventChainEmpty());
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_SR_tester.cpp b/tests/stdfblib/events/E_SR_tester.cpp
index 05386b0..dc41b61 100644
--- a/tests/stdfblib/events/E_SR_tester.cpp
+++ b/tests/stdfblib/events/E_SR_tester.cpp
@@ -1,114 +1,74 @@
/*******************************************************************************
- * Copyright (c) 2011 - 2014 ACIN, fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2011 - 2014, 2018 ACIN, fortiss GmbH
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_bool.h>
-#include <E_SR.h>
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_SR_tester_gen.cpp"
#endif
-/***********************************************************************************/
-/***********************************************************************************/
+struct E_SR_TestFixture : public CFBTestFixtureBase{
-class E_SR_tester : public CFBTester{
- DECLARE_FB_TESTER(E_SR_tester);
-
- public:
- E_SR_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_OUTPUTDATA(&mOut_Q);
+ E_SR_TestFixture() : CFBTestFixtureBase(g_nStringIdE_SR){
+ SETUP_OUTPUTDATA(&mOutQ);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_SR_tester() {
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_EventS(), "EventS");
- evaluateTestResult(testCase_EventR(), "EventR");
- evaluateTestResult(testCase_Toggle(), "Toggle");
- }
-
- bool testCase_EventS(){
- bool bResult = true;
- //Send event
- triggerEvent(0);
- if(!checkStateChange(true))
- bResult = false;
-
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(0);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- if(mOut_Q != true){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool testCase_EventR(){
- bool bResult = true;
- //Send event
- triggerEvent(1);
- //Test correct order of outgoing events
- if(!checkStateChange(false))
- bResult = false;
-
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(1);
- if(!eventChainEmpty()){
- bResult = false;
- break;
- }
- if(mOut_Q != false){
- bResult = false;
- break;
- }
- }
- return bResult;
- }
- bool testCase_Toggle(){
- bool bResult = true;
- for(unsigned int i = 0; i < 100; ++i){
- triggerEvent(0);
- if(!checkStateChange(true)){
- bResult = false;
- break;
- }
- triggerEvent(1);
- checkStateChange(false);
- }
- return bResult;
- }
+ CIEC_BOOL mOutQ; //DATA OUTPUT
/*\brief Check if the E_SR changed to the given target state
- *
*/
- bool checkStateChange(bool bTargetState){
- bool bResult = checkForSingleOutputEventOccurence(0);
- //verify data output
- if(mOut_Q != bTargetState)
- bResult = false;
-
- return bResult;
+ bool checkStateChange(bool paTargetState){
+ return checkForSingleOutputEventOccurence(0) && (paTargetState == mOutQ);
}
-
- CIEC_BOOL mOut_Q; //DATA OUTPUT
};
-/***********************************************************************************/
-/***********************************************************************************/
+BOOST_FIXTURE_TEST_SUITE( SRTests, E_SR_TestFixture)
-DEFINE_FB_TESTER(E_SR_tester, g_nStringIdE_SR);
+ BOOST_AUTO_TEST_CASE(EventS){
+ //Send event
+ triggerEvent(0);
+ BOOST_CHECK(checkStateChange(true));
+
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(eventChainEmpty());
+ BOOST_CHECK(mOutQ);
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(EventR){
+ triggerEvent(0); //initially SR is reset, requires a set before reset
+ BOOST_CHECK(checkStateChange(true));
+ triggerEvent(1);
+ //Test correct order of outgoing events
+ BOOST_CHECK(checkStateChange(false));
+
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(1);
+ BOOST_CHECK(eventChainEmpty());
+ BOOST_CHECK_EQUAL(false, mOutQ);
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Toggle){
+ for(unsigned int i = 0; i < 100; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(checkStateChange(true));
+ triggerEvent(1);
+ BOOST_CHECK(checkStateChange(false));
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/stdfblib/events/E_SWITCH_tester.cpp b/tests/stdfblib/events/E_SWITCH_tester.cpp
index a91ceee..eae5325 100644
--- a/tests/stdfblib/events/E_SWITCH_tester.cpp
+++ b/tests/stdfblib/events/E_SWITCH_tester.cpp
@@ -1,93 +1,70 @@
/*******************************************************************************
* Copyright (c) 2014 fortiss GmbH
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 2018 Johannes Kepler University
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
*
* Contributors:
- * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - initial API and implementation and/or initial documentation
+ * Alois Zoitl - migrated fb tests to boost test infrastructure
*******************************************************************************/
-#include "../../core/fbtests/fbtester.h"
+#include "../../core/fbtests/fbtestfixture.h"
#include <forte_bool.h>
-#include <E_SWITCH.h>
+
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
#include "E_SWITCH_tester_gen.cpp"
#endif
-class E_SWITCH_tester : public CFBTester{
- DECLARE_FB_TESTER(E_SWITCH_tester);
- public:
- E_SWITCH_tester(CResource* m_poTestResource) :
- CFBTester(m_poTestResource){
- SETUP_INPUTDATA(&mIn_G);
+struct E_SWITCH_TestFixture : public CFBTestFixtureBase{
+
+ E_SWITCH_TestFixture() : CFBTestFixtureBase(g_nStringIdE_SWITCH){
+ SETUP_INPUTDATA(&mInG);
+ CFBTestFixtureBase::setup();
}
- virtual ~E_SWITCH_tester() {
-
- }
-
- private:
- virtual void executeAllTests(){
- evaluateTestResult(testCase_SingelE0(), "Single E0");
- evaluateTestResult(testCase_SingleE1(), "Single E1");
- evaluateTestResult(testCase_MultipleE0(), "Multiple E0");
- evaluateTestResult(testCase_MultipleE1(), "Multiple E1");
- evaluateTestResult(testCase_Alternate(), "Alternate");
- }
-
- /***********************************************************************************/
- bool testCase_SingelE0(){
- mIn_G = false;
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(0);
- }
- bool testCase_SingleE1(){
- mIn_G = true;
- triggerEvent(0);
- return checkForSingleOutputEventOccurence(1);
- }
- bool testCase_MultipleE0(){
- bool bRetval = true;
- mIn_G = false;
- for(unsigned int i = 0; i < 1000; ++i){
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(0)){
- bRetval = false;
- break;
- }
- }
- return bRetval;
- }
- bool testCase_MultipleE1(){
- bool bRetval = true;
- mIn_G = true;
- for(unsigned int i = 0; i < 1000; ++i){
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence(1)){
- bRetval = false;
- break;
- }
- }
- return bRetval;
- }
- bool testCase_Alternate(){
- bool bRetval = true;
- for(unsigned int i = 0; i < 1000; ++i){
- mIn_G = !mIn_G;
- triggerEvent(0);
- if(!checkForSingleOutputEventOccurence((mIn_G) ? 1 : 0)){
- bRetval = false;
- break;
- }
- }
- return bRetval;
- }
-
- CIEC_BOOL mIn_G; //DATA INPUT
+ CIEC_BOOL mInG; //DATA INPUT
};
-/***********************************************************************************/
+BOOST_FIXTURE_TEST_SUITE( SwitchTests, E_SWITCH_TestFixture)
-DEFINE_FB_TESTER(E_SWITCH_tester, g_nStringIdE_SWITCH);
+ BOOST_AUTO_TEST_CASE(singleE0){
+ mInG = false;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+
+ BOOST_AUTO_TEST_CASE(SingleE1){
+ mInG = true;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(1));
+ }
+
+ BOOST_AUTO_TEST_CASE(MultipleE0){
+ mInG = false;
+ for(unsigned int i = 0; i < 1000; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(0));
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(MultipleE1){
+ mInG = true;
+ for(unsigned int i = 0; i < 1000; ++i){
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence(1));
+ }
+ }
+
+ BOOST_AUTO_TEST_CASE(Alternate){
+ for(unsigned int i = 0; i < 1000; ++i){
+ mInG = !mInG;
+ triggerEvent(0);
+ BOOST_CHECK(checkForSingleOutputEventOccurence((mInG) ? 1 : 0));
+ }
+ }
+
+BOOST_AUTO_TEST_SUITE_END()