diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index b05823180..df1728281 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -90,6 +90,9 @@ jobs: -DFORTE_MODULE_RT_Events=ON -DFORTE_MODULE_SIGNALPROCESSING=ON -DFORTE_MODULE_UTILS=ON + -DFORTE_BUILD_STATIC_LIBRARY=ON + -DFORTE_BUILD_SHARED_LIBRARY=ON + -DFORTE_C_INTERFACE=ON -DFORTE_TESTS=ON -DFORTE_TEST_SANITIZE=ON ${{ matrix.os == 'windows-latest' && format('-DFORTE_TESTS_INC_DIRS={0}/boost.1.84.0/lib/native/include', github.workspace) || '' }} diff --git a/CMakeLists.txt b/CMakeLists.txt index d7d25f4e8..bebe4e72b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ # Copyright (c) 2010 - 2015 Profactor GmbH, AIT, fortiss GmbH # 2010-2015, 2020 TU Wien/ACIN # 2022 Martin Erich Jobst +# 2024 Jose Cabral # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at @@ -62,6 +63,9 @@ mark_as_advanced(FORTE_BUILD_STATIC_LIBRARY) set(FORTE_BUILD_SHARED_LIBRARY OFF CACHE BOOL "Build FORTE as shared library") mark_as_advanced(FORTE_BUILD_SHARED_LIBRARY) +SET(FORTE_C_INTERFACE OFF CACHE BOOL "Build C interface to Forte") +mark_as_advanced(FORTE_C_INTERFACE) + ####################################################################################### # Determine the loglevel ####################################################################################### diff --git a/buildsupport/toolchains/toolchain-esp32-DualOut.cmake b/buildsupport/toolchains/toolchain-esp32-DualOut.cmake index 57c90a39a..92ab8bc34 100644 --- a/buildsupport/toolchains/toolchain-esp32-DualOut.cmake +++ b/buildsupport/toolchains/toolchain-esp32-DualOut.cmake @@ -4,8 +4,8 @@ SET(FORTE_ARCHITECTURE "FreeRTOSLwIP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions ") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions ") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") diff --git a/buildsupport/toolchains/toolchain-esp32-Hutschienenmoped.cmake b/buildsupport/toolchains/toolchain-esp32-Hutschienenmoped.cmake index e942f300a..b6f3befac 100644 --- a/buildsupport/toolchains/toolchain-esp32-Hutschienenmoped.cmake +++ b/buildsupport/toolchains/toolchain-esp32-Hutschienenmoped.cmake @@ -4,8 +4,8 @@ SET(FORTE_ARCHITECTURE "FreeRTOSLwIP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") diff --git a/buildsupport/toolchains/toolchain-esp32-basic.cmake b/buildsupport/toolchains/toolchain-esp32-basic.cmake index 19bd58aa1..90d32faba 100644 --- a/buildsupport/toolchains/toolchain-esp32-basic.cmake +++ b/buildsupport/toolchains/toolchain-esp32-basic.cmake @@ -4,8 +4,8 @@ SET(FORTE_ARCHITECTURE "FreeRTOSLwIP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions ") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions ") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") diff --git a/buildsupport/toolchains/toolchain-esp32-datapanel.cmake b/buildsupport/toolchains/toolchain-esp32-datapanel.cmake index 98a43e1cb..23829ab65 100644 --- a/buildsupport/toolchains/toolchain-esp32-datapanel.cmake +++ b/buildsupport/toolchains/toolchain-esp32-datapanel.cmake @@ -4,8 +4,8 @@ SET(FORTE_ARCHITECTURE "FreeRTOSLwIP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") diff --git a/buildsupport/toolchains/toolchain-esp32s3-HutschienenmopedXL.cmake b/buildsupport/toolchains/toolchain-esp32s3-HutschienenmopedXL.cmake index a4cc4a40b..1d236954a 100644 --- a/buildsupport/toolchains/toolchain-esp32s3-HutschienenmopedXL.cmake +++ b/buildsupport/toolchains/toolchain-esp32s3-HutschienenmopedXL.cmake @@ -4,8 +4,8 @@ SET(FORTE_ARCHITECTURE "FreeRTOSLwIP") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -Wno-deprecated-declarations") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ddfc2e589..6059cd0b0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,47 +33,6 @@ forte_add_sourcefile_with_path_hcpp(${FORTE_BINARY_DIR}/stringlist) set_source_files_properties(${FORTE_BINARY_DIR}/stringlist.h PROPERTIES GENERATED TRUE) set_source_files_properties(${FORTE_BINARY_DIR}/stringlist.cpp PROPERTIES GENERATED TRUE) -####################################################################################### -# Define global Include-directorys -####################################################################################### - -forte_add_include_directories(./) -forte_add_include_directories(${FORTE_BINARY_DIR}) -forte_add_include_directories(${FORTE_BINARY_DIR}/src_gen) - -GET_PROPERTY(INCLUDE_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_DIRECTORIES) - -LIST(LENGTH INCLUDE_DIRECTORIES len) -IF(len GREATER 0) - LIST(REMOVE_DUPLICATES INCLUDE_DIRECTORIES) - LIST(REVERSE INCLUDE_DIRECTORIES) # bugfix, for replaced include files -ENDIF(len GREATER 0) - -GET_PROPERTY(INCLUDE_SYSTEM_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_SYSTEM_DIRECTORIES) -LIST(LENGTH INCLUDE_SYSTEM_DIRECTORIES len) -IF(len GREATER 0) - LIST(REMOVE_DUPLICATES INCLUDE_SYSTEM_DIRECTORIES) - LIST(REVERSE INCLUDE_SYSTEM_DIRECTORIES) # bugfix, for replaced include files -ENDIF(len GREATER 0) - -INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}) -INCLUDE_DIRECTORIES(SYSTEM ${INCLUDE_SYSTEM_DIRECTORIES}) -####################################################################################### -# Define directories for Libraries -####################################################################################### -GET_PROPERTY(LINK_DIRECTORIES GLOBAL PROPERTY FORTE_LINK_DIRECTORIES) -LIST(LENGTH LINK_DIRECTORIES len) -IF(len GREATER 0) - LIST(REMOVE_DUPLICATES LINK_DIRECTORIES) -ENDIF(len GREATER 0) -LINK_DIRECTORIES(${LINK_DIRECTORIES}) - -####################################################################################### -# Define directories for Libraries -####################################################################################### -GET_PROPERTY(DEFINITION GLOBAL PROPERTY FORTE_DEFINITION) -ADD_DEFINITIONS (${DEFINITION}) - ####################################################################################### # Exclude FBs ####################################################################################### @@ -95,40 +54,6 @@ FOREACH(FB ${PLATFORM_REMOVES}) forte_remove_sourcefile_cpp(${FB}.cpp) ENDFOREACH(FB) -####################################################################################### -# Setup Forte with all Functionblocks -####################################################################################### - -#forte init is needed for the temporary forte library, which then is linked to the main.cpp - -forte_add_sourcefile_with_path_hcpp(${FORTE_BINARY_DIR}/forteinit) -set_source_files_properties(${FORTE_BINARY_DIR}/forteinit.h PROPERTIES GENERATED TRUE) -set_source_files_properties(${FORTE_BINARY_DIR}/forteinit.cpp PROPERTIES GENERATED TRUE) - -GET_PROPERTY(SOURCE_TIMER_CPP GLOBAL PROPERTY FORTE_TIMER_CPP) -GET_PROPERTY(SOURCE_TIMER_H GLOBAL PROPERTY FORTE_TIMER_H) - -forte_add_sourcefile_with_path_h(${SOURCE_TIMER_H}) -forte_add_sourcefile_with_path_cpp(${SOURCE_TIMER_CPP}) - -GET_PROPERTY(SOURCE_H GLOBAL PROPERTY FORTE_SOURCE_H) -GET_PROPERTY(SOURCE_H_GROUP GLOBAL PROPERTY FORTE_SOURCE_H_GROUP) -LIST(APPEND SOURCE_FILES ${SOURCE_H}) -LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_H_GROUP}) - -GET_PROPERTY(SOURCE_CPP GLOBAL PROPERTY FORTE_SOURCE_CPP) -GET_PROPERTY(SOURCE_CPP_GROUP_STRUCT GLOBAL PROPERTY FORTE_SOURCE_CPP_GROUP) -LIST(APPEND SOURCE_FILES ${SOURCE_CPP}) -LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_CPP_GROUP_STRUCT}) - -GET_PROPERTY(SOURCE_C GLOBAL PROPERTY FORTE_SOURCE_C) -GET_PROPERTY(SOURCE_C_GROUP_STRUCT GLOBAL PROPERTY FORTE_SOURCE_C_GROUP) -LIST(APPEND SOURCE_FILES ${SOURCE_C}) -LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_C_GROUP_STRUCT}) - -GET_PROPERTY(SOURCE_EXECUTABLE_CPP GLOBAL PROPERTY FORTE_EXECUTABLE_CPP) -GET_PROPERTY(SOURCE_EXECUTABLE_H GLOBAL PROPERTY FORTE_EXECUTABLE_H) - ############################################################################# # Configure Network Layers ############################################################################# @@ -213,6 +138,7 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/arch/startuphook.cpp.in ${CMAKE_BINAR forte_replacefile_if_changed(${CMAKE_BINARY_DIR}/src_gen/startuphook_new.cpp ${CMAKE_BINARY_DIR}/src_gen/startuphook.cpp) file(REMOVE ${CMAKE_BINARY_DIR}/src_gen/startuphook_new.cpp) + ############################################################################# # Load FORTE Extension Files ############################################################################# @@ -226,6 +152,40 @@ IF(len GREATER 0) ENDFOREACH(FILE) ENDIF(len GREATER 0) +####################################################################################### +# Setup Forte with all Functionblocks +####################################################################################### + +#forte init is needed for the temporary forte library, which then is linked to the main.cpp + +forte_add_sourcefile_with_path_hcpp(${FORTE_BINARY_DIR}/forteinit) +set_source_files_properties(${FORTE_BINARY_DIR}/forteinit.h PROPERTIES GENERATED TRUE) +set_source_files_properties(${FORTE_BINARY_DIR}/forteinit.cpp PROPERTIES GENERATED TRUE) + +GET_PROPERTY(SOURCE_TIMER_CPP GLOBAL PROPERTY FORTE_TIMER_CPP) +GET_PROPERTY(SOURCE_TIMER_H GLOBAL PROPERTY FORTE_TIMER_H) + +forte_add_sourcefile_with_path_h(${SOURCE_TIMER_H}) +forte_add_sourcefile_with_path_cpp(${SOURCE_TIMER_CPP}) + +GET_PROPERTY(SOURCE_H GLOBAL PROPERTY FORTE_SOURCE_H) +GET_PROPERTY(SOURCE_H_GROUP GLOBAL PROPERTY FORTE_SOURCE_H_GROUP) +LIST(APPEND SOURCE_FILES ${SOURCE_H}) +LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_H_GROUP}) + +GET_PROPERTY(SOURCE_CPP GLOBAL PROPERTY FORTE_SOURCE_CPP) +GET_PROPERTY(SOURCE_CPP_GROUP_STRUCT GLOBAL PROPERTY FORTE_SOURCE_CPP_GROUP) +LIST(APPEND SOURCE_FILES ${SOURCE_CPP}) +LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_CPP_GROUP_STRUCT}) + +GET_PROPERTY(SOURCE_C GLOBAL PROPERTY FORTE_SOURCE_C) +GET_PROPERTY(SOURCE_C_GROUP_STRUCT GLOBAL PROPERTY FORTE_SOURCE_C_GROUP) +LIST(APPEND SOURCE_FILES ${SOURCE_C}) +LIST(APPEND SOURCE_FILES_GROUP ${SOURCE_C_GROUP_STRUCT}) + +GET_PROPERTY(SOURCE_EXECUTABLE_CPP GLOBAL PROPERTY FORTE_EXECUTABLE_CPP) +GET_PROPERTY(SOURCE_EXECUTABLE_H GLOBAL PROPERTY FORTE_EXECUTABLE_H) + ############################################################################# # Add Files to source-group ############################################################################# @@ -270,17 +230,10 @@ set_property(CACHE FORTE_DEVICE PROPERTY STRINGS None ${devices}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/forte_device_config.h.in ${CMAKE_BINARY_DIR}/forte_device_config.h) -####################################################################################### -# Link Libraries to the Executable -####################################################################################### -# get Linker-Directories from Modules -get_property(LINK_LIBRARY GLOBAL PROPERTY FORTE_LINK_LIBRARY) - ####################################################################################### # Create Files ####################################################################################### - # setting the C++ version has to be done directly before defining the targets only then modules can override this setting if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) @@ -291,6 +244,25 @@ if(NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() +####################################################################################### +# Create an object library with all configurations needed which +# is then used by the others targets +####################################################################################### +set(FORTE_BASE_TARGET_NAME FORTE_LITE) +add_library(${FORTE_BASE_TARGET_NAME} OBJECT ${SOURCE_FILES}) #no executables. +target_compile_features(${FORTE_BASE_TARGET_NAME} PUBLIC cxx_std_17) + +####################################################################################### +# Link Libraries to the Executable +####################################################################################### +# get Linker-Directories from Modules +get_property(LINK_LIBRARY GLOBAL PROPERTY FORTE_LINK_LIBRARY) +target_link_libraries(${FORTE_BASE_TARGET_NAME} INTERFACE ${LINK_LIBRARY}) + +####################################################################################### +# Define global link flags +####################################################################################### + get_property(existing_link_flags GLOBAL PROPERTY LINK_FLAGS) if(existing_link_flags) set_property(GLOBAL APPEND PROPERTY FORTE_LINK_FLAGS ${existing_link_flags}) @@ -298,48 +270,143 @@ endif() GET_PROPERTY(link_flags GLOBAL PROPERTY FORTE_LINK_FLAGS) -add_library(FORTE_LITE OBJECT ${SOURCE_FILES}) #no executables. -TARGET_LINK_LIBRARIES (FORTE_LITE ${LINK_LIBRARY}) +target_link_options(${FORTE_BASE_TARGET_NAME} INTERFACE ${link_flags}) + +####################################################################################### +# Define global Include-directorys +####################################################################################### + +forte_add_include_directories(./) +forte_add_include_directories(${FORTE_BINARY_DIR}) +forte_add_include_directories(${FORTE_BINARY_DIR}/src_gen) + +GET_PROPERTY(INCLUDE_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_DIRECTORIES) + +LIST(LENGTH INCLUDE_DIRECTORIES len) +IF(len GREATER 0) + LIST(REMOVE_DUPLICATES INCLUDE_DIRECTORIES) + LIST(REVERSE INCLUDE_DIRECTORIES) # bugfix, for replaced include files +ENDIF(len GREATER 0) + +GET_PROPERTY(INCLUDE_SYSTEM_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_SYSTEM_DIRECTORIES) +LIST(LENGTH INCLUDE_SYSTEM_DIRECTORIES len) +IF(len GREATER 0) + LIST(REMOVE_DUPLICATES INCLUDE_SYSTEM_DIRECTORIES) + LIST(REVERSE INCLUDE_SYSTEM_DIRECTORIES) # bugfix, for replaced include files +ENDIF(len GREATER 0) + +target_include_directories(${FORTE_BASE_TARGET_NAME} PUBLIC ${INCLUDE_DIRECTORIES}) +target_include_directories(${FORTE_BASE_TARGET_NAME} SYSTEM PUBLIC ${INCLUDE_SYSTEM_DIRECTORIES}) + +####################################################################################### +# Define directories for Libraries +####################################################################################### +GET_PROPERTY(LINK_DIRECTORIES GLOBAL PROPERTY FORTE_LINK_DIRECTORIES) +LIST(LENGTH LINK_DIRECTORIES len) +IF(len GREATER 0) + LIST(REMOVE_DUPLICATES LINK_DIRECTORIES) +ENDIF(len GREATER 0) + +target_link_directories(${FORTE_BASE_TARGET_NAME} INTERFACE ${LINK_DIRECTORIES}) -list(JOIN link_flags " " link_flags_string) +####################################################################################### +# Define compile definitions +####################################################################################### +GET_PROPERTY(DEFINITIONS GLOBAL PROPERTY FORTE_DEFINITION) +# the following should be added to the ${FORTE_BASE_TARGET_NAME} target, but it +# was not working in windows for some reason +ADD_DEFINITIONS(${DEFINITIONS}) set(FORTE_LINK_STATIC OFF CACHE BOOL "Force static linking of forte binary") if(FORTE_BUILD_EXECUTABLE) - ADD_EXECUTABLE (forte $ ${SOURCE_EXECUTABLE_CPP} ${FORTE_EXECUTABLE_H}) - set_target_properties(forte PROPERTIES LINK_FLAGS "${link_flags_string}") + SET(FORTE_EXECUTABLE_NAME forte) + ADD_EXECUTABLE (${FORTE_EXECUTABLE_NAME} ${SOURCE_EXECUTABLE_CPP} ${FORTE_EXECUTABLE_H}) if (FORTE_LINK_STATIC) - set_target_properties(forte PROPERTIES LINK_SEARCH_START_STATIC ON) - set_target_properties(forte PROPERTIES LINK_SEARCH_END_STATIC ON) - target_link_options(forte PRIVATE -static-libgcc -static-libstdc++ -static) + set_target_properties(${FORTE_EXECUTABLE_NAME} PROPERTIES LINK_SEARCH_START_STATIC ON) + set_target_properties(${FORTE_EXECUTABLE_NAME} PROPERTIES LINK_SEARCH_END_STATIC ON) + target_link_options(${FORTE_EXECUTABLE_NAME} PRIVATE -static-libgcc -static-libstdc++ -static) endif() - target_compile_features(forte PUBLIC cxx_std_17) - TARGET_LINK_LIBRARIES (forte ${LINK_LIBRARY}) - ADD_DEPENDENCIES (forte FORTE_LITE) + TARGET_LINK_LIBRARIES (forte PUBLIC ${FORTE_BASE_TARGET_NAME}) install(TARGETS forte RUNTIME DESTINATION bin) message("Building executable") endif(FORTE_BUILD_EXECUTABLE) if(FORTE_BUILD_STATIC_LIBRARY) - ADD_LIBRARY (forte-static STATIC $) - set_target_properties(forte-static PROPERTIES LINK_FLAGS "${link_flags_string}") - target_compile_features(forte-static PUBLIC cxx_std_17) - TARGET_LINK_LIBRARIES (forte-static ${LINK_LIBRARY}) - ADD_DEPENDENCIES (forte-static FORTE_LITE) - install(TARGETS forte-static ARCHIVE DESTINATION bin) + SET(FORTE_STATIC_LIBRARY_NAME forte-static) + ADD_LIBRARY (${FORTE_STATIC_LIBRARY_NAME} STATIC) + TARGET_LINK_LIBRARIES (${FORTE_STATIC_LIBRARY_NAME} PUBLIC ${FORTE_BASE_TARGET_NAME}) + install(TARGETS ${FORTE_STATIC_LIBRARY_NAME} ARCHIVE DESTINATION bin) message("Building static library") endif(FORTE_BUILD_STATIC_LIBRARY) if(FORTE_BUILD_SHARED_LIBRARY) - ADD_LIBRARY (forte-shared SHARED $) - set_target_properties(forte-shared PROPERTIES LINK_FLAGS "${link_flags_string}") - target_compile_features(forte-shared PUBLIC cxx_std_17) - TARGET_LINK_LIBRARIES (forte-shared ${LINK_LIBRARY}) - ADD_DEPENDENCIES (forte-shared FORTE_LITE) - install(TARGETS forte-shared ARCHIVE DESTINATION bin LIBRARY DESTINATION bin) + if(WIN32) + message(WARNING "Shared library in windows might not be linkable.") + endif(WIN32) + + SET(FORTE_SHARED_LIBRARY_NAME forte-shared) + + ADD_LIBRARY (${FORTE_SHARED_LIBRARY_NAME} SHARED) + TARGET_LINK_LIBRARIES (${FORTE_SHARED_LIBRARY_NAME} PUBLIC ${FORTE_BASE_TARGET_NAME}) + install(TARGETS ${FORTE_SHARED_LIBRARY_NAME} ARCHIVE DESTINATION bin) + set_property(TARGET ${FORTE_BASE_TARGET_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON) + + set_target_properties(${WINDOWS_EXPORT_ALL_SYMBOLS} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) + message("Building shared library") endif(FORTE_BUILD_SHARED_LIBRARY) +if(FORTE_C_INTERFACE) + # function for configuring common things in both static and shared c libraries + FUNCTION(commonCLibraryConfiguration TARGET_NAME) + set_target_properties(${TARGET_NAME} + PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/arch/c_interface/forte_c.h) + + TARGET_LINK_LIBRARIES (${TARGET_NAME} PUBLIC ${FORTE_BASE_TARGET_NAME}) + install(TARGETS ${TARGET_NAME} + LIBRARY DESTINATION bin + PUBLIC_HEADER DESTINATION include) + ENDFUNCTION() + + SET(FORTE_C_LIBRARY_NAME "forte-c") + + if(FORTE_BUILD_STATIC_LIBRARY) + SET(FORTE_C_LIBRARY_STATIC_NAME ${FORTE_C_LIBRARY_NAME}-static) + ADD_LIBRARY (${FORTE_C_LIBRARY_STATIC_NAME} STATIC ${CMAKE_CURRENT_SOURCE_DIR}/arch/c_interface/forte_c.cpp) + commonCLibraryConfiguration(${FORTE_C_LIBRARY_STATIC_NAME}) + message("Building C interface static library") + endif(FORTE_BUILD_STATIC_LIBRARY) + + if(FORTE_BUILD_SHARED_LIBRARY) + SET(FORTE_C_LIBRARY_SHARED_NAME ${FORTE_C_LIBRARY_NAME}-shared) + ADD_LIBRARY (${FORTE_C_LIBRARY_SHARED_NAME} SHARED ${CMAKE_CURRENT_SOURCE_DIR}/arch/c_interface/forte_c.cpp) + + # hide all symbols except the ones from the C interface + # NOTE: This is still not working. The dynamic symbols are still being exported + # --exclude-libs is an option for gcc but it does not work with OBJECT libraries + # Exporting the dynamic symbols makes the loading time of the library longer + # but it still can be used as usual + set_target_properties(${FORTE_C_LIBRARY_SHARED_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON) + set_target_properties(${FORTE_C_LIBRARY_SHARED_NAME} PROPERTIES + C_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON) + + IF (WIN32 OR CYGWIN) + SET(FORTE_SHARED_PREFIX "__declspec(dllexport)") + else() + SET(FORTE_SHARED_PREFIX "__attribute__((visibility(\"default\")))") + endif() + target_compile_definitions(${FORTE_C_LIBRARY_SHARED_NAME} PRIVATE FORTE_SHARED_PREFIX=${FORTE_SHARED_PREFIX}) + + commonCLibraryConfiguration(${FORTE_C_LIBRARY_SHARED_NAME}) + message("Building C interface shared library") + endif(FORTE_BUILD_SHARED_LIBRARY) + +endif(FORTE_C_INTERFACE) + ####################################################################################### # Generate stringlist and modules ####################################################################################### @@ -347,14 +414,14 @@ endif(FORTE_BUILD_SHARED_LIBRARY) #forte init is needed for the temporary forte library, which then is linked to the main.cpp ADD_CUSTOM_TARGET(forte_init_generator COMMAND ${CMAKE_COMMAND} -DFORTE_BINARY_DIR:STRING="${CMAKE_BINARY_DIR}" -DFORTE_SOURCE_DIR:STRING="${CMAKE_SOURCE_DIR}" -DFORTE_LITTLE_ENDIAN:STRING=${FORTE_LITTLE_ENDIAN} -DFORTE_BIG_ENDIAN:STRING=${FORTE_BIG_ENDIAN} -DFORTE_LOGLEVEL:STRING="${FORTE_LOGLEVEL}" -P ${FORTE_BUILDSUPPORT_DIRECTORY}/generate_init.cmake) # ADD_DEPENDENCIES (forte_init_generator forte_generate_modules_cmake_files) -ADD_DEPENDENCIES (FORTE_LITE forte_init_generator) +ADD_DEPENDENCIES (${FORTE_BASE_TARGET_NAME} forte_init_generator) ADD_CUSTOM_TARGET(forte_generate_modules_cmake_files COMMAND ${CMAKE_COMMAND} -DFORTE_MODULE_LIST:LISTS="${FORTE_MODULE_LIST}" -P ${FORTE_BUILDSUPPORT_DIRECTORY}/generate_modules_cmake_file.cmake) ADD_CUSTOM_TARGET(forte_stringlist_generator COMMAND ${CMAKE_COMMAND} -DFORTE_LINKED_STRINGDICT:STRING="${FORTE_LINKED_STRINGDICT}" -DFORTE_BINARY_DIR:STRING="${CMAKE_BINARY_DIR}" -DFORTE_SOURCE_DIR:STRING="${CMAKE_CURRENT_SOURCE_DIR}" -P ${FORTE_BUILDSUPPORT_DIRECTORY}/generate_stringlist.cmake) -ADD_DEPENDENCIES (FORTE_LITE forte_stringlist_generator) +ADD_DEPENDENCIES (${FORTE_BASE_TARGET_NAME} forte_stringlist_generator) ADD_DEPENDENCIES (forte_stringlist_generator forte_generate_modules_cmake_files) ####################################################################################### @@ -362,7 +429,7 @@ ADD_DEPENDENCIES (forte_stringlist_generator forte_generate_modules_cmake_files) ####################################################################################### if(FORTE_LINKED_STRINGDICT) set(ENABLE_GENERATED_SOURCE_CPP ON) - ADD_DEPENDENCIES (FORTE_LITE forte_stringlist_externals) + ADD_DEPENDENCIES (${FORTE_BASE_TARGET_NAME} forte_stringlist_externals) endif(FORTE_LINKED_STRINGDICT) ####################################################################################### @@ -384,9 +451,15 @@ if(NOT LEN_POST_BUILD_COM EQUAL 0) if(FORTE_BUILD_STATIC_LIBRARY) ADD_CUSTOM_COMMAND(TARGET forte-static POST_BUILD ${POST_BUILD_COM}) + if(FORTE_C_INTERFACE) + ADD_CUSTOM_COMMAND(TARGET forte-c-static POST_BUILD ${POST_BUILD_COM}) + endif(FORTE_C_INTERFACE) endif(FORTE_BUILD_STATIC_LIBRARY) if(FORTE_BUILD_SHARED_LIBRARY) ADD_CUSTOM_COMMAND(TARGET forte-shared POST_BUILD ${POST_BUILD_COM}) + if(FORTE_C_INTERFACE) + ADD_CUSTOM_COMMAND(TARGET forte-c-shared POST_BUILD ${POST_BUILD_COM}) + endif(FORTE_C_INTERFACE) endif(FORTE_BUILD_SHARED_LIBRARY) endif(NOT LEN_POST_BUILD_COM EQUAL 0) diff --git a/src/arch/CMakeLists.txt b/src/arch/CMakeLists.txt index f23c0f5ad..3c25c5934 100644 --- a/src/arch/CMakeLists.txt +++ b/src/arch/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2010 - 2018 ACIN +# Copyright (c) 2010 - 2024 ACIN, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -30,7 +30,7 @@ add_subdirectory(zephyr) add_subdirectory(utils) -forte_add_sourcefile_hcpp(timerha devlog) +forte_add_sourcefile_hcpp(timerha devlog forte_architecture) SET(FORTE_LOGGER_BUFFER_SIZE "300" CACHE STRING "Buffer's length of the logger") mark_as_advanced(FORTE_LOGGER_BUFFER_SIZE) @@ -64,6 +64,4 @@ if (FORTE_STACKTRACE) endif () endif () -forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/src_gen/startuphook.cpp) # created file - - +forte_add_sourcefile_with_path_cpp(${CMAKE_BINARY_DIR}/src_gen/startuphook.cpp) diff --git a/src/arch/ecos/forte_instance.cpp b/src/arch/c_interface/forte_c.cpp similarity index 52% rename from src/arch/ecos/forte_instance.cpp rename to src/arch/c_interface/forte_c.cpp index 9cdd5fe29..9c379ecc9 100644 --- a/src/arch/ecos/forte_instance.cpp +++ b/src/arch/c_interface/forte_c.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 fortiss GmbH + * Copyright (c) 2018 - 2024 fortiss GmbH, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -11,42 +11,40 @@ * Tarik Terzimehic - make OPC UA server port setable from the command line *******************************************************************************/ -#include "forte_instance.h" -#include "forteinstance.h" -#include - -#include "fortenew.h" -#include "forte_architecture.h" -#include -#include -#include "../../stdfblib/ita/RMT_DEV.h" +#include "forte_c.h" #include "../utils/mainparam_utils.h" +#include "forte_architecture.h" +#include "forte_printer.h" +#include "forteinstance.h" -unsigned const int cgForteDefaultPort = 61499; +namespace { + const unsigned int defaultPort = 61499; + const unsigned int maxPortValue = 65535; +} -/*!\brief Check if the correct endianess has been configured. - * - * If the right endianess is not set this function will end FORTE. - */ +/** +* @brief Check if the correct endianess has been configured. +*/ bool checkEndianess(); -void forteGlobalInitialize(){ - CForteArchitecture::initialize(); +int forteGlobalInitialize(int argc, char *argv[]){ + return CForteArchitecture::initialize(argc, argv); } -void forteGlobalDeinitialize(){ - CForteArchitecture::deinitialize(); +int forteGlobalDeinitialize(){ + return CForteArchitecture::deinitialize(); } -int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance){ +FORTE_STATUS forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance){ - if(65535 < paPort){ + if(maxPortValue < paPort){ + DEVLOG_ERROR("Provided port %d is not valid\n", paPort); return FORTE_WRONG_PARAMETERS; } if(0 == paPort){ - paPort = cgForteDefaultPort; + paPort = defaultPort; } char progName[] = "forte"; @@ -60,50 +58,59 @@ int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance){ return forteStartInstanceGeneric(3, arguments, paResultInstance); } -int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultInstance){ +FORTE_STATUS forteStartInstanceGeneric(int argc, char *argv[], TForteInstance* paResultInstance){ - if(!CForteArchitecture::isInitialized()){ - return FORTE_ARCHITECTURE_NOT_READY; - } - - if(0 == paResultDevice){ + if(nullptr == paResultInstance){ + DEVLOG_ERROR("Provided result instance parameter is not valid\n"); return FORTE_WRONG_PARAMETERS; } - if(0 != *paResultDevice){ + if(nullptr != *paResultInstance){ + DEVLOG_ERROR("Provided result instance already started\n"); return FORTE_DEVICE_ALREADY_STARTED; } if(!checkEndianess()){ + // logged already in the function return FORTE_WRONG_ENDIANESS; } - const char *pIpPort = parseCommandLineArguments(argc, arg); - if((0 != strlen(pIpPort)) && (nullptr != strchr(pIpPort, ':'))){ - C4diacFORTEInstance *instance = new C4diacFORTEInstance(); - if(!instance->startupNewDevice(ipPort)) { - delete instance; - return FORTE_COULD_NOT_CREATE_DEVICE; - } - *paResultInstance = instance; - DEVLOG_INFO("FORTE is up and running\n"); + if(!CForteArchitecture::isInitialized()){ + DEVLOG_ERROR("The low level platform should be initialized before starting a forte instance\n"); + return FORTE_ARCHITECTURE_NOT_READY; } - else{ //! If needed call listHelp() to list the help for FORTE + + const auto ipPort = parseCommandLineArguments(argc, argv); + if((0 == strlen(ipPort)) || (nullptr == strchr(ipPort, ':'))){ + listHelp(); return FORTE_WRONG_PARAMETERS; } + + C4diacFORTEInstance *instance = new C4diacFORTEInstance(); + if(!instance->startupNewDevice(ipPort)) { + delete instance; + return FORTE_COULD_NOT_CREATE_DEVICE; + } + *paResultInstance = instance; return FORTE_OK; } -void forteStopInstance(int, TForteInstance paInstance){ - if(!CForteArchitecture::isInitialized() || paResultInstance == nullptr){ +void forteRequestStopInstance(TForteInstance paInstance){ + if(!CForteArchitecture::isInitialized() || paInstance == nullptr){ return; } - C4diacFORTEInstance *instance = static_cast(paResultInstance); + auto *instance = static_cast(paInstance); instance->triggerDeviceShutdown(); +} + +void forteWaitForInstanceToStop(TForteInstance paInstance) { + if(!CForteArchitecture::isInitialized() || paInstance == nullptr){ + return; + } + auto *instance = static_cast(paInstance); instance->awaitDeviceShutdown(); delete instance; - DEVLOG_INFO("FORTE finished\n"); } bool checkEndianess(){ diff --git a/src/arch/c_interface/forte_c.h b/src/arch/c_interface/forte_c.h new file mode 100644 index 000000000..6663274ac --- /dev/null +++ b/src/arch/c_interface/forte_c.h @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2018 - 2024 fortiss GmbH, Jose Cabral + * This program and the accompanying materials are made available under the + * terms of the 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_C_H_ +#define SRC_ARCH_FORTE_C_H_ + +#ifndef FORTE_SHARED_PREFIX + #define FORTE_SHARED_PREFIX +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + typedef enum FORTE_STATUS{ + FORTE_OK = 0, + FORTE_DEVICE_ALREADY_STARTED, + FORTE_WRONG_ENDIANESS, + FORTE_WRONG_PARAMETERS, + FORTE_ARCHITECTURE_NOT_READY, + FORTE_COULD_NOT_CREATE_DEVICE, + } FORTE_STATUS; + + typedef void* TForteInstance; + + /** + * \brief Start forte instance + * @param paPort The port on which forte will listen. Use 0 for default 61499 + * @param paResultInstance Address to store the created forte instance + * @return FORTE_OK if no error occurred, other values otherwise + */ + FORTE_SHARED_PREFIX FORTE_STATUS forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance); + + /** + * \brief Start forte instance with posibilities of more arguments + * @param argc Number of arguments in arg + * @param argv Arguments + * @param paResultInstance Address to store the created forte instance + * @return FORTE_OK if no error occurred, other values otherwise + */ + FORTE_SHARED_PREFIX FORTE_STATUS forteStartInstanceGeneric(int argc, char *argv[], TForteInstance* paResultInstance); + + /** + * \brief Request termination of a Forte instance + * @param paInstance Instance to request for termination + */ + FORTE_SHARED_PREFIX void forteRequestStopInstance(TForteInstance paInstance); + + /** + * \brief Waits indefinitely for the intance to stop and deletes it + * @param paInstance Instance to terminate + */ + FORTE_SHARED_PREFIX void forteWaitForInstanceToStop(TForteInstance paInstance); + + /** + * \brief Initializes the architecture. Prepare all resources needed by the Forte's instances. Must be called once before the first Forte instance is started + * @param argc Number of arguments in arg + * @param argv Arguments + * @return 0 if no error occurred, other values otherwise. Any error value is provided by the architecture and not by forte + */ + FORTE_SHARED_PREFIX int forteGlobalInitialize(int argc, char *argv[]); + + /** + * \brief Deinitializes the architecture. Frees all resources used by Forte's instances. Must be called after the last instance is ended + * @return 0 if no error occurred, other values otherwise. Any error value is provided by the architecture and not by forte + */ + FORTE_SHARED_PREFIX int forteGlobalDeinitialize(); + +#ifdef __cplusplus +} +#endif + +#endif /* SRC_ARCH_FORTE_C_H_ */ diff --git a/src/arch/win32/forte_instance.h b/src/arch/common/forte_specific_architecture.cpp similarity index 58% rename from src/arch/win32/forte_instance.h rename to src/arch/common/forte_specific_architecture.cpp index 08a422d36..e6a717074 100644 --- a/src/arch/win32/forte_instance.h +++ b/src/arch/common/forte_specific_architecture.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017 fortiss GmbH + * Copyright (c) 2024 Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -7,21 +7,15 @@ * SPDX-License-Identifier: EPL-2.0 * * Contributors: - * Jose Cabral, Alois Zoitl - initial API and implementation and/or initial documentation + * Jose Cabral - initial API and implementation and/or initial documentation *******************************************************************************/ -#ifndef FORTE_INSTANCE_H_ -#define FORTE_INSTANCE_H_ +#include "arch/forte_specific_architecture.h" -#ifdef __cplusplus -extern "C" { -#endif - -void startupFORTE(); -void shutdownFORTE(); - -#ifdef __cplusplus +int CForteSpecificArchitecture::initialize(int , char** ){ + return 0; } -#endif -#endif +int CForteSpecificArchitecture::deinitialize() { + return 0; +} diff --git a/src/arch/ecos/ecoscppinit.cpp b/src/arch/ecos/ecoscppinit.cpp index 80d217977..2a2e92ed7 100644 --- a/src/arch/ecos/ecoscppinit.cpp +++ b/src/arch/ecos/ecoscppinit.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 - 2011 ACIN + * Copyright (c) 2010 - 2024 ACIN, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -11,11 +11,18 @@ *******************************************************************************/ #include -//current tests have shown that this works only if it is in the main.cpp file -//I don't know why. The best is to copy or include it into your specific main file - //Workaround for an ecos problem extern "C" void __cxa_pure_virtual(void) { //TODO maybe add some exception handling reporting here } + +extern "C" void abort(int ) { while(1) ; } + +void *__dso_handle = 0; + +extern "C" int _getpid(void) { + return 1; +} + +extern "C" void _kill(int ) { while(1) ; } \ No newline at end of file diff --git a/src/arch/ecos/forte_architecture.cpp b/src/arch/ecos/forte_architecture.cpp deleted file mode 100644 index 47d1b5c81..000000000 --- a/src/arch/ecos/forte_architecture.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * 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 "../forte_architecture.h" -#include "forteinit.h" - - -extern "C" void abort(int ) { while(1) ; } - -void *__dso_handle = 0; - -extern "C" int _getpid(void) { - return 1; -} - -extern "C" void _kill(int ) { while(1) ; } - -bool CForteArchitecture::mInitialized = false; - -bool CForteArchitecture::initialize(){ - if (!mInitialized){ - initForte(); - mInitialized = true; - } - return true; -} - -void CForteArchitecture::deinitialize(){ - if(mInitialized){ - mInitialized = false; - } -} diff --git a/src/arch/ecos/forte_instance.h b/src/arch/ecos/forte_instance.h deleted file mode 100644 index 79483c618..000000000 --- a/src/arch/ecos/forte_instance.h +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * 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 FORTE_INSTANCE_H_ -#define FORTE_INSTANCE_H_ - -/* When moving this file to the outside of the architecture, - * the corresponding defines for exporting in windows or other platform - * must be added here - * - */ -#ifndef FORTE_SHARED_PREFIX - #define FORTE_SHARED_PREFIX -#endif - -#ifndef FORTE_SHARED_CALL - #define FORTE_SHARED_CALL -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - enum FORTE_STATUS{ - FORTE_OK, - FORTE_DEVICE_ALREADY_STARTED, - FORTE_WRONG_ENDIANESS, - FORTE_WRONG_PARAMETERS, - FORTE_ARCHITECTURE_NOT_READY, - FORTE_COULD_NOT_CREATE_DEVICE, - }; - - typedef void* TForteInstance; - - /** - * \brief Start forte instance - * @param pa_port The port on which to forte will listen. Use 0 for default (normally 61499) - * @param pa_resultDevice Address of an instance of forte - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstance(unsigned int pa_port, TForteInstance* paResultInstance); - - /** - * \brief Start forte instance with posibilities of more arguments - * @param argc Number of arguments in arg - * @param arg Arguments - * @param pa_resultDevice Address of an instance of forte - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultInstance); - - /** - * \brief Terminates a Forte instance - * @param signal Signal value to terminate instance - * @param pa_resultDevice Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteStopInstance(int signal, TForteInstance paInstance); - - /** - * \brief Initializes the architecture. Prepare all resources needed by the Forte's instances. Must be called once before the first Forte instance is started - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalInitialize(); - - /** - * \brief Deinitializes the architecture. Frees all resources used by Forte's instances. Must be called after the last instance is ended - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalDeinitialize(); - - -#ifdef __cplusplus -} -#endif - -#endif /* FORTE_INSTANCE_H_ */ diff --git a/src/arch/ecos/nios2/CMakeLists.txt b/src/arch/ecos/nios2/CMakeLists.txt index 967b39d81..9a06c4090 100644 --- a/src/arch/ecos/nios2/CMakeLists.txt +++ b/src/arch/ecos/nios2/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2018 fortiss GmbH +# Copyright (c) 2018 - 2024 fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -34,7 +34,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Nios2") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(../../posix/forte_architecture_time.cpp ../../forte_standard_time.cpp) - forte_add_sourcefile_cpp(../ecoscppinit.cpp ../../genforte_printer.cpp ../forte_architecture.cpp) + forte_add_sourcefile_cpp(../ecoscppinit.cpp ../../genforte_printer.cpp ../../common/forte_specific_architecture.cpp) forte_add_sourcefile_h(../../forte_architecture_time.h) forte_add_sourcefile_cpp(../../genforte_realFunctions.cpp) diff --git a/src/arch/ecos/phycoreat91/CMakeLists.txt b/src/arch/ecos/phycoreat91/CMakeLists.txt index 08666ee1f..244eca66f 100644 --- a/src/arch/ecos/phycoreat91/CMakeLists.txt +++ b/src/arch/ecos/phycoreat91/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2010 -2105 ACIN, fortiss GmbH +# Copyright (c) 2010 - 2024 ACIN, fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -25,7 +25,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Phycore AT91") else(FORTE_FAKE_TIME) forte_add_sourcefile_hcpp(../ecostiha) endif(FORTE_FAKE_TIME) - forte_add_sourcefile_cpp(../../posix/forte_architecture_time.cpp ../../forte_standard_time.cpp) + forte_add_sourcefile_cpp(../ecoscppinit.cpp ../../posix/forte_architecture_time.cpp ../../forte_standard_time.cpp ../../common/forte_specific_architecture.cpp) forte_add_sourcefile_cpp(../../genforte_printer.cpp) forte_add_sourcefile_h(../../forte_architecture_time.h) diff --git a/src/arch/fdselecthand.cpp b/src/arch/fdselecthand.cpp index b2ef1c668..b590dba3f 100644 --- a/src/arch/fdselecthand.cpp +++ b/src/arch/fdselecthand.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 - 2014 ACIN, Profactor GmbH, fortiss GmbH + * Copyright (c) 2010 - 2024 ACIN, Profactor GmbH, fortiss GmbH, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -21,23 +21,10 @@ DEFINE_HANDLER(CFDSelectHandler) CFDSelectHandler::CFDSelectHandler(CDeviceExecution& paDeviceExecution) : CExternalEventHandler(paDeviceExecution) { mConnectionListChanged = false; -#ifdef WIN32 - // Windows Socket Startupcode - WORD wVersionRequested; - WSADATA wsaData; - - /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */ - wVersionRequested = MAKEWORD(2, 2); - - WSAStartup(wVersionRequested, &wsaData); -#endif } CFDSelectHandler::~CFDSelectHandler(){ this->end(); -#ifdef WIN32 - WSACleanup(); -#endif } // single-threaded-network-code diff --git a/src/arch/forte_architecture.cpp b/src/arch/forte_architecture.cpp new file mode 100644 index 000000000..7a5f2bca7 --- /dev/null +++ b/src/arch/forte_architecture.cpp @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2017, 2024 fortiss GmbH, Jose Cabral + * This program and the accompanying materials are made available under the + * terms of the 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 - moved archictecture class to common arch folder and adapted + * it for generic use + *******************************************************************************/ + +#include "forte_architecture.h" + +#include "forte_specific_architecture.h" + +#include "forteinit.h" +#include "startuphook.h" + +bool CForteGeneralArchitecture::mInitialized = false; + +int CForteGeneralArchitecture::initialize(int argc, char *argv[]){ + if(mInitialized) { + return 0; + } + if(auto result = CForteSpecificArchitecture::initialize(argc, argv); result != 0){ + return result; + } + initForte(); + startupHook(argc, argv); + CForteGeneralArchitecture::mInitialized = true; + return 0; +} + +int CForteGeneralArchitecture::deinitialize() { + if(!mInitialized) { + return 0; + } + + if(auto result = CForteSpecificArchitecture::deinitialize(); result != 0){ + return result; + } + CForteGeneralArchitecture::mInitialized = false; + return 0; +} + +bool CForteGeneralArchitecture::isInitialized(){ + return mInitialized; +} diff --git a/src/arch/forte_architecture.h b/src/arch/forte_architecture.h index 868c708b4..068adc7c3 100644 --- a/src/arch/forte_architecture.h +++ b/src/arch/forte_architecture.h @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017 fortiss GmbH + * Copyright (c) 2017, 2024 fortiss GmbH, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -15,20 +15,39 @@ #ifndef SRC_ARCH_FORTE_ARCHITECTURE_H_ #define SRC_ARCH_FORTE_ARCHITECTURE_H_ -class CForteArchitecture{ +class CForteGeneralArchitecture{ public: - static bool initialize(); + + /** + * @brief Initalize everything needed for forte once and calls the specific initialization of each architecture. + * This is called only once before any forte instances is started. + * + * @param argc Number of arguments passed, same as in the main function + * @param argv Arguments passed, same as in the main function + * @return 0 if no error happenned, another value specificied by the specific architecture otherwise + */ + static int initialize(int argc, char *argv[]); + + /** + * @brief Uninitialize everything that was done in `initialize` and calls the specific uninitialization of each architecture + * This is called only once after all forte instances were used. + * + * @return 0 if no error happenned, another value specificied by the specific architecture otherwise + */ + static int deinitialize(); + + /** + * @brief Checks if the lower layers were already initialized + * + * @return true if the lower layers were already initialized, false otherwise. + */ + static bool isInitialized(); - static void deinitialize(); - - static bool isInitialized(){ - return mInitialized; - } private: - - static bool mInitialized; //in some architectures this might be used to avoid double initialization if this would produce an error - + static bool mInitialized; }; +using CForteArchitecture = CForteGeneralArchitecture; + #endif /* SRC_ARCH_FORTE_ARCHITECTURE_H_ */ diff --git a/src/arch/forte_specific_architecture.h b/src/arch/forte_specific_architecture.h new file mode 100644 index 000000000..9eb618225 --- /dev/null +++ b/src/arch/forte_specific_architecture.h @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2024 + * This program and the accompanying materials are made available under the + * terms of the 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_COMMON_FORTE_SPECIFIC_ARCHITECTURE_H_ +#define SRC_ARCH_COMMON_FORTE_SPECIFIC_ARCHITECTURE_H_ + +class CForteSpecificArchitecture{ + public: + + /** + * @brief Initalize everything needed in the lower layers that is needed for forte to run + * This is called only once before any forte instances is started + * + * @param argc Number of arguments passed, same as in the main function + * @param argv Arguments passed, same as in the main function + * @return 0 if no error happenned, another value specificied by the specific architecture otherwise + */ + static int initialize(int argc , char* argv[]); + + /** + * @brief Uninitialize everything needed in the lower layers. This is called only once after all forte instances were used + * + * @return 0 if no error happenned, another value specificied by the specific architecture otherwise + */ + static int deinitialize(); +}; + +#endif /* SRC_ARCH_COMMON_FORTE_SPECIFIC_ARCHITECTURE_H_ */ diff --git a/src/arch/freeRTOS/CMakeLists.txt b/src/arch/freeRTOS/CMakeLists.txt index d79593ff7..55c6d2b15 100644 --- a/src/arch/freeRTOS/CMakeLists.txt +++ b/src/arch/freeRTOS/CMakeLists.txt @@ -1,5 +1,5 @@ #/************************************************************************************ -# Copyright (c) 2016, 2023 fortiss GmbH, HR Agrartechnik GmbH +# Copyright (c) 2016, 2024 fortiss GmbH, HR Agrartechnik GmbH, Jose Cabral # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at @@ -63,7 +63,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP") 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_sourcefile_hcpp(forte_thread forte_sync forte_sem forte_Init) + forte_add_sourcefile_hcpp(forte_thread forte_sync forte_sem) if(FORTE_FAKE_TIME) forte_set_timer(../fake_time/faketimerha) @@ -72,7 +72,8 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "FreeRTOSLwIP") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(./forte_architecture_time.cpp) - forte_add_sourcefile_cpp(forte_architecture.cpp ../genforte_printer.cpp) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) + forte_add_sourcefile_cpp(../genforte_printer.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp) diff --git a/src/arch/freeRTOS/forte_Init.cpp b/src/arch/freeRTOS/forte_Init.cpp deleted file mode 100644 index 68ab97d14..000000000 --- a/src/arch/freeRTOS/forte_Init.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/************************************************************************************ - * 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. - * - * 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 "forte_printer.h" -#include -#include -#include "forteinstance.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 forteGlobalInitialize() { - CForteArchitecture::initialize(); -} - -void forteGlobalDeinitialize() { - CForteArchitecture::deinitialize(); -} - -int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance) { - - if(65535 < paPort) { - return FORTE_WRONG_PARAMETERS; - } - - if(0 == paPort) { - paPort = forte_default_port; - } - - char progName[] = "forte"; - char flag[] = "-c"; - char address[17] = "localhost:"; - char port[6]; - forte_snprintf(port, 6, "%u", paPort); - strcat(address, port); - - char* arguments[] = { progName, flag, address }; - return forteStartInstanceGeneric(3, 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)) && (nullptr != strchr(pIpPort, ':'))) { - C4diacFORTEInstance *instance = new C4diacFORTEInstance(); - if(!instance->startupNewDevice(ipPort)) { - delete instance; - return FORTE_COULD_NOT_CREATE_DEVICE; - } - *paResultInstance = instance; - DEVLOG_INFO("FORTE is up and running\n"); - } else { //! If needed call listHelp() to list the help for FORTE - return FORTE_WRONG_PARAMETERS; - } - - return FORTE_OK; -} - -void forteJoinInstance(TForteInstance paInstance) { - C4diacFORTEInstance *instance = static_cast(paInstance); - if(instance != nullptr){ - instance->awaitDeviceShutdown(); - } -} - -void forteStopInstance(int, TForteInstance paInstance) { - if(!CForteArchitecture::isInitialized() || paInstance != nullptr) { - return; - } - C4diacFORTEInstance *instance = static_cast(paInstance); - instance->triggerDeviceShutdown(); - instance->awaitDeviceShutdown(); - delete instance; - DEVLOG_INFO("FORTE finished\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 deleted file mode 100644 index b85894831..000000000 --- a/src/arch/freeRTOS/forte_Init.h +++ /dev/null @@ -1,87 +0,0 @@ -/************************************************************************************ - * 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: - * Milan Vathoopan - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#ifndef SRC_ARCH_FREERTOS_FORTE_INIT_H_ -#define SRC_ARCH_FREERTOS_FORTE_INIT_H_ - -/* When moving this file to the outside of the architecture, - * the corresponding defines for exporting in windows or other platform - * must be added here - * - */ -#ifndef FORTE_SHARED_PREFIX -# define FORTE_SHARED_PREFIX -#endif - -#ifndef FORTE_SHARED_CALL -# define FORTE_SHARED_CALL -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - enum FORTE_STATUS { - FORTE_OK, - FORTE_DEVICE_ALREADY_STARTED, - FORTE_WRONG_ENDIANESS, - FORTE_WRONG_PARAMETERS, - FORTE_ARCHITECTURE_NOT_READY, - FORTE_COULD_NOT_CREATE_DEVICE - }; - - typedef void* TForteInstance; - /** - * \brief Start forte instance - * @param paPort The port on which to forte will listen. Use 0 for default (normally 61499) - * @param paResultInstance Address of an instance of forte where the new instance is stored - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance); - - /** - * \brief Start forte instance with possibilities of more arguments - * @param paArgc Number of arguments in arg - * @param paArgv Arguments - * @param paResultInstance Address of an instance of forte where the new instance is stored - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstanceGeneric(int paArgc, char *paArgv[], TForteInstance pInstance); - - /** - * \brief Terminates a Forte instance - * @param paSignal Signal value to terminate instance - * @param paInstance Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteStopInstance(int paSignal, TForteInstance paInstance); - - /** - * \brief Terminates a Forte instance - * @param paInstance Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteJoinInstance(TForteInstance paInstance); - - /** - * \brief Initializes the architecture. Prepare all resources needed by the Forte's instances. Must be called once before the first Forte instance is started - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalInitialize(); - - /** - * \brief Deinitializes the architecture. Frees all resources used by Forte's instances. Must be called after the last instance is ended - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalDeinitialize(); - -#ifdef __cplusplus -} -#endif - -#endif /* SRC_ARCH_FREERTOS_FORTE_INIT_H_ */ diff --git a/src/arch/freeRTOS/forte_architecture.cpp b/src/arch/freeRTOS/forte_architecture.cpp deleted file mode 100644 index d4a1d255a..000000000 --- a/src/arch/freeRTOS/forte_architecture.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/************************************************************************************ - * 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: - * Milan Vathoopan - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#include "../forte_architecture.h" -#include "forteinit.h" -bool CForteArchitecture::mInitialized = false; - -bool CForteArchitecture::initialize() { - if(!mInitialized) { - initForte(); - mInitialized = true; - } - return true; -} - -void CForteArchitecture::deinitialize() { - if(mInitialized) { - mInitialized = false; - } -} - diff --git a/src/arch/freeRTOS/main.cpp b/src/arch/freeRTOS/main.cpp index c5f649dbf..0458bea5a 100644 --- a/src/arch/freeRTOS/main.cpp +++ b/src/arch/freeRTOS/main.cpp @@ -1,5 +1,5 @@ /************************************************************************************ - * Copyright (c) 2016 fortiss GmbH + * Copyright (c) 2016, 2024 fortiss GmbH, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -13,31 +13,38 @@ #include "FreeRTOS.h" #include "task.h" -#include "../forte_architecture.h" -#include "../devlog.h" -#include "forteinstance.h" +#include "../c_interface/forte_c.h" + +namespace { + const unsigned forteTaskPriority = tskIDLE_PRIORITY + 1; + const unsigned int desiredFortePort = 61499; + const configSTACK_DEPTH_TYPE stackDepth = 2000; +} -const static unsigned mainFORTE_TASK_PRIORITY = tskIDLE_PRIORITY + 1; void vForteTask(void* ) { - C4diacFORTEInstance instance; + TForteInstance forteInstance; - if(instance.startupNewDevice (pIpPort)) { - DEVLOG_INFO("FORTE is up and running\n"); - instance.awaitDeviceShutdown(); - DEVLOG_INFO("FORTE finished\n"); + if(auto result = CForteArchitecture::initialize(0, NULL); result != 0){ + vTaskDelete(nullptr); } - vTaskDelete(nullptr); -} -void vStartForteServerTask(UBaseType_t uxPriority) { - /* Spawn the task. */ - xTaskCreate(vForteTask, "forte", 2000, nullptr, uxPriority, nullptr); + if(auto result = forteStartInstance(desiredFortePort, &forteInstance); result != FORTE_OK){ + vTaskDelete(nullptr); + } + + forteWaitForInstanceToStop(forteInstance); + + vTaskDelete(nullptr); } int main() { - vStartForteServerTask(mainFORTE_TASK_PRIORITY); + if(auto result = forteGlobalInitialize(0, nullptr); result != FORTE_OK){ + return result; + } + + xTaskCreate(vForteTask, "forte", stackDepth, nullptr, forteTaskPriority, nullptr); vTaskStartScheduler(); diff --git a/src/arch/macos/CMakeLists.txt b/src/arch/macos/CMakeLists.txt index 1fb5b7cea..02ba99b01 100644 --- a/src/arch/macos/CMakeLists.txt +++ b/src/arch/macos/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2016 fortiss GmbH +# Copyright (c) 2016, 2024 fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -28,13 +28,14 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "MacOs") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(../posix/forte_architecture_time.cpp ../forte_standard_time.cpp) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) forte_add_sourcefile_hcpp(../posix/forte_thread forte_sync forte_sem) forte_add_sourcefile_cpp(../genforte_printer.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) forte_add_sourcefile_h(../forte_architecture_time.h) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp ../utils/timespec_utils.cpp) - forte_add_to_executable_cpp(../posix/main) + forte_add_to_executable_cpp(../main) if(FORTE_COM_ETH) forte_add_handler(CFDSelectHandler sockhand) diff --git a/src/arch/posix/main.cpp b/src/arch/main.cpp similarity index 67% rename from src/arch/posix/main.cpp rename to src/arch/main.cpp index b28d99dbf..4b1bdeef3 100644 --- a/src/arch/posix/main.cpp +++ b/src/arch/main.cpp @@ -12,18 +12,14 @@ * 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 + #include #include -#include "../startuphook.h" -#include "forteinstance.h" +#include "../core/forteinstance.h" +#include "forte_architecture.h" #include "../utils/mainparam_utils.h" -#ifdef FORTE_IO_PLCNEXT -#include "../../modules/PLCnext/plcNextDeviceStatus.h" -#endif - /*!\brief Check if the correct endianess has been configured. * * If the right endianess is not set this function will end FORTE. @@ -34,45 +30,42 @@ void hookSignals(); C4diacFORTEInstance g4diacForteInstance; -//this keeps away a lot of rtti and exception handling stuff -#ifndef __cpp_exceptions -extern "C" void __cxa_pure_virtual(void){ - //TODO maybe add some reporting here - //Although we should never get here - //if we are here something very very bad has happened e.g., stack overflow or other memory corruption - -} -#endif - void endForte(int ){ g4diacForteInstance.triggerDeviceShutdown(); } +void callOnExit(){ + CForteArchitecture::deinitialize(); +} + int main(int argc, char *arg[]){ checkEndianess(); - startupHook(argc, arg); + if(auto result = CForteArchitecture::initialize(argc, arg); result != 0){ + return result; + } -#ifdef FORTE_IO_PLCNEXT - sleep(3); - DeviceStatus::startup(); -#endif + std::atexit(callOnExit); hookSignals(); - const char *pIpPort = parseCommandLineArguments(argc, arg); - if((0 != strlen(pIpPort)) && (nullptr != strchr(pIpPort, ':'))) { - if(g4diacForteInstance.startupNewDevice(pIpPort)) { - DEVLOG_INFO("FORTE is up and running\n"); - g4diacForteInstance.awaitDeviceShutdown(); - DEVLOG_INFO("FORTE finished\n"); - } - } - else{ //! Lists the help for FORTE + const char *ipPort = parseCommandLineArguments(argc, arg); + if((0 == strlen(ipPort)) || (nullptr == strchr(ipPort, ':'))) { + //! Lists the help for FORTE listHelp(); + return -1; + } + + if(!g4diacForteInstance.startupNewDevice(ipPort)) { + DEVLOG_INFO("Could not start a new device\n"); + return -1; } + DEVLOG_INFO("FORTE is up and running\n"); + g4diacForteInstance.awaitDeviceShutdown(); + DEVLOG_INFO("FORTE finished\n"); + return 0; } @@ -98,6 +91,7 @@ void checkEndianess(){ void hookSignals() { signal(SIGINT, endForte); signal(SIGTERM, endForte); +#ifndef WIN32 signal(SIGHUP, endForte); -} - +#endif +} \ No newline at end of file diff --git a/src/arch/netos/netos74/CMakeLists.txt b/src/arch/netos/netos74/CMakeLists.txt index 713fb7b52..0826eb4f1 100644 --- a/src/arch/netos/netos74/CMakeLists.txt +++ b/src/arch/netos/netos74/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2011, 2014 ACIN, fortiss GmbH +# Copyright (c) 2011, 2014, 2024 ACIN, fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -59,6 +59,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "NetOs 7.4") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(../forte_architecture_time.cpp) + forte_add_sourcefile_cpp(../../common/forte_specific_architecture.cpp) 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) diff --git a/src/arch/pikeos_posix/CMakeLists.txt b/src/arch/pikeos_posix/CMakeLists.txt index 553c48950..233fd0cb9 100644 --- a/src/arch/pikeos_posix/CMakeLists.txt +++ b/src/arch/pikeos_posix/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2018, 2021 SYSGO GmbH +# Copyright (c) 2018, 2021, 2024 SYSGO GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -40,10 +40,10 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "PikeOS_Posix") forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR}) forte_add_sourcefile_hcpp(../posix/forte_sync ../utils/timespec_utils) - forte_add_sourcefile_cpp(main.cpp forte_thread.cpp pctimeha.cpp forte_sem.cpp forte_architecture_time.cpp + forte_add_sourcefile_cpp(forte_thread.cpp pctimeha.cpp forte_sem.cpp forte_architecture_time.cpp ../genforte_printer.cpp ../genforte_realFunctions.cpp) forte_add_sourcefile_h(../forte_architecture_time.h forte_thread.h pctimeha.h) - + forte_add_sourcefile_cpp(./forte_specific_architecture.cpp) if(FORTE_COM_ETH) forte_add_handler(CFDSelectHandler sockhand) @@ -92,7 +92,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "PikeOS_Posix") mark_as_advanced(FORTE_RTTI_AND_EXCEPTIONS) if("$ENV{POSIX_DEBUG}" STREQUAL "true") - forte_add_definition("-DBOOST_TEST_DYN_LINK -g -O0 --coverage -fno-inline -fno-elide-constructors -fexceptions -fsanitize=address") + forte_add_definition("-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_specific_architecture.cpp b/src/arch/pikeos_posix/forte_specific_architecture.cpp new file mode 100644 index 000000000..b5344be49 --- /dev/null +++ b/src/arch/pikeos_posix/forte_specific_architecture.cpp @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2024 Jose Cabral + * This program and the accompanying materials are made available under the + * terms of the 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 "arch/forte_specific_architecture.h" + +/* CG: testing */ +#include + +#ifdef POSIX_LWIP +#include +#endif + +int CForteSpecificArchitecture::initialize(int , char** ){ +#ifdef POSIX_LWIP + /* Initialize the lwIP stack. */ + if (auto result = _lwip_init(); result != 0) { + DEVLOG_ERROR("Initialization of lwIP stack failed.\n"); + return result; + } +#endif // POSIX_LWIP + + return 0; +} + +int CForteSpecificArchitecture::deinitialize() { + return 0; +} diff --git a/src/arch/pikeos_posix/main.cpp b/src/arch/pikeos_posix/main.cpp deleted file mode 100644 index fee4d5913..000000000 --- a/src/arch/pikeos_posix/main.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * 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 - * Martin Melik Merkumians, Ingo Hegny, Filip Andren - initial API and implementation and/or initial documentation - * Agostino Mascitti - Adaption to PikeOS 4.2 - *******************************************************************************/ -#include -#include -#include -#include "forteinstance.h" - -#include "../utils/mainparam_utils.h" - - -/* CG: testing */ -#include - -#ifdef POSIX_LWIP -#include -#endif - -/*!\brief Check if the correct endianess has been configured. - * - * If the right endianess is not set this function will end FORTE. - */ -void checkEndianess(); - -C4diacFORTEInstance g4diacForteInstance; - -//this keeps away a lot of rtti and exception handling stuff -#ifndef __cpp_exceptions -extern "C" void __cxa_pure_virtual(void){ - //TODO maybe add some reporting here - //Although we should never get here - //if we are here something very very bad has happened e.g., stack overflow or other memory corruption - -} -#endif - -void endForte(int ){ - g4diacForteInstance.triggerDeviceShutdown(); -} - -int main(int argc, char *arg[]){ - - checkEndianess(); - DEVLOG_INFO("FORTE starting\n"); - -#ifdef POSIX_LWIP - /* Initialize the lwIP stack. */ - if (_lwip_init() != 0) { - DEVLOG_ERROR("Initialization of lwIP stack failed.\n"); - exit(-1); - } -#endif - - signal(SIGINT, endForte); - signal(SIGTERM, endForte); - signal(SIGHUP, endForte); - - const char *pIpPort = parseCommandLineArguments(argc, arg); - if((0 != strlen(pIpPort)) && (nullptr != strchr(pIpPort, ':'))){ - if(g4diacForteInstance.startupNewDevice(pIpPort)) { - DEVLOG_INFO("FORTE is up and running\n"); - g4diacForteInstance.awaitDeviceShutdown(); - DEVLOG_INFO("FORTE finished\n"); - } - } - else{ //! Lists the help for FORTE - listHelp(); - } - - return 0; -} - -void 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"); - exit(-1); -#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"); - exit(-1); -#endif - } -} - diff --git a/src/arch/plcnext/CMakeLists.txt b/src/arch/plcnext/CMakeLists.txt index 56ab7b446..00d8bb073 100644 --- a/src/arch/plcnext/CMakeLists.txt +++ b/src/arch/plcnext/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2018 Johannes Kepler University +# Copyright (c) 2018, 2024 Johannes Kepler University, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -25,6 +25,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "PLCnext") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(../posix/forte_architecture_time.cpp ../forte_standard_time.cpp) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) forte_add_sourcefile_hcpp(../posix/forte_thread ../posix/forte_sync ../posix/forte_sem) forte_add_sourcefile_cpp(../genforte_printer.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) diff --git a/src/arch/posix/CMakeLists.txt b/src/arch/posix/CMakeLists.txt index 80821e5d9..599ec2fc5 100644 --- a/src/arch/posix/CMakeLists.txt +++ b/src/arch/posix/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH +# Copyright (c) 2010 - 2024 ACIN, Profactor GmbH, fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -30,11 +30,10 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Posix") forte_add_sourcefile_cpp(../genforte_printer.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) forte_add_sourcefile_h(../forte_architecture_time.h) - forte_add_sourcefile_cpp(forte_architecture.cpp) forte_add_sourcefile_hcpp(../utils/timespec_utils) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp) - - forte_add_to_executable_cpp(main) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) + forte_add_to_executable_cpp(../main) if(FORTE_COM_ETH) forte_add_handler(CFDSelectHandler sockhand) @@ -65,10 +64,10 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Posix") if(FORTE_TESTS AND FORTE_USE_TEST_CONFIG_IN_FORTE) if(FORTE_TEST_CODE_COVERAGE_ANALYSIS) - forte_add_definition("-DBOOST_TEST_DYN_LINK -g -O0 --coverage -fno-inline") + forte_add_definition("-g -O0 --coverage -fno-inline") forte_add_link_library("--coverage") else() - forte_add_definition("-DBOOST_TEST_DYN_LINK -g -O0 -fno-inline") + forte_add_definition("-g -O0 -fno-inline") endif() if(FORTE_TEST_SANITIZE) forte_add_definition("-fsanitize=address") diff --git a/src/arch/posix/forte_architecture.cpp b/src/arch/posix/forte_architecture.cpp deleted file mode 100644 index d4a1d255a..000000000 --- a/src/arch/posix/forte_architecture.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/************************************************************************************ - * 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: - * Milan Vathoopan - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#include "../forte_architecture.h" -#include "forteinit.h" -bool CForteArchitecture::mInitialized = false; - -bool CForteArchitecture::initialize() { - if(!mInitialized) { - initForte(); - mInitialized = true; - } - return true; -} - -void CForteArchitecture::deinitialize() { - if(mInitialized) { - mInitialized = false; - } -} - diff --git a/src/arch/rcX/CMakeLists.txt b/src/arch/rcX/CMakeLists.txt index c1c0b47a9..1d7f7ed34 100644 --- a/src/arch/rcX/CMakeLists.txt +++ b/src/arch/rcX/CMakeLists.txt @@ -1,5 +1,5 @@ #/******************************************************************************* -# Copyright (c) 2016 fortiss GmbH +# Copyright (c) 2016, 2024 fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -48,7 +48,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "rcX") 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(forte_specific_architecture.cpp ../genforte_printer.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp) diff --git a/src/arch/rcX/forte_instance.cpp b/src/arch/rcX/forte_instance.cpp deleted file mode 100644 index 4708f304f..000000000 --- a/src/arch/rcX/forte_instance.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * 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. - * - * 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 "forte_printer.h" -#include -#include -#include "device.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 forteGlobalInitialize(){ - CForteArchitecture::initialize(); -} - -void forteGlobalDeinitialize(){ - CForteArchitecture::deinitialize(); -} - -int forteStartInstance(unsigned int pa_port, TForteInstance* paResultDevice){ - - if (65535 < pa_port){ - return FORTE_WRONG_PARAMETERS; - } - - if (0 == pa_port){ - pa_port = forte_default_port; - } - - char progName[] = "forte"; - char flag[] = "-c"; - char address[17] = "localhost:"; - char port[6]; - forte_snprintf(port, 6, "%u", paPort); - strcat(address, port); - - char* arguments[] = { progName, flag, address }; - return forteStartInstanceGeneric(3, arguments, paResultDevice); -} - - -int forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultDevice){ - - 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)) && (nullptr != strchr(pIpPort, ':'))){ - C4diacFORTEInstance *instance = new C4diacFORTEInstance(); - if(!instance->startupNewDevice(ipPort)) { - delete instance; - return FORTE_COULD_NOT_CREATE_DEVICE; - } - *paResultDevice = instance; - DEVLOG_INFO("FORTE is up and running\n"); - } - else{ //! If needed call listHelp() to list the help for FORTE - return FORTE_WRONG_PARAMETERS; - } - - return FORTE_OK; -} - -void forteStopInstance(int, TForteInstance paInstance){ - if(!CForteArchitecture::isInitialized()|| paInstance != nullptr){ - return; - } - C4diacFORTEInstance *instance = static_cast(paInstance); - instance->triggerDeviceShutdown(); - instance->awaitDeviceShutdown(); - delete instance; - DEVLOG_INFO("FORTE finished\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 deleted file mode 100644 index 4cc3efd70..000000000 --- a/src/arch/rcX/forte_instance.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * 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 - *******************************************************************************/ - -#ifndef FORTE_INSTANCE_H_ -#define FORTE_INSTANCE_H_ - -/* When moving this file to the outside of the architecture, - * the corresponding defines for exporting in windows or other platform - * must be added here - * - */ -#ifndef FORTE_SHARED_PREFIX - #define FORTE_SHARED_PREFIX -#endif - -#ifndef FORTE_SHARED_CALL - #define FORTE_SHARED_CALL -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - enum FORTE_STATUS{ - FORTE_OK, - FORTE_DEVICE_ALREADY_STARTED, - FORTE_WRONG_ENDIANESS, - FORTE_WRONG_PARAMETERS, - FORTE_ARCHITECTURE_NOT_READY, - FORTE_COULD_NOT_CREATE_DEVICE - }; - - typedef void* TForteInstance; - /** - * \brief Start forte instance - * @param pa_port The port on which to forte will listen. Use 0 for default (normally 61499) - * @param pa_resultDevice Address of an instance of forte - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstance(unsigned int pa_port, TForteInstance* paResultInstance); - - /** - * \brief Start forte instance with posibilities of more arguments - * @param argc Number of arguments in arg - * @param arg Arguments - * @param pa_resultDevice Address of an instance of forte - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstanceGeneric(int argc, char *arg[], TForteInstance* paResultInstance); - - /** - * \brief Terminates a Forte instance - * @param signal Signal value to terminate instance - * @param pa_resultDevice Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteStopInstance(int signal, TForteInstance paInstance); - - /** - * \brief Initializes the architecture. Prepare all resources needed by the Forte's instances. Must be called once before the first Forte instance is started - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalInitialize(); - - /** - * \brief Deinitializes the architecture. Frees all resources used by Forte's instances. Must be called after the last instance is ended - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalDeinitialize(); - - -#ifdef __cplusplus -} -#endif - -#endif /* FORTE_INSTANCE_H_ */ diff --git a/src/arch/rcX/forte_architecture.cpp b/src/arch/rcX/forte_specific_architecture.cpp similarity index 81% rename from src/arch/rcX/forte_architecture.cpp rename to src/arch/rcX/forte_specific_architecture.cpp index 90812c780..8081c4cc8 100644 --- a/src/arch/rcX/forte_architecture.cpp +++ b/src/arch/rcX/forte_specific_architecture.cpp @@ -60,19 +60,13 @@ void initialize_destructors(void) /*func_ptr _init_array_start_forte[0] __attribute__ ((used, section(".init_array"), aligned(sizeof(func_ptr)))) = { }; func_ptr _fini_array_star_fortet[0] __attribute__ ((used, section(".fini_array"), aligned(sizeof(func_ptr)))) = { };*/ -bool CForteArchitecture::initialize(){ - if (!mInitialized){ - initialize_constructors(); - initForte(); - CrcXSocketInterface::getInstance(); - mInitialized = true; - } - return true; +int CForteSpecificArchitecture::initialize(){ + initialize_constructors(); + CrcXSocketInterface::getInstance(); + return 0; } -void CForteArchitecture::deinitialize(){ - if(mInitialized){ - initialize_destructors(); //TODO: is it really necessary? When called, _fini_array_start_forte == _fini_array_end_forte, so no function is actually called - mInitialized = false; - } +int CForteSpecificArchitecture::deinitialize(){ + initialize_destructors(); //TODO: is it really necessary? When called, _fini_array_start_forte == _fini_array_end_forte, so no function is actually called + return 0; } diff --git a/src/arch/vxworks/CMakeLists.txt b/src/arch/vxworks/CMakeLists.txt index 47d657a96..3aabae743 100644 --- a/src/arch/vxworks/CMakeLists.txt +++ b/src/arch/vxworks/CMakeLists.txt @@ -1,5 +1,5 @@ #/******************************************************************************* -# Copyright (c) 2016 fortiss GmbH +# Copyright (c) 2016, 2024 fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -25,7 +25,8 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "VxWorks") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(forte_architecture_time.cpp) - forte_add_to_executable_cpp(main) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) + forte_add_to_executable_cpp(../main) forte_add_sourcefile_hcpp(forte_thread forte_sync forte_sem) forte_add_sourcefile_cpp(../genforte_printer.cpp) diff --git a/src/arch/vxworks/main.cpp b/src/arch/vxworks/main.cpp deleted file mode 100644 index b1f9bd124..000000000 --- a/src/arch/vxworks/main.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * 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 - *******************************************************************************/ -#include -#include -#include -#include "forteinstance.h" - -/*!\brief Check if the correct endianess has been configured. - * - * If the right endianess is not set this function will end FORTE. - */ -void checkEndianess(); - -C4diacFORTEInstance g4diacForteInstance; - -//this keeps away a lot of rtti and exception handling stuff -#ifndef __cpp_exceptions -extern "C" void __cxa_pure_virtual(void){ - //TODO maybe add some reporting here - //Although we should never get here - //if we are here something very very bad has happened e.g., stack overflow or other memory corruption - -} -#endif - -void endForte(int ){ - g4diacForteInstance.triggerDeviceShutdown(); -} - -int startForte(){ - - checkEndianess(); - - signal(SIGINT, endForte); - signal(SIGTERM, endForte); - signal(SIGHUP, endForte); - - if(g4diacForteInstance.startupNewDevice("")) { - DEVLOG_INFO("FORTE is up and running\n"); - g4diacForteInstance.awaitDeviceShutdown(); - DEVLOG_INFO("FORTE finished\n"); - } - return 0; -} - -void 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"); - exit(-1); -#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"); - exit(-1); -#endif - } -} - diff --git a/src/arch/win32/CMakeLists.txt b/src/arch/win32/CMakeLists.txt index 3707fa599..60ed49898 100644 --- a/src/arch/win32/CMakeLists.txt +++ b/src/arch/win32/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2010 - 2015 ACIN, Profactor GmbH, fortiss GmbH +# Copyright (c) 2010 - 2024 ACIN, Profactor GmbH, fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -28,12 +28,11 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Win32") else() forte_add_sourcefile_cpp(forte_sync.cpp) endif() - forte_add_sourcefile_cpp(forte_architecture.cpp winforte_printer.cpp forte_architecture_time.cpp ../forte_standard_time.cpp) + forte_add_sourcefile_cpp(forte_specific_architecture.cpp winforte_printer.cpp forte_architecture_time.cpp ../forte_standard_time.cpp) forte_add_sourcefile_cpp(../genforte_fileio.cpp) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp) - forte_add_sourcefile_hcpp(forte_instance) - forte_add_to_executable_cpp(main) + forte_add_to_executable_cpp(../main) if(FORTE_BUILD_SHARED_LIBRARY) set(FORTE_EXTERNAL_TIMEHA OFF CACHE BOOL "Use External Time Handler") @@ -71,7 +70,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Win32") 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++") + forte_add_link_flags("-static-libgcc" "-static-libstdc++") forte_add_definition("-W -Wall -Wextra -Woverloaded-virtual -Wconversion -Wshadow") elseif(MSVC) forte_add_definition("-wd4595") #warning 4595: 'operator delete/delete[]': non-member operator new or delete functions may not be declared inline diff --git a/src/arch/win32/forte_instance.cpp b/src/arch/win32/forte_instance.cpp deleted file mode 100644 index ceacbedbd..000000000 --- a/src/arch/win32/forte_instance.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * 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, Alois Zoitl - initial API and implementation and/or initial documentation - *******************************************************************************/ -#include "forte_instance.h" -#include "fortenew.h" -#include "forte_architecture.h" -#include "forteinstance.h" - -#include - -C4diacFORTEInstance g4diacForteLibInstance; - -extern "C" -void startupFORTE(){ - CForteArchitecture::initialize(); - initForte(); - g4diacForteLibInstance.startupNewDevice(""); -} - -extern "C" -void shutdownFORTE(){ - g4diacForteLibInstance.triggerDeviceShutdown(); - g4diacForteLibInstance.awaitDeviceShutdown(); -} - diff --git a/src/arch/win32/forte_architecture.cpp b/src/arch/win32/forte_specific_architecture.cpp similarity index 50% rename from src/arch/win32/forte_architecture.cpp rename to src/arch/win32/forte_specific_architecture.cpp index 879d0ddc3..b710fe571 100644 --- a/src/arch/win32/forte_architecture.cpp +++ b/src/arch/win32/forte_specific_architecture.cpp @@ -10,29 +10,20 @@ * Alois Zoitl - initial API and implementation and/or initial documentation *******************************************************************************/ -#include "../forte_architecture.h" +#include "arch/forte_specific_architecture.h" #include -bool CForteArchitecture::mInitialized = false; +int CForteSpecificArchitecture::initialize(int, char**) { + // Windows Socket Startupcode + WORD wVersionRequested; + WSADATA wsaData; -bool CForteArchitecture::initialize() { - if (!mInitialized) { - // Windows Socket Startupcode - WORD wVersionRequested; - WSADATA wsaData; + /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */ + wVersionRequested = MAKEWORD(2, 2); - /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */ - wVersionRequested = MAKEWORD(2, 2); - - WSAStartup(wVersionRequested, &wsaData); - mInitialized = true; - } - return true; + return WSAStartup(wVersionRequested, &wsaData); } -void CForteArchitecture::deinitialize() { - if (mInitialized) { - WSACleanup(); - mInitialized = false; - } +int CForteSpecificArchitecture::deinitialize() { + return WSACleanup(); } diff --git a/src/arch/win32/main.cpp b/src/arch/win32/main.cpp deleted file mode 100644 index 89f7f675c..000000000 --- a/src/arch/win32/main.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * 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 - * Alois Zoitl - cleaned up main, inserted new architecture initilasation api - *******************************************************************************/ -#include "../forte_architecture.h" -#include "../devlog.h" -#include "../startuphook.h" -#include "forteinstance.h" -#include "../utils/mainparam_utils.h" - -#include -#include - -void hookSignals(); - -C4diacFORTEInstance g4diacForteInstance; - -//this keeps away a lot of rtti and exception handling stuff -#ifndef __cpp_exceptions -extern "C" void __cxa_pure_virtual(void){ - //TODO maybe add some reporting here - //Although we should never get here - //if we are here something very very bad has happened e.g., stack overflow or other memory corruption - -} -#endif - -void endForte(int ){ - g4diacForteInstance.triggerDeviceShutdown(); -} - -int main(int argc, char *arg[]){ - - if(CForteArchitecture::initialize()){ - - startupHook(argc, arg); - - hookSignals(); - - const char *pIpPort = parseCommandLineArguments(argc, arg); - if((0 != strlen(pIpPort)) && (nullptr != strchr(pIpPort, ':'))){ - if(g4diacForteInstance.startupNewDevice(pIpPort)) { - DEVLOG_INFO("FORTE is up and running\n"); - g4diacForteInstance.awaitDeviceShutdown(); - DEVLOG_INFO("FORTE finished\n"); - } - } - else{ //! Lists the help for FORTE - listHelp(); - } - - CForteArchitecture::deinitialize(); - - } - else{ - DEVLOG_ERROR("Architecture could not be initialized\n"); - } - return 0; -} - -void hookSignals() { - signal(SIGINT, endForte); - signal(SIGTERM, endForte); -} diff --git a/src/arch/zephyr/CMakeLists.txt b/src/arch/zephyr/CMakeLists.txt index c9e435965..d16fc3790 100644 --- a/src/arch/zephyr/CMakeLists.txt +++ b/src/arch/zephyr/CMakeLists.txt @@ -1,5 +1,5 @@ #/************************************************************************************ -# Copyright (c) 2023 KT Elektronik GmbH +# Copyright (c) 2023 - 2024 KT Elektronik GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -21,7 +21,7 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Zephyr") set(FORTE_LOGLEVEL "NOLOG" CACHE STRING "Loglevel to use" FORCE) SET(FORTE_ZEPHYR_INCLUDES "" CACHE STRING "Folders to include from the Zephyr OS") - forte_add_sourcefile_hcpp(forte_thread forte_sync forte_sem forte_Init) + forte_add_sourcefile_hcpp(forte_thread forte_sync forte_sem) if(FORTE_FAKE_TIME) forte_set_timer(../fake_time/faketimerha) @@ -30,7 +30,8 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Zephyr") endif(FORTE_FAKE_TIME) forte_add_sourcefile_cpp(./forte_architecture_time.cpp) - forte_add_sourcefile_cpp(forte_architecture.cpp ../genforte_printer.cpp) + forte_add_sourcefile_cpp(../common/forte_specific_architecture.cpp) + forte_add_sourcefile_cpp(../genforte_printer.cpp) forte_add_sourcefile_cpp(zephyrforte_fileio.cpp) forte_add_sourcefile_cpp(../genforte_realFunctions.cpp) diff --git a/src/arch/zephyr/forte_Init.cpp b/src/arch/zephyr/forte_Init.cpp deleted file mode 100644 index ad8054b19..000000000 --- a/src/arch/zephyr/forte_Init.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/************************************************************************************ - Copyright (c) 2023 KT Elektronik 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: - Dirk Kaar - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#include "forte_Init.h" - -#include "fortenew.h" -#include "forte_architecture.h" -#include "forte_printer.h" -#include -#include -#include "forteinstance.h" - -#include "../utils/mainparam_utils.h" - -#include - -constexpr 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 forteGlobalInitialize() { - CForteArchitecture::initialize(); -} - -void forteGlobalDeinitialize() { - CForteArchitecture::deinitialize(); -} - -int forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance) { - - if(65535 < paPort) { - return FORTE_WRONG_PARAMETERS; - } - - if(0 == paPort) { - paPort = forte_default_port; - } - - char progName[] = "forte"; - char flag[] = "-c"; - char address[17] = "localhost:"; - char port[6]; - forte_snprintf(port, 6, "%u", paPort); - strcat(address, port); - char* arguments[] = { progName, flag, address }; - return forteStartInstanceGeneric(3, 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 *ipPort = parseCommandLineArguments(paArgc, paArgv); - if((0 != strlen(ipPort)) && (NULL != strchr(ipPort, ':'))) { - C4diacFORTEInstance *instance = new C4diacFORTEInstance(); - if(!instance->startupNewDevice(ipPort)) { - delete instance; - return FORTE_COULD_NOT_CREATE_DEVICE; - } - *paResultInstance = instance; - DEVLOG_INFO("FORTE is up and running\n"); - } else { //! If needed call listHelp() to list the help for FORTE - return FORTE_WRONG_PARAMETERS; - } - - return FORTE_OK; -} - -void forteJoinInstance(TForteInstance paInstance) { - C4diacFORTEInstance *instance = static_cast(paInstance); - if(instance != nullptr){ - instance->awaitDeviceShutdown(); - } -} - -void forteStopInstance(int, TForteInstance paInstance) { - if(!CForteArchitecture::isInitialized() || paInstance != nullptr) { - return; - } - C4diacFORTEInstance *instance = static_cast(paInstance); - instance->triggerDeviceShutdown(); - instance->awaitDeviceShutdown(); - delete instance; - DEVLOG_INFO("FORTE finished\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/zephyr/forte_Init.h b/src/arch/zephyr/forte_Init.h deleted file mode 100644 index f26c60596..000000000 --- a/src/arch/zephyr/forte_Init.h +++ /dev/null @@ -1,88 +0,0 @@ -/************************************************************************************ - Copyright (c) 2023 KT Elektronik 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: - Dirk Kaar - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#ifndef SRC_ARCH_ZEPHYR_FORTE_INIT_H_ -#define SRC_ARCH_ZEPHYR_FORTE_INIT_H_ - -/* When moving this file to the outside of the architecture, - * the corresponding defines for exporting in windows or other platform - * must be added here - * - */ -#ifndef FORTE_SHARED_PREFIX -# define FORTE_SHARED_PREFIX -#endif - -#ifndef FORTE_SHARED_CALL -# define FORTE_SHARED_CALL -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - enum FORTE_STATUS { - FORTE_OK, - FORTE_DEVICE_ALREADY_STARTED, - FORTE_WRONG_ENDIANESS, - FORTE_WRONG_PARAMETERS, - FORTE_ARCHITECTURE_NOT_READY, - FORTE_COULD_NOT_CREATE_DEVICE - }; - - typedef void* TForteInstance; - - /** - * \brief Start forte instance - * @param paPort The port on which to forte will listen. Use 0 for default (normally 61499) - * @param paResultInstance Address of an instance of forte where the new instance is stored - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstance(unsigned int paPort, TForteInstance* paResultInstance); - - /** - * \brief Start forte instance with possibilities of more arguments - * @param paArgc Number of arguments in arg - * @param paArgv Arguments - * @param paResultInstance Address of an instance of forte where the new instance is stored - * @return FORTE_OK if no error occurred, other values otherwise - */ - FORTE_SHARED_PREFIX int FORTE_SHARED_CALL forteStartInstanceGeneric(int paArgc, char *paArgv[], TForteInstance* paResultInstance); - - /** - * \brief Terminates a Forte instance - * @param paSignal Signal value to terminate instance - * @param paInstance Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteStopInstance(int paSignal, TForteInstance paInstance); - - /** - * \brief Terminates a Forte instance - * @param paInstance Instance to terminate - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteJoinInstance(TForteInstance paInstance); - - /** - * \brief Initializes the architecture. Prepare all resources needed by the Forte's instances. Must be called once before the first Forte instance is started - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalInitialize(); - - /** - * \brief Deinitializes the architecture. Frees all resources used by Forte's instances. Must be called after the last instance is ended - */ - FORTE_SHARED_PREFIX void FORTE_SHARED_CALL forteGlobalDeinitialize(); - -#ifdef __cplusplus -} -#endif - -#endif /* SRC_ARCH_ZEPHYR_FORTE_INIT_H_ */ diff --git a/src/arch/zephyr/forte_architecture.cpp b/src/arch/zephyr/forte_architecture.cpp deleted file mode 100644 index 0435db8e7..000000000 --- a/src/arch/zephyr/forte_architecture.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/************************************************************************************ - * 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: - * Milan Vathoopan - initial API and implementation and/or initial documentation - ************************************************************************************/ - -#include "../forte_architecture.h" -#include "forteinit.h" - -bool CForteArchitecture::mInitialized = false; - -bool CForteArchitecture::initialize() { - if(!mInitialized) { - initForte(); - mInitialized = true; - } - return true; -} - -void CForteArchitecture::deinitialize() { - if(mInitialized) { - mInitialized = false; - } -} - diff --git a/src/core/genfb.h b/src/core/genfb.h index 07662553e..67cdbfb8a 100644 --- a/src/core/genfb.h +++ b/src/core/genfb.h @@ -1,5 +1,6 @@ /******************************************************************************* - * Copyright (c) 2018 Johannes Kepler University + * Copyright (c) 2018, 2024 Johannes Kepler University + * Martin Erich Jobst * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -9,6 +10,7 @@ * * Contributors: * Alois Zoitl - initial implementation and rework communication infrastructure + * Martin Erich Jobst - add generic event accessor helpers *******************************************************************************/ #ifndef _GENFB_H_ #define _GENFB_H_ @@ -65,6 +67,66 @@ class CGenFunctionBlock : public T { bool initialize(); + template + void writeArguments(Args &&...paArgs) { + TPortId index = 0; + (writeArgument(index++, std::forward(paArgs)), ...); + } + + template + void writeArgument(TPortId paIndex, const Arg &paArg) { + const SFBInterfaceSpec &interfaceSpec = T::getFBInterfaceSpec(); + if (paIndex < interfaceSpec.mNumDIs) { + T::getDIFromPortId(paIndex)->setValue(paArg); + } else if (paIndex < interfaceSpec.mNumDIs + interfaceSpec.mNumDIOs) { + T::getDIOFromPortId(paIndex - interfaceSpec.mNumDIs)->setValue(paArg); + } else if (paIndex < interfaceSpec.mNumDIs + interfaceSpec.mNumDIOs + interfaceSpec.mNumDOs) { + T::getDOFromPortId(paIndex - interfaceSpec.mNumDIs - interfaceSpec.mNumDIOs)->setValue(paArg); + } + } + + template + void writeInputArguments(Args &&...paArgs) { + TPortId index = 0; + (writeInputArgument(index++, std::forward(paArgs)), ...); + } + + template + void writeInputArgument(TPortId paIndex, const Arg &paArg) { + const SFBInterfaceSpec &interfaceSpec = T::getFBInterfaceSpec(); + if (paIndex < interfaceSpec.mNumDIs) { + T::getDIFromPortId(paIndex)->setValue(paArg); + } else if (paIndex < interfaceSpec.mNumDIs + interfaceSpec.mNumDIOs) { + T::getDIOFromPortId(paIndex - interfaceSpec.mNumDIs)->setValue(paArg); + } // skip DO + } + + template + void readOutputArguments(Args &&...paArgs) { + TPortId index = 0; + (readOutputArgument(index++, std::forward(paArgs)), ...); + } + + template + void readOutputArgument(TPortId paIndex, Arg &&paArg) { + const SFBInterfaceSpec &interfaceSpec = T::getFBInterfaceSpec(); + if (paIndex < interfaceSpec.mNumDIs) { + // do nothing + } else if (paIndex < interfaceSpec.mNumDIs + interfaceSpec.mNumDIOs) { + if constexpr (std::is_const_v>) { + DEVLOG_ERROR("[CGenFunctionBlock] Trying to pass const argument to in/out variable\n"); + } else { + paArg.setValue(T::getDIOFromPortId(paIndex - interfaceSpec.mNumDIs)->unwrap()); + } + } else if (paIndex < interfaceSpec.mNumDIs + interfaceSpec.mNumDIOs + interfaceSpec.mNumDOs) { + if constexpr (std::is_const_v>) { + DEVLOG_ERROR("[CGenFunctionBlock] Trying to pass const argument to output variable\n"); + } else { + paArg.setValue(T::getDOFromPortId(paIndex - interfaceSpec.mNumDIs - interfaceSpec.mNumDIOs)->unwrap()); + } + } + } + static void generateGenericInterfacePointNameArray(const char * const paPrefix, CStringDictionary::TStringId* paNamesArayStart, size_t paNumGenericDataPoints); diff --git a/src/modules/PLCnext/CMakeLists.txt b/src/modules/PLCnext/CMakeLists.txt index 74bf25a0d..9ab63a00d 100644 --- a/src/modules/PLCnext/CMakeLists.txt +++ b/src/modules/PLCnext/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# * Copyright (c) 2022 Peirlberger Juergen +# * Copyright (c) 2022, 2024 Peirlberger Juergen, Jose Cabral # * This program and the accompanying materials are made available under the # * terms of the Eclipse Public License 2.0 which is available at # * http://www.eclipse.org/legal/epl-2.0. @@ -44,6 +44,8 @@ forte_add_link_library_beginning(Arp.Plc.AnsiC) forte_add_link_flags("-Wno-undef") +forte_add_startup_hook(DeviceStatus::startup) + else("${FORTE_ARCHITECTURE}" STREQUAL "Posix") MESSAGE(FATAL_ERROR "PLCnext IO system is only supported for FORTE on Linux (Posix) platforms!") endif("${FORTE_ARCHITECTURE}" STREQUAL "Posix") diff --git a/src/modules/PLCnext/plcNextDeviceStatus.cpp b/src/modules/PLCnext/plcNextDeviceStatus.cpp index 0c1031d25..690748752 100644 --- a/src/modules/PLCnext/plcNextDeviceStatus.cpp +++ b/src/modules/PLCnext/plcNextDeviceStatus.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2022 Peirlberger Juergen + * Copyright (c) 2022, 2024 Peirlberger Juergen, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -23,6 +23,8 @@ #include #include "plcNextDeviceStatus.h" +#include + using namespace Arp; using namespace Arp::System::Rsc; using namespace Arp::Device::Interface::Services; @@ -35,7 +37,10 @@ bool DeviceStatus::isReady() { return DeviceStatus::started && DeviceStatus::ready; } -bool DeviceStatus::startup() { +bool DeviceStatus::startup(int, char*) { + + // this sleep came from the main. Check again if it's actually needed + sleep(3); // register callback function to get information when plc is ready ArpPlcDomain_SetHandler(DeviceStatus::plcCallbackOperationHandler); diff --git a/src/modules/PLCnext/plcNextDeviceStatus.h b/src/modules/PLCnext/plcNextDeviceStatus.h index 3add845b3..4e9ad16e1 100644 --- a/src/modules/PLCnext/plcNextDeviceStatus.h +++ b/src/modules/PLCnext/plcNextDeviceStatus.h @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2022 Peirlberger Juergen + * Copyright (c) 2022, 2024 Peirlberger Juergen, Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -40,7 +40,7 @@ class DeviceStatus { static volatile bool started; static volatile bool ready; - static bool startup(); + static bool startup(int, char*); static bool isReady(); static void plcCallbackOperationHandler(enum PlcOperation operation); diff --git a/src/modules/SIGNALPROCESSING/CMakeLists.txt b/src/modules/signalprocessing/CMakeLists.txt similarity index 84% rename from src/modules/SIGNALPROCESSING/CMakeLists.txt rename to src/modules/signalprocessing/CMakeLists.txt index d1d7d7fea..5308c1976 100644 --- a/src/modules/SIGNALPROCESSING/CMakeLists.txt +++ b/src/modules/signalprocessing/CMakeLists.txt @@ -22,4 +22,7 @@ forte_add_include_directories(${CMAKE_CURRENT_SOURCE_DIR}) forte_add_sourcefile_hcpp(DualHysteresis_fbt) forte_add_sourcefile_hcpp(FIELDBUS_WORD_TO_PERCENT_fct) forte_add_sourcefile_hcpp(FIELDBUS_PERCENT_TO_WORD_fct) -forte_add_sourcefile_hcpp(FIELDBUS_SIGNAL_gcf) \ No newline at end of file +forte_add_sourcefile_hcpp(FIELDBUS_SIGNAL_gcf) +forte_add_sourcefile_hcpp(SCALE_fct) +forte_add_sourcefile_hcpp(SCALE_LIM_fct) +forte_add_sourcefile_hcpp(RampLimitFS_fbt) \ No newline at end of file diff --git a/src/modules/SIGNALPROCESSING/DualHysteresis_fbt.cpp b/src/modules/signalprocessing/DualHysteresis_fbt.cpp similarity index 99% rename from src/modules/SIGNALPROCESSING/DualHysteresis_fbt.cpp rename to src/modules/signalprocessing/DualHysteresis_fbt.cpp index 75a42d67c..e0d41bf6b 100644 --- a/src/modules/SIGNALPROCESSING/DualHysteresis_fbt.cpp +++ b/src/modules/signalprocessing/DualHysteresis_fbt.cpp @@ -16,13 +16,13 @@ #include "DualHysteresis_fbt.h" #ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP -#include "signalprocessing/DualHysteresis_fbt_gen.cpp" +#include "DualHysteresis_fbt_gen.cpp" #endif #include "criticalregion.h" #include "resource.h" -#include "forte_real.h" #include "forte_bool.h" +#include "forte_real.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" @@ -297,4 +297,3 @@ void FORTE_signalprocessing__DualHysteresis::alg_alDown(void) { var_DO_DOWN = true_BOOL; } } - diff --git a/src/modules/SIGNALPROCESSING/DualHysteresis_fbt.h b/src/modules/signalprocessing/DualHysteresis_fbt.h similarity index 99% rename from src/modules/SIGNALPROCESSING/DualHysteresis_fbt.h rename to src/modules/signalprocessing/DualHysteresis_fbt.h index fae5929f2..38a97be9b 100644 --- a/src/modules/SIGNALPROCESSING/DualHysteresis_fbt.h +++ b/src/modules/signalprocessing/DualHysteresis_fbt.h @@ -25,7 +25,6 @@ #include "forte_array_fixed.h" #include "forte_array_variable.h" - class FORTE_signalprocessing__DualHysteresis final : public CBasicFB { DECLARE_FIRMWARE_FB(FORTE_signalprocessing__DualHysteresis) @@ -140,4 +139,3 @@ class FORTE_signalprocessing__DualHysteresis final : public CBasicFB { } }; - diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.cpp b/src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.cpp similarity index 69% rename from src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.cpp rename to src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.cpp index 98ac1f3b6..409434f33 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.cpp +++ b/src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.cpp @@ -9,9 +9,10 @@ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! *** *** Name: FIELDBUS_PERCENT_TO_WORD - *** Description: + *** Description: Convert a WORD Value Range 0-FAFF to a REAL in the Range 0.0 to 100.0 *** Version: - *** 1.0: 2023-10-21/franz - - + *** 1.0: 2023-10-21/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Update to a more Function like Interface *************************************************************************/ #include "FIELDBUS_PERCENT_TO_WORD_fct.h" @@ -19,63 +20,55 @@ #include "FIELDBUS_PERCENT_TO_WORD_fct_gen.cpp" #endif -#include "criticalregion.h" -#include "resource.h" -#include "forte_bool.h" #include "forte_real.h" -#include "forte_word.h" #include "forte_udint.h" +#include "forte_word.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" #include "forte_array_fixed.h" #include "forte_array_variable.h" +#include "FIELDBUS_PERCENT_TO_WORD_fct.h" #include "FIELDBUS_SIGNAL_gcf.h" DEFINE_FIRMWARE_FB(FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD, g_nStringIdsignalprocessing__FIELDBUS_PERCENT_TO_WORD) -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdRI}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdREAL}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdWO}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWORD}; -const TDataIOID FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEIWith[] = {0, 1, scmWithListDelimiter}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataInputNames[] = {g_nStringIdRI}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataInputTypeIds[] = {g_nStringIdREAL}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmDataOutputTypeIds[] = {g_nStringIdWORD}; +const TDataIOID FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEIWith[] = {0, scmWithListDelimiter}; const TForteInt16 FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEIWithIndexes[] = {0}; const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEventInputNames[] = {g_nStringIdREQ}; -const TDataIOID FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEOWith[] = {0, 1, scmWithListDelimiter}; +const TDataIOID FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEOWith[] = {0, scmWithListDelimiter}; const TForteInt16 FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEOWithIndexes[] = {0}; const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmEventOutputNames[] = {g_nStringIdCNF}; const SFBInterfaceSpec FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::scmFBInterfaceSpec = { 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, - 2, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, + 1, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, 0, nullptr, 0, nullptr }; FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), - var_conn_QO(var_QO), - var_conn_WO(var_WO), + var_conn_(var_), conn_CNF(this, 0), - conn_QI(nullptr), conn_RI(nullptr), - conn_QO(this, 0, &var_conn_QO), - conn_WO(this, 1, &var_conn_WO) { + conn_(this, 0, &var_conn_) { } void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::setInitialValues() { - var_QI = 0_BOOL; var_RI = 0_REAL; - var_QO = 0_BOOL; - var_WO = 0_WORD; + var_ = 0_WORD; } void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::readInputData(const TEventID paEIID) { switch(paEIID) { case scmEventREQID: { - readData(0, var_QI, conn_QI); - readData(1, var_RI, conn_RI); + readData(0, var_RI, conn_RI); break; } default: @@ -86,8 +79,7 @@ void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::readInputData(const TEven void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::writeOutputData(const TEventID paEIID) { switch(paEIID) { case scmEventCNFID: { - writeData(0, var_QO, conn_QO); - writeData(1, var_WO, conn_WO); + writeData(0, var_, conn_); break; } default: @@ -97,16 +89,14 @@ void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::writeOutputData(const TEv CIEC_ANY *FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::getDI(const size_t paIndex) { switch(paIndex) { - case 0: return &var_QI; - case 1: return &var_RI; + case 0: return &var_RI; } return nullptr; } CIEC_ANY *FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::getDO(const size_t paIndex) { switch(paIndex) { - case 0: return &var_QO; - case 1: return &var_WO; + case 0: return &var_; } return nullptr; } @@ -120,36 +110,28 @@ CEventConnection *FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::getEOConUnch CDataConnection **FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::getDIConUnchecked(const TPortId paIndex) { switch(paIndex) { - case 0: return &conn_QI; - case 1: return &conn_RI; + case 0: return &conn_RI; } return nullptr; } CDataConnection *FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::getDOConUnchecked(const TPortId paIndex) { switch(paIndex) { - case 0: return &conn_QO; - case 1: return &conn_WO; + case 0: return &conn_; } return nullptr; } -void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::executeEvent(const TEventID paEIID, CEventChainExecutionThread *const paECET) { - func_FIELDBUS_PERCENT_TO_WORD(var_QI, var_RI, var_QO, var_WO); +void FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_FIELDBUS_PERCENT_TO_WORD(var_RI); sendOutputEvent(scmEventCNFID, paECET); } -void func_FIELDBUS_PERCENT_TO_WORD(CIEC_BOOL st_lv_QI, CIEC_REAL st_lv_RI, CIEC_BOOL &st_lv_QO, CIEC_WORD &st_lv_WO) { - st_lv_QO = 0_BOOL; - st_lv_WO = 0_WORD; +CIEC_WORD func_FIELDBUS_PERCENT_TO_WORD(CIEC_REAL st_lv_RI) { + CIEC_WORD st_ret_val = 0_WORD; - #line 14 "FIELDBUS_PERCENT_TO_WORD.fct" - st_lv_QO = st_lv_QI; - #line 15 "FIELDBUS_PERCENT_TO_WORD.fct" - if (func_EQ(true_BOOL, st_lv_QI)) { - #line 16 "FIELDBUS_PERCENT_TO_WORD.fct" - st_lv_WO = func_UDINT_TO_WORD(func_REAL_TO_UDINT(func_MUL(st_lv_RI, func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_global_FIELDBUS_VALID_SIGNAL_W))))); - } + #line 9 "FIELDBUS_PERCENT_TO_WORD.fct" + st_ret_val = func_UDINT_TO_WORD(func_REAL_TO_UDINT(func_MUL(st_lv_RI, func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_global_FIELDBUS_VALID_SIGNAL_W))))); + return st_ret_val; } - diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.h b/src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.h similarity index 77% rename from src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.h rename to src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.h index 38284cdf7..777ff38aa 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_PERCENT_TO_WORD_fct.h +++ b/src/modules/signalprocessing/FIELDBUS_PERCENT_TO_WORD_fct.h @@ -6,18 +6,18 @@ *** *** SPDX-License-Identifier: EPL-2.0 *** - *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! *** *** Name: FIELDBUS_PERCENT_TO_WORD - *** Description: + *** Description: Convert a WORD Value Range 0-FAFF to a REAL in the Range 0.0 to 100.0 *** Version: - *** 1.0: 2023-10-21/franz - - + *** 1.0: 2023-10-21/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Update to a more Function like Interface *************************************************************************/ #pragma once #include "funcbloc.h" -#include "forte_bool.h" #include "forte_real.h" #include "forte_word.h" #include "iec61131_functions.h" @@ -26,7 +26,6 @@ #include "forte_array_fixed.h" #include "forte_array_variable.h" - class FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD final : public CFunctionBlock { DECLARE_FIRMWARE_FB(FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD) @@ -55,22 +54,17 @@ class FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD final : public CFunctionB public: FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - CIEC_BOOL var_QI; CIEC_REAL var_RI; - CIEC_BOOL var_QO; - CIEC_WORD var_WO; + CIEC_WORD var_; - CIEC_BOOL var_conn_QO; - CIEC_WORD var_conn_WO; + CIEC_WORD var_conn_; CEventConnection conn_CNF; - CDataConnection *conn_QI; CDataConnection *conn_RI; - CDataConnection conn_QO; - CDataConnection conn_WO; + CDataConnection conn_; CIEC_ANY *getDI(size_t) override; CIEC_ANY *getDO(size_t) override; @@ -78,19 +72,16 @@ class FORTE_signalprocessing__FIELDBUS_PERCENT_TO_WORD final : public CFunctionB CDataConnection **getDIConUnchecked(TPortId) override; CDataConnection *getDOConUnchecked(TPortId) override; - void evt_REQ(const CIEC_BOOL &paQI, const CIEC_REAL &paRI, CIEC_BOOL &paQO, CIEC_WORD &paWO) { - var_QI = paQI; + void evt_REQ(const CIEC_REAL &paRI, CIEC_WORD &pa) { var_RI = paRI; executeEvent(scmEventREQID, nullptr); - paQO = var_QO; - paWO = var_WO; + pa = var_; } - void operator()(const CIEC_BOOL &paQI, const CIEC_REAL &paRI, CIEC_BOOL &paQO, CIEC_WORD &paWO) { - evt_REQ(paQI, paRI, paQO, paWO); + void operator()(const CIEC_REAL &paRI, CIEC_WORD &pa) { + evt_REQ(paRI, pa); } }; -void func_FIELDBUS_PERCENT_TO_WORD(CIEC_BOOL st_lv_QI, CIEC_REAL st_lv_RI, CIEC_BOOL &st_lv_QO, CIEC_WORD &st_lv_WO); - +CIEC_WORD func_FIELDBUS_PERCENT_TO_WORD(CIEC_REAL st_lv_RI); diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.cpp b/src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.cpp similarity index 99% rename from src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.cpp rename to src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.cpp index 538ef1c58..d145ffb84 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.cpp +++ b/src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.cpp @@ -18,8 +18,8 @@ #include "iec61131_functions.h" #include "forte_byte.h" -#include "forte_word.h" #include "forte_dword.h" +#include "forte_word.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" @@ -55,4 +55,4 @@ const CIEC_DWORD st_global_FIELDBUS_VALID_SIGNAL_DW = 4211081215_DWORD; const CIEC_DWORD st_global_FIELDBUS_ERROR_INDI_DW = 4261412864_DWORD; const CIEC_DWORD st_global_FIELDBUS_NOT_AVAILABLE_DW = 4278190080_DWORD; const CIEC_DWORD st_global_FIELDBUS_ERROR_INDI_DWM = 4278190079_DWORD; -const CIEC_DWORD st_global_FIELDBUS_NOT_AVAILABLE_DM = 4294967295_DWORD; +const CIEC_DWORD st_global_FIELDBUS_NOT_AVAILABLE_DM = 4294967295_DWORD; \ No newline at end of file diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.h b/src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.h similarity index 98% rename from src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.h rename to src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.h index 90ff0d9d9..6cb1fd744 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_SIGNAL_gcf.h +++ b/src/modules/signalprocessing/FIELDBUS_SIGNAL_gcf.h @@ -15,8 +15,8 @@ #define _FIELDBUS_SIGNAL_GCF_H_ #include "forte_byte.h" -#include "forte_word.h" #include "forte_dword.h" +#include "forte_word.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" @@ -54,4 +54,4 @@ extern const CIEC_DWORD st_global_FIELDBUS_NOT_AVAILABLE_DW; extern const CIEC_DWORD st_global_FIELDBUS_ERROR_INDI_DWM; extern const CIEC_DWORD st_global_FIELDBUS_NOT_AVAILABLE_DM; -#endif // _FIELDBUS_SIGNAL_GCF_H_ +#endif // _FIELDBUS_SIGNAL_GCF_H_ \ No newline at end of file diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.cpp b/src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.cpp similarity index 59% rename from src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.cpp rename to src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.cpp index 41169837e..8a775548d 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.cpp +++ b/src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.cpp @@ -9,9 +9,10 @@ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! *** *** Name: FIELDBUS_WORD_TO_PERCENT - *** Description: + *** Description: Convert a REAL in the Range 0.0 to 100.0 to a WORD Value Range 0-FAFF *** Version: - *** 1.0: 2023-10-21/franz - - + *** 1.0: 2023-10-21/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Update to a more Function like Interface *************************************************************************/ #include "FIELDBUS_WORD_TO_PERCENT_fct.h" @@ -19,70 +20,58 @@ #include "FIELDBUS_WORD_TO_PERCENT_fct_gen.cpp" #endif -#include "criticalregion.h" -#include "resource.h" #include "forte_real.h" -#include "forte_bool.h" -#include "forte_word.h" #include "forte_udint.h" +#include "forte_word.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" #include "forte_array_fixed.h" #include "forte_array_variable.h" #include "FIELDBUS_SIGNAL_gcf.h" +#include "FIELDBUS_WORD_TO_PERCENT_fct.h" DEFINE_FIRMWARE_FB(FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT, g_nStringIdsignalprocessing__FIELDBUS_WORD_TO_PERCENT) -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdWI, g_nStringIdRO_E}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWORD, g_nStringIdREAL}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdRO, g_nStringIdWO}; -const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdREAL, g_nStringIdWORD}; -const TDataIOID FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEIWith[] = {0, 1, 2, scmWithListDelimiter}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataInputNames[] = {g_nStringIdWI}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataInputTypeIds[] = {g_nStringIdWORD}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataOutputNames[] = {g_nStringId, g_nStringIdWO}; +const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmDataOutputTypeIds[] = {g_nStringIdREAL, g_nStringIdWORD}; +const TDataIOID FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEIWith[] = {0, scmWithListDelimiter}; const TForteInt16 FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEIWithIndexes[] = {0}; const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEventInputNames[] = {g_nStringIdREQ}; -const TDataIOID FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEOWith[] = {0, 1, 2, scmWithListDelimiter}; +const TDataIOID FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEOWith[] = {0, 1, scmWithListDelimiter}; const TForteInt16 FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEOWithIndexes[] = {0}; const CStringDictionary::TStringId FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmEventOutputNames[] = {g_nStringIdCNF}; const SFBInterfaceSpec FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::scmFBInterfaceSpec = { 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, - 3, scmDataInputNames, scmDataInputTypeIds, - 3, scmDataOutputNames, scmDataOutputTypeIds, + 1, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, 0, nullptr, 0, nullptr }; FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), - var_RO_E(0.5_REAL), - var_conn_QO(var_QO), - var_conn_RO(var_RO), + var_conn_(var_), var_conn_WO(var_WO), conn_CNF(this, 0), - conn_QI(nullptr), conn_WI(nullptr), - conn_RO_E(nullptr), - conn_QO(this, 0, &var_conn_QO), - conn_RO(this, 1, &var_conn_RO), - conn_WO(this, 2, &var_conn_WO) { + conn_(this, 0, &var_conn_), + conn_WO(this, 1, &var_conn_WO) { } void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::setInitialValues() { - var_QI = 0_BOOL; var_WI = 0_WORD; - var_RO_E = 0.5_REAL; - var_QO = 0_BOOL; - var_RO = 0_REAL; + var_ = 0_REAL; var_WO = 0_WORD; } void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::readInputData(const TEventID paEIID) { switch(paEIID) { case scmEventREQID: { - readData(0, var_QI, conn_QI); - readData(1, var_WI, conn_WI); - readData(2, var_RO_E, conn_RO_E); + readData(0, var_WI, conn_WI); break; } default: @@ -93,9 +82,8 @@ void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::readInputData(const TEven void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::writeOutputData(const TEventID paEIID) { switch(paEIID) { case scmEventCNFID: { - writeData(0, var_QO, conn_QO); - writeData(1, var_RO, conn_RO); - writeData(2, var_WO, conn_WO); + writeData(0, var_, conn_); + writeData(1, var_WO, conn_WO); break; } default: @@ -105,18 +93,15 @@ void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::writeOutputData(const TEv CIEC_ANY *FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::getDI(const size_t paIndex) { switch(paIndex) { - case 0: return &var_QI; - case 1: return &var_WI; - case 2: return &var_RO_E; + case 0: return &var_WI; } return nullptr; } CIEC_ANY *FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::getDO(const size_t paIndex) { switch(paIndex) { - case 0: return &var_QO; - case 1: return &var_RO; - case 2: return &var_WO; + case 0: return &var_; + case 1: return &var_WO; } return nullptr; } @@ -130,47 +115,35 @@ CEventConnection *FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::getEOConUnch CDataConnection **FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::getDIConUnchecked(const TPortId paIndex) { switch(paIndex) { - case 0: return &conn_QI; - case 1: return &conn_WI; - case 2: return &conn_RO_E; + case 0: return &conn_WI; } return nullptr; } CDataConnection *FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::getDOConUnchecked(const TPortId paIndex) { switch(paIndex) { - case 0: return &conn_QO; - case 1: return &conn_RO; - case 2: return &conn_WO; + case 0: return &conn_; + case 1: return &conn_WO; } return nullptr; } -void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::executeEvent(const TEventID paEIID, CEventChainExecutionThread *const paECET) { - func_FIELDBUS_WORD_TO_PERCENT(var_QI, var_WI, var_RO_E, var_QO, var_RO, var_WO); +void FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_FIELDBUS_WORD_TO_PERCENT(var_WI, var_WO); sendOutputEvent(scmEventCNFID, paECET); } -void func_FIELDBUS_WORD_TO_PERCENT(CIEC_BOOL st_lv_QI, CIEC_WORD st_lv_WI, CIEC_REAL st_lv_RO_E, CIEC_BOOL &st_lv_QO, CIEC_REAL &st_lv_RO, CIEC_WORD &st_lv_WO) { - st_lv_QO = 0_BOOL; - st_lv_RO = 0_REAL; +CIEC_REAL func_FIELDBUS_WORD_TO_PERCENT(CIEC_WORD st_lv_WI, CIEC_WORD &st_lv_WO) { + CIEC_REAL st_ret_val = 0_REAL; st_lv_WO = 0_WORD; - #line 16 "FIELDBUS_WORD_TO_PERCENT.fct" - st_lv_QO = st_lv_QI; - #line 17 "FIELDBUS_WORD_TO_PERCENT.fct" - if (func_AND(func_EQ(true_BOOL, st_lv_QI), func_LE(st_lv_WI, st_global_FIELDBUS_VALID_SIGNAL_W))) { - #line 18 "FIELDBUS_WORD_TO_PERCENT.fct" + #line 13 "FIELDBUS_WORD_TO_PERCENT.fct" + if (func_LE(st_lv_WI, st_global_FIELDBUS_VALID_SIGNAL_W)) { + #line 14 "FIELDBUS_WORD_TO_PERCENT.fct" st_lv_WO = st_lv_WI; - #line 19 "FIELDBUS_WORD_TO_PERCENT.fct" - st_lv_RO = func_DIV(func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_lv_WO)), func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_global_FIELDBUS_VALID_SIGNAL_W))); - } - else { - #line 21 "FIELDBUS_WORD_TO_PERCENT.fct" - st_lv_RO = st_lv_RO_E; - #line 22 "FIELDBUS_WORD_TO_PERCENT.fct" - st_lv_WO = func_UDINT_TO_WORD(func_REAL_TO_UDINT(func_MUL(st_lv_RO_E, func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_global_FIELDBUS_VALID_SIGNAL_W))))); + #line 15 "FIELDBUS_WORD_TO_PERCENT.fct" + st_ret_val = func_DIV(func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_lv_WO)), func_UDINT_TO_REAL(func_WORD_TO_UDINT(st_global_FIELDBUS_VALID_SIGNAL_W))); } + return st_ret_val; } - diff --git a/src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.h b/src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.h similarity index 74% rename from src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.h rename to src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.h index 5ee619ff3..87def2beb 100644 --- a/src/modules/SIGNALPROCESSING/FIELDBUS_WORD_TO_PERCENT_fct.h +++ b/src/modules/signalprocessing/FIELDBUS_WORD_TO_PERCENT_fct.h @@ -9,24 +9,23 @@ *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! *** *** Name: FIELDBUS_WORD_TO_PERCENT - *** Description: + *** Description: Convert a REAL in the Range 0.0 to 100.0 to a WORD Value Range 0-FAFF *** Version: - *** 1.0: 2023-10-21/franz - - + *** 1.0: 2023-10-21/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Update to a more Function like Interface *************************************************************************/ #pragma once #include "funcbloc.h" -#include "forte_bool.h" -#include "forte_word.h" #include "forte_real.h" +#include "forte_word.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" #include "forte_array_fixed.h" #include "forte_array_variable.h" - class FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT final : public CFunctionBlock { DECLARE_FIRMWARE_FB(FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT) @@ -55,26 +54,19 @@ class FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT final : public CFunctionB public: FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - CIEC_BOOL var_QI; CIEC_WORD var_WI; - CIEC_REAL var_RO_E; - CIEC_BOOL var_QO; - CIEC_REAL var_RO; + CIEC_REAL var_; CIEC_WORD var_WO; - CIEC_BOOL var_conn_QO; - CIEC_REAL var_conn_RO; + CIEC_REAL var_conn_; CIEC_WORD var_conn_WO; CEventConnection conn_CNF; - CDataConnection *conn_QI; CDataConnection *conn_WI; - CDataConnection *conn_RO_E; - CDataConnection conn_QO; - CDataConnection conn_RO; + CDataConnection conn_; CDataConnection conn_WO; CIEC_ANY *getDI(size_t) override; @@ -83,21 +75,17 @@ class FORTE_signalprocessing__FIELDBUS_WORD_TO_PERCENT final : public CFunctionB CDataConnection **getDIConUnchecked(TPortId) override; CDataConnection *getDOConUnchecked(TPortId) override; - void evt_REQ(const CIEC_BOOL &paQI, const CIEC_WORD &paWI, const CIEC_REAL &paRO_E, CIEC_BOOL &paQO, CIEC_REAL &paRO, CIEC_WORD &paWO) { - var_QI = paQI; + void evt_REQ(const CIEC_WORD &paWI, CIEC_REAL &pa, CIEC_WORD &paWO) { var_WI = paWI; - var_RO_E = paRO_E; executeEvent(scmEventREQID, nullptr); - paQO = var_QO; - paRO = var_RO; + pa = var_; paWO = var_WO; } - void operator()(const CIEC_BOOL &paQI, const CIEC_WORD &paWI, const CIEC_REAL &paRO_E, CIEC_BOOL &paQO, CIEC_REAL &paRO, CIEC_WORD &paWO) { - evt_REQ(paQI, paWI, paRO_E, paQO, paRO, paWO); + void operator()(const CIEC_WORD &paWI, CIEC_REAL &pa, CIEC_WORD &paWO) { + evt_REQ(paWI, pa, paWO); } }; -void func_FIELDBUS_WORD_TO_PERCENT(CIEC_BOOL st_lv_QI, CIEC_WORD st_lv_WI, CIEC_REAL st_lv_RO_E, CIEC_BOOL &st_lv_QO, CIEC_REAL &st_lv_RO, CIEC_WORD &st_lv_WO); - +CIEC_REAL func_FIELDBUS_WORD_TO_PERCENT(CIEC_WORD st_lv_WI, CIEC_WORD &st_lv_WO); diff --git a/src/modules/signalprocessing/RampLimitFS_fbt.cpp b/src/modules/signalprocessing/RampLimitFS_fbt.cpp new file mode 100644 index 000000000..2b65db3bf --- /dev/null +++ b/src/modules/signalprocessing/RampLimitFS_fbt.cpp @@ -0,0 +1,256 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: RampLimitFS + *** Description: Setpoint Ramp: Step up and down Values with Fast and Slow mode + *** Version: + *** 1.0: 2024-09-20/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-10-02/Franz Höpfinger - HR Agrartechnik GmbH - Rename to RampLimitFS + *************************************************************************/ + +#include "RampLimitFS_fbt.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "RampLimitFS_fbt_gen.cpp" +#endif + +#include "forte_any_elementary_variant.h" +#include "forte_any_num_variant.h" +#include "forte_dint.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_signalprocessing__RampLimitFS, g_nStringIdsignalprocessing__RampLimitFS) + +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmDataInputNames[] = {g_nStringIdPV, g_nStringIdVAL_ZERO, g_nStringIdSLOW, g_nStringIdFAST, g_nStringIdVAL_FULL}; +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmDataInputTypeIds[] = {g_nStringIdDINT, g_nStringIdDINT, g_nStringIdDINT, g_nStringIdDINT, g_nStringIdDINT}; +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmDataOutputNames[] = {g_nStringIdOUT}; +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmDataOutputTypeIds[] = {g_nStringIdDINT}; +const TDataIOID FORTE_signalprocessing__RampLimitFS::scmEIWith[] = {1, scmWithListDelimiter, 2, scmWithListDelimiter, 3, scmWithListDelimiter, 2, scmWithListDelimiter, 3, scmWithListDelimiter, 4, scmWithListDelimiter, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__RampLimitFS::scmEIWithIndexes[] = {0, 2, 4, 6, 8, 10, 12}; +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmEventInputNames[] = {g_nStringIdZERO, g_nStringIdUP_SLOW, g_nStringIdUP_FAST, g_nStringIdDOWN_SLOW, g_nStringIdDOWN_FAST, g_nStringIdFULL, g_nStringIdLOAD}; +const TDataIOID FORTE_signalprocessing__RampLimitFS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__RampLimitFS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_signalprocessing__RampLimitFS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_signalprocessing__RampLimitFS::scmFBInterfaceSpec = { + 7, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 5, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_signalprocessing__RampLimitFS::FORTE_signalprocessing__RampLimitFS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CSimpleFB(paContainer, scmFBInterfaceSpec, paInstanceNameId, nullptr), + var_conn_OUT(var_OUT), + conn_CNF(this, 0), + conn_PV(nullptr), + conn_VAL_ZERO(nullptr), + conn_SLOW(nullptr), + conn_FAST(nullptr), + conn_VAL_FULL(nullptr), + conn_OUT(this, 0, &var_conn_OUT) { +} + +void FORTE_signalprocessing__RampLimitFS::setInitialValues() { + var_PV = 0_DINT; + var_VAL_ZERO = 0_DINT; + var_SLOW = 0_DINT; + var_FAST = 0_DINT; + var_VAL_FULL = 0_DINT; + var_OUT = 0_DINT; +} + +void FORTE_signalprocessing__RampLimitFS::executeEvent(const TEventID paEIID, CEventChainExecutionThread *const paECET) { + switch(paEIID) { + case scmEventZEROID: + alg_ZERO(); + break; + case scmEventUP_SLOWID: + alg_UP_SLOW(); + break; + case scmEventUP_FASTID: + alg_UP_FAST(); + break; + case scmEventDOWN_SLOWID: + alg_DOWN_SLOW(); + break; + case scmEventDOWN_FASTID: + alg_DOWN_FAST(); + break; + case scmEventFULLID: + alg_FULL(); + break; + case scmEventLOADID: + alg_LOAD(); + break; + default: + break; + } + sendOutputEvent(scmEventCNFID, paECET); +} + +void FORTE_signalprocessing__RampLimitFS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventZEROID: { + readData(1, var_VAL_ZERO, conn_VAL_ZERO); + break; + } + case scmEventUP_SLOWID: { + readData(2, var_SLOW, conn_SLOW); + break; + } + case scmEventUP_FASTID: { + readData(3, var_FAST, conn_FAST); + break; + } + case scmEventDOWN_SLOWID: { + readData(2, var_SLOW, conn_SLOW); + break; + } + case scmEventDOWN_FASTID: { + readData(3, var_FAST, conn_FAST); + break; + } + case scmEventFULLID: { + readData(4, var_VAL_FULL, conn_VAL_FULL); + break; + } + case scmEventLOADID: { + readData(0, var_PV, conn_PV); + break; + } + default: + break; + } +} + +void FORTE_signalprocessing__RampLimitFS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_OUT, conn_OUT); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_signalprocessing__RampLimitFS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_PV; + case 1: return &var_VAL_ZERO; + case 2: return &var_SLOW; + case 3: return &var_FAST; + case 4: return &var_VAL_FULL; + } + return nullptr; +} + +CIEC_ANY *FORTE_signalprocessing__RampLimitFS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_OUT; + } + return nullptr; +} + +CEventConnection *FORTE_signalprocessing__RampLimitFS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_signalprocessing__RampLimitFS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_PV; + case 1: return &conn_VAL_ZERO; + case 2: return &conn_SLOW; + case 3: return &conn_FAST; + case 4: return &conn_VAL_FULL; + } + return nullptr; +} + +CDataConnection *FORTE_signalprocessing__RampLimitFS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_OUT; + } + return nullptr; +} + +CIEC_ANY *FORTE_signalprocessing__RampLimitFS::getVarInternal(size_t) { + return nullptr; +} + +void FORTE_signalprocessing__RampLimitFS::alg_ZERO(void) { + + #line 2 "RampLimitFS.fbt" + var_OUT = var_VAL_ZERO; +} + +void FORTE_signalprocessing__RampLimitFS::alg_UP_SLOW(void) { + + #line 6 "RampLimitFS.fbt" + var_OUT = func_ADD(var_OUT, var_SLOW); + #line 7 "RampLimitFS.fbt" + if (func_GT(var_OUT, var_VAL_FULL)) { + #line 8 "RampLimitFS.fbt" + var_OUT = var_VAL_FULL; + } +} + +void FORTE_signalprocessing__RampLimitFS::alg_UP_FAST(void) { + + #line 13 "RampLimitFS.fbt" + var_OUT = func_ADD(var_OUT, var_FAST); + #line 14 "RampLimitFS.fbt" + if (func_GT(var_OUT, var_VAL_FULL)) { + #line 15 "RampLimitFS.fbt" + var_OUT = var_VAL_FULL; + } +} + +void FORTE_signalprocessing__RampLimitFS::alg_DOWN_SLOW(void) { + + #line 20 "RampLimitFS.fbt" + var_OUT = func_SUB(var_OUT, var_SLOW); + #line 21 "RampLimitFS.fbt" + if (func_LT(var_OUT, var_VAL_ZERO)) { + #line 22 "RampLimitFS.fbt" + var_OUT = var_VAL_ZERO; + } +} + +void FORTE_signalprocessing__RampLimitFS::alg_DOWN_FAST(void) { + + #line 27 "RampLimitFS.fbt" + var_OUT = func_SUB(var_OUT, var_FAST); + #line 28 "RampLimitFS.fbt" + if (func_LT(var_OUT, var_VAL_ZERO)) { + #line 29 "RampLimitFS.fbt" + var_OUT = var_VAL_ZERO; + } +} + +void FORTE_signalprocessing__RampLimitFS::alg_FULL(void) { + + #line 34 "RampLimitFS.fbt" + var_OUT = var_VAL_FULL; +} + +void FORTE_signalprocessing__RampLimitFS::alg_LOAD(void) { + + #line 38 "RampLimitFS.fbt" + var_OUT = var_PV; +} diff --git a/src/modules/signalprocessing/RampLimitFS_fbt.h b/src/modules/signalprocessing/RampLimitFS_fbt.h new file mode 100644 index 000000000..ecde803cf --- /dev/null +++ b/src/modules/signalprocessing/RampLimitFS_fbt.h @@ -0,0 +1,172 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: RampLimitFS + *** Description: Setpoint Ramp: Step up and down Values with Fast and Slow mode + *** Version: + *** 1.0: 2024-09-20/Franz Höpfinger - HR Agrartechnik GmbH - + *** 1.1: 2024-10-02/Franz Höpfinger - HR Agrartechnik GmbH - Rename to RampLimitFS + *************************************************************************/ + +#pragma once + +#include "simplefb.h" +#include "forte_dint.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_signalprocessing__RampLimitFS final : public CSimpleFB { + DECLARE_FIRMWARE_FB(FORTE_signalprocessing__RampLimitFS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventZEROID = 0; + static const TEventID scmEventUP_SLOWID = 1; + static const TEventID scmEventUP_FASTID = 2; + static const TEventID scmEventDOWN_SLOWID = 3; + static const TEventID scmEventDOWN_FASTID = 4; + static const TEventID scmEventFULLID = 5; + static const TEventID scmEventLOADID = 6; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + CIEC_ANY *getVarInternal(size_t) override; + + void alg_ZERO(void); + void alg_UP_SLOW(void); + void alg_UP_FAST(void); + void alg_DOWN_SLOW(void); + void alg_DOWN_FAST(void); + void alg_FULL(void); + void alg_LOAD(void); + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_signalprocessing__RampLimitFS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_DINT var_PV; + CIEC_DINT var_VAL_ZERO; + CIEC_DINT var_SLOW; + CIEC_DINT var_FAST; + CIEC_DINT var_VAL_FULL; + + CIEC_DINT var_OUT; + + CIEC_DINT var_conn_OUT; + + CEventConnection conn_CNF; + + CDataConnection *conn_PV; + CDataConnection *conn_VAL_ZERO; + CDataConnection *conn_SLOW; + CDataConnection *conn_FAST; + CDataConnection *conn_VAL_FULL; + + CDataConnection conn_OUT; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_ZERO(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventZEROID, nullptr); + paOUT = var_OUT; + } + + void evt_UP_SLOW(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventUP_SLOWID, nullptr); + paOUT = var_OUT; + } + + void evt_UP_FAST(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventUP_FASTID, nullptr); + paOUT = var_OUT; + } + + void evt_DOWN_SLOW(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventDOWN_SLOWID, nullptr); + paOUT = var_OUT; + } + + void evt_DOWN_FAST(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventDOWN_FASTID, nullptr); + paOUT = var_OUT; + } + + void evt_FULL(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventFULLID, nullptr); + paOUT = var_OUT; + } + + void evt_LOAD(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + var_PV = paPV; + var_VAL_ZERO = paVAL_ZERO; + var_SLOW = paSLOW; + var_FAST = paFAST; + var_VAL_FULL = paVAL_FULL; + executeEvent(scmEventLOADID, nullptr); + paOUT = var_OUT; + } + + void operator()(const CIEC_DINT &paPV, const CIEC_DINT &paVAL_ZERO, const CIEC_DINT &paSLOW, const CIEC_DINT &paFAST, const CIEC_DINT &paVAL_FULL, CIEC_DINT &paOUT) { + evt_ZERO(paPV, paVAL_ZERO, paSLOW, paFAST, paVAL_FULL, paOUT); + } +}; + diff --git a/src/modules/signalprocessing/SCALE_LIM_fct.cpp b/src/modules/signalprocessing/SCALE_LIM_fct.cpp new file mode 100644 index 000000000..dc954bf99 --- /dev/null +++ b/src/modules/signalprocessing/SCALE_LIM_fct.cpp @@ -0,0 +1,184 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SCALE_LIM + *** Description: Scaling Function Block with limits + *** Version: + *** 1.0: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - + *************************************************************************/ + +#include "SCALE_LIM_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SCALE_LIM_fct_gen.cpp" +#endif + +#include "forte_real.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "SCALE_LIM_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_signalprocessing__SCALE_LIM, g_nStringIdsignalprocessing__SCALE_LIM) + +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmDataInputNames[] = {g_nStringIdIN, g_nStringIdMAX_IN, g_nStringIdMIN_IN, g_nStringIdMAX_IN_LIM, g_nStringIdMIN_IN_LIM, g_nStringIdMAX_OUT, g_nStringIdMIN_OUT, g_nStringIdMAX_OUT_FIX, g_nStringIdMIN_OUT_FIX}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmDataInputTypeIds[] = {g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmDataOutputTypeIds[] = {g_nStringIdREAL}; +const TDataIOID FORTE_signalprocessing__SCALE_LIM::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__SCALE_LIM::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_signalprocessing__SCALE_LIM::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__SCALE_LIM::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE_LIM::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_signalprocessing__SCALE_LIM::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 9, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_signalprocessing__SCALE_LIM::FORTE_signalprocessing__SCALE_LIM(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_MAX_IN(nullptr), + conn_MIN_IN(nullptr), + conn_MAX_IN_LIM(nullptr), + conn_MIN_IN_LIM(nullptr), + conn_MAX_OUT(nullptr), + conn_MIN_OUT(nullptr), + conn_MAX_OUT_FIX(nullptr), + conn_MIN_OUT_FIX(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_signalprocessing__SCALE_LIM::setInitialValues() { + var_IN = 0_REAL; + var_MAX_IN = 0_REAL; + var_MIN_IN = 0_REAL; + var_MAX_IN_LIM = 0_REAL; + var_MIN_IN_LIM = 0_REAL; + var_MAX_OUT = 0_REAL; + var_MIN_OUT = 0_REAL; + var_MAX_OUT_FIX = 0_REAL; + var_MIN_OUT_FIX = 0_REAL; + var_ = 0_REAL; +} + +void FORTE_signalprocessing__SCALE_LIM::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + readData(1, var_MAX_IN, conn_MAX_IN); + readData(2, var_MIN_IN, conn_MIN_IN); + readData(3, var_MAX_IN_LIM, conn_MAX_IN_LIM); + readData(4, var_MIN_IN_LIM, conn_MIN_IN_LIM); + readData(5, var_MAX_OUT, conn_MAX_OUT); + readData(6, var_MIN_OUT, conn_MIN_OUT); + readData(7, var_MAX_OUT_FIX, conn_MAX_OUT_FIX); + readData(8, var_MIN_OUT_FIX, conn_MIN_OUT_FIX); + break; + } + default: + break; + } +} + +void FORTE_signalprocessing__SCALE_LIM::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_signalprocessing__SCALE_LIM::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + case 1: return &var_MAX_IN; + case 2: return &var_MIN_IN; + case 3: return &var_MAX_IN_LIM; + case 4: return &var_MIN_IN_LIM; + case 5: return &var_MAX_OUT; + case 6: return &var_MIN_OUT; + case 7: return &var_MAX_OUT_FIX; + case 8: return &var_MIN_OUT_FIX; + } + return nullptr; +} + +CIEC_ANY *FORTE_signalprocessing__SCALE_LIM::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_signalprocessing__SCALE_LIM::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_signalprocessing__SCALE_LIM::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + case 1: return &conn_MAX_IN; + case 2: return &conn_MIN_IN; + case 3: return &conn_MAX_IN_LIM; + case 4: return &conn_MIN_IN_LIM; + case 5: return &conn_MAX_OUT; + case 6: return &conn_MIN_OUT; + case 7: return &conn_MAX_OUT_FIX; + case 8: return &conn_MIN_OUT_FIX; + } + return nullptr; +} + +CDataConnection *FORTE_signalprocessing__SCALE_LIM::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_signalprocessing__SCALE_LIM::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_SCALE_LIM(var_IN, var_MAX_IN, var_MIN_IN, var_MAX_IN_LIM, var_MIN_IN_LIM, var_MAX_OUT, var_MIN_OUT, var_MAX_OUT_FIX, var_MIN_OUT_FIX); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_REAL func_SCALE_LIM(CIEC_REAL st_lv_IN, CIEC_REAL st_lv_MAX_IN, CIEC_REAL st_lv_MIN_IN, CIEC_REAL st_lv_MAX_IN_LIM, CIEC_REAL st_lv_MIN_IN_LIM, CIEC_REAL st_lv_MAX_OUT, CIEC_REAL st_lv_MIN_OUT, CIEC_REAL st_lv_MAX_OUT_FIX, CIEC_REAL st_lv_MIN_OUT_FIX) { + CIEC_REAL st_ret_val = 0_REAL; + + #line 17 "SCALE_LIM.fct" + if (func_LT(st_lv_IN, st_lv_MIN_IN_LIM)) { + #line 18 "SCALE_LIM.fct" + st_ret_val = st_lv_MIN_OUT_FIX; + } + else if (func_GT(st_lv_IN, st_lv_MAX_IN_LIM)) { + #line 20 "SCALE_LIM.fct" + st_ret_val = st_lv_MAX_OUT_FIX; + } + else { + #line 22 "SCALE_LIM.fct" + st_ret_val = func_ADD(func_DIV(func_MUL(func_SUB(st_lv_IN, st_lv_MIN_IN), func_SUB(st_lv_MAX_OUT, st_lv_MIN_OUT)), func_SUB(st_lv_MAX_IN, st_lv_MIN_IN)), st_lv_MIN_OUT); + } + + return st_ret_val; +} diff --git a/src/modules/signalprocessing/SCALE_LIM_fct.h b/src/modules/signalprocessing/SCALE_LIM_fct.h new file mode 100644 index 000000000..00d8caf5b --- /dev/null +++ b/src/modules/signalprocessing/SCALE_LIM_fct.h @@ -0,0 +1,109 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SCALE_LIM + *** Description: Scaling Function Block with limits + *** Version: + *** 1.0: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_real.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_signalprocessing__SCALE_LIM final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_signalprocessing__SCALE_LIM) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_signalprocessing__SCALE_LIM(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_REAL var_IN; + CIEC_REAL var_MAX_IN; + CIEC_REAL var_MIN_IN; + CIEC_REAL var_MAX_IN_LIM; + CIEC_REAL var_MIN_IN_LIM; + CIEC_REAL var_MAX_OUT; + CIEC_REAL var_MIN_OUT; + CIEC_REAL var_MAX_OUT_FIX; + CIEC_REAL var_MIN_OUT_FIX; + + CIEC_REAL var_; + + CIEC_REAL var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + CDataConnection *conn_MAX_IN; + CDataConnection *conn_MIN_IN; + CDataConnection *conn_MAX_IN_LIM; + CDataConnection *conn_MIN_IN_LIM; + CDataConnection *conn_MAX_OUT; + CDataConnection *conn_MIN_OUT; + CDataConnection *conn_MAX_OUT_FIX; + CDataConnection *conn_MIN_OUT_FIX; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_REAL &paIN, const CIEC_REAL &paMAX_IN, const CIEC_REAL &paMIN_IN, const CIEC_REAL &paMAX_IN_LIM, const CIEC_REAL &paMIN_IN_LIM, const CIEC_REAL &paMAX_OUT, const CIEC_REAL &paMIN_OUT, const CIEC_REAL &paMAX_OUT_FIX, const CIEC_REAL &paMIN_OUT_FIX, CIEC_REAL &pa) { + var_IN = paIN; + var_MAX_IN = paMAX_IN; + var_MIN_IN = paMIN_IN; + var_MAX_IN_LIM = paMAX_IN_LIM; + var_MIN_IN_LIM = paMIN_IN_LIM; + var_MAX_OUT = paMAX_OUT; + var_MIN_OUT = paMIN_OUT; + var_MAX_OUT_FIX = paMAX_OUT_FIX; + var_MIN_OUT_FIX = paMIN_OUT_FIX; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_REAL &paIN, const CIEC_REAL &paMAX_IN, const CIEC_REAL &paMIN_IN, const CIEC_REAL &paMAX_IN_LIM, const CIEC_REAL &paMIN_IN_LIM, const CIEC_REAL &paMAX_OUT, const CIEC_REAL &paMIN_OUT, const CIEC_REAL &paMAX_OUT_FIX, const CIEC_REAL &paMIN_OUT_FIX, CIEC_REAL &pa) { + evt_REQ(paIN, paMAX_IN, paMIN_IN, paMAX_IN_LIM, paMIN_IN_LIM, paMAX_OUT, paMIN_OUT, paMAX_OUT_FIX, paMIN_OUT_FIX, pa); + } +}; + +CIEC_REAL func_SCALE_LIM(CIEC_REAL st_lv_IN, CIEC_REAL st_lv_MAX_IN, CIEC_REAL st_lv_MIN_IN, CIEC_REAL st_lv_MAX_IN_LIM, CIEC_REAL st_lv_MIN_IN_LIM, CIEC_REAL st_lv_MAX_OUT, CIEC_REAL st_lv_MIN_OUT, CIEC_REAL st_lv_MAX_OUT_FIX, CIEC_REAL st_lv_MIN_OUT_FIX); + diff --git a/src/modules/signalprocessing/SCALE_fct.cpp b/src/modules/signalprocessing/SCALE_fct.cpp new file mode 100644 index 000000000..de54a31ce --- /dev/null +++ b/src/modules/signalprocessing/SCALE_fct.cpp @@ -0,0 +1,153 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SCALE + *** Description: Scaling Function Block + *** Version: + *** 1.0: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - + *************************************************************************/ + +#include "SCALE_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SCALE_fct_gen.cpp" +#endif + +#include "forte_real.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "SCALE_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_signalprocessing__SCALE, g_nStringIdsignalprocessing__SCALE) + +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmDataInputNames[] = {g_nStringIdIN, g_nStringIdMAX_IN, g_nStringIdMIN_IN, g_nStringIdMAX_OUT, g_nStringIdMIN_OUT}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmDataInputTypeIds[] = {g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL, g_nStringIdREAL}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmDataOutputTypeIds[] = {g_nStringIdREAL}; +const TDataIOID FORTE_signalprocessing__SCALE::scmEIWith[] = {0, 1, 2, 3, 4, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__SCALE::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_signalprocessing__SCALE::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_signalprocessing__SCALE::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_signalprocessing__SCALE::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_signalprocessing__SCALE::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 5, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_signalprocessing__SCALE::FORTE_signalprocessing__SCALE(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_MAX_IN(nullptr), + conn_MIN_IN(nullptr), + conn_MAX_OUT(nullptr), + conn_MIN_OUT(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_signalprocessing__SCALE::setInitialValues() { + var_IN = 0_REAL; + var_MAX_IN = 0_REAL; + var_MIN_IN = 0_REAL; + var_MAX_OUT = 0_REAL; + var_MIN_OUT = 0_REAL; + var_ = 0_REAL; +} + +void FORTE_signalprocessing__SCALE::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + readData(1, var_MAX_IN, conn_MAX_IN); + readData(2, var_MIN_IN, conn_MIN_IN); + readData(3, var_MAX_OUT, conn_MAX_OUT); + readData(4, var_MIN_OUT, conn_MIN_OUT); + break; + } + default: + break; + } +} + +void FORTE_signalprocessing__SCALE::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_signalprocessing__SCALE::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + case 1: return &var_MAX_IN; + case 2: return &var_MIN_IN; + case 3: return &var_MAX_OUT; + case 4: return &var_MIN_OUT; + } + return nullptr; +} + +CIEC_ANY *FORTE_signalprocessing__SCALE::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_signalprocessing__SCALE::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_signalprocessing__SCALE::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + case 1: return &conn_MAX_IN; + case 2: return &conn_MIN_IN; + case 3: return &conn_MAX_OUT; + case 4: return &conn_MIN_OUT; + } + return nullptr; +} + +CDataConnection *FORTE_signalprocessing__SCALE::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_signalprocessing__SCALE::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_SCALE(var_IN, var_MAX_IN, var_MIN_IN, var_MAX_OUT, var_MIN_OUT); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_REAL func_SCALE(CIEC_REAL st_lv_IN, CIEC_REAL st_lv_MAX_IN, CIEC_REAL st_lv_MIN_IN, CIEC_REAL st_lv_MAX_OUT, CIEC_REAL st_lv_MIN_OUT) { + CIEC_REAL st_ret_val = 0_REAL; + + #line 13 "SCALE.fct" + st_ret_val = func_ADD(func_DIV(func_MUL(func_SUB(st_lv_IN, st_lv_MIN_IN), func_SUB(st_lv_MAX_OUT, st_lv_MIN_OUT)), func_SUB(st_lv_MAX_IN, st_lv_MIN_IN)), st_lv_MIN_OUT); + + return st_ret_val; +} diff --git a/src/modules/signalprocessing/SCALE_fct.h b/src/modules/signalprocessing/SCALE_fct.h new file mode 100644 index 000000000..b44d5488d --- /dev/null +++ b/src/modules/signalprocessing/SCALE_fct.h @@ -0,0 +1,97 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SCALE + *** Description: Scaling Function Block + *** Version: + *** 1.0: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_real.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_signalprocessing__SCALE final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_signalprocessing__SCALE) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_signalprocessing__SCALE(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_REAL var_IN; + CIEC_REAL var_MAX_IN; + CIEC_REAL var_MIN_IN; + CIEC_REAL var_MAX_OUT; + CIEC_REAL var_MIN_OUT; + + CIEC_REAL var_; + + CIEC_REAL var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + CDataConnection *conn_MAX_IN; + CDataConnection *conn_MIN_IN; + CDataConnection *conn_MAX_OUT; + CDataConnection *conn_MIN_OUT; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_REAL &paIN, const CIEC_REAL &paMAX_IN, const CIEC_REAL &paMIN_IN, const CIEC_REAL &paMAX_OUT, const CIEC_REAL &paMIN_OUT, CIEC_REAL &pa) { + var_IN = paIN; + var_MAX_IN = paMAX_IN; + var_MIN_IN = paMIN_IN; + var_MAX_OUT = paMAX_OUT; + var_MIN_OUT = paMIN_OUT; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_REAL &paIN, const CIEC_REAL &paMAX_IN, const CIEC_REAL &paMIN_IN, const CIEC_REAL &paMAX_OUT, const CIEC_REAL &paMIN_OUT, CIEC_REAL &pa) { + evt_REQ(paIN, paMAX_IN, paMIN_IN, paMAX_OUT, paMIN_OUT, pa); + } +}; + +CIEC_REAL func_SCALE(CIEC_REAL st_lv_IN, CIEC_REAL st_lv_MAX_IN, CIEC_REAL st_lv_MIN_IN, CIEC_REAL st_lv_MAX_OUT, CIEC_REAL st_lv_MIN_OUT); + diff --git a/src/modules/utils/E_STOPWATCH_fbt.cpp b/src/modules/utils/E_STOPWATCH_fbt.cpp index 7a1648dad..1ef887200 100644 --- a/src/modules/utils/E_STOPWATCH_fbt.cpp +++ b/src/modules/utils/E_STOPWATCH_fbt.cpp @@ -1,28 +1,29 @@ /******************************************************************************* - * Copyright (c) 2018 fortiss GmbH - * 2020 Johannes Kepler University Linz + * Copyright (c) 2018, 2024 fortiss GmbH, Johannes Kepler University Linz, HR Agrartechnik 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: - * Ben Schneider - initial API and implementation and/or initial documentation - * Alois Zoitl - Changed to a full basic FB implementation utilizing the new - * NOW_MONOTONIC function - *******************************************************************************/ + + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: E_STOPWATCH + *** Description: FB for stopping time between events + *** Version: + *** 1.0: 2018-08-29/Ben Schneider - fortiss GmbH - initial API and implementation and/or initial documentation + *** 1.1: 2020-05-24/alois Zoitl - Johannes Kepler University Linz - Changed to a full basic FB implementation utilizing the new NOW_MONOTONIC function + *** 1.2: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Added additional Events + *************************************************************************/ #include "E_STOPWATCH_fbt.h" #ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP #include "E_STOPWATCH_fbt_gen.cpp" #endif -#include "criticalregion.h" -#include "resource.h" -#include "forte_time.h" #include "forte_bool.h" +#include "forte_time.h" #include "iec61131_functions.h" #include "forte_array_common.h" #include "forte_array.h" @@ -33,14 +34,14 @@ DEFINE_FIRMWARE_FB(FORTE_E_STOPWATCH, g_nStringIdE_STOPWATCH) const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmDataOutputNames[] = {g_nStringIdTD}; const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmDataOutputTypeIds[] = {g_nStringIdTIME}; -const TForteInt16 FORTE_E_STOPWATCH::scmEIWithIndexes[] = {-1, -1}; -const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmEventInputNames[] = {g_nStringIdSTART, g_nStringIdSTOP}; -const TDataIOID FORTE_E_STOPWATCH::scmEOWith[] = {0, scmWithListDelimiter}; -const TForteInt16 FORTE_E_STOPWATCH::scmEOWithIndexes[] = {0}; -const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmEventOutputNames[] = {g_nStringIdEO}; +const TForteInt16 FORTE_E_STOPWATCH::scmEIWithIndexes[] = {-1, -1, -1, -1}; +const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmEventInputNames[] = {g_nStringIdSTART, g_nStringIdET, g_nStringIdSTOP, g_nStringIdRESET}; +const TDataIOID FORTE_E_STOPWATCH::scmEOWith[] = {0, scmWithListDelimiter, 0, scmWithListDelimiter, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_E_STOPWATCH::scmEOWithIndexes[] = {0, 2, 4}; +const CStringDictionary::TStringId FORTE_E_STOPWATCH::scmEventOutputNames[] = {g_nStringIdEO, g_nStringIdETO, g_nStringIdRESETO}; const SFBInterfaceSpec FORTE_E_STOPWATCH::scmFBInterfaceSpec = { - 2, scmEventInputNames, nullptr, scmEIWithIndexes, - 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 4, scmEventInputNames, nullptr, scmEIWithIndexes, + 3, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 0, nullptr, nullptr, 1, scmDataOutputNames, scmDataOutputTypeIds, 0, nullptr, @@ -55,6 +56,8 @@ FORTE_E_STOPWATCH::FORTE_E_STOPWATCH(const CStringDictionary::TStringId paInstan CBasicFB(paContainer, scmFBInterfaceSpec, paInstanceNameId, &scmInternalVars), var_conn_TD(var_TD), conn_EO(this, 0), + conn_ETO(this, 1), + conn_RESETO(this, 2), conn_TD(this, 0, &var_conn_TD) { } @@ -68,18 +71,36 @@ void FORTE_E_STOPWATCH::executeEvent(TEventID paEIID, CEventChainExecutionThread switch(mECCState) { case scmStateSTART: if(scmEventSTARTID == paEIID) enterStateMeasure(paECET); + else + if(scmEventRESETID == paEIID) enterStateRESET(paECET); else return; //no transition cleared break; case scmStateMeasure: if(scmEventSTOPID == paEIID) enterStateSTOP(paECET); + else + if(scmEventETID == paEIID) enterStateTrig(paECET); + else + if(scmEventRESETID == paEIID) enterStateRESET(paECET); else return; //no transition cleared break; case scmStateSTOP: if(1) enterStateSTART(paECET); else return; //no transition cleared break; + case scmStateTrig: + if(scmEventSTOPID == paEIID) enterStateSTOP(paECET); + else + if(scmEventETID == paEIID) enterStateTrig(paECET); + else + if(scmEventRESETID == paEIID) enterStateRESET(paECET); + else return; //no transition cleared + break; + case scmStateRESET: + if(1) enterStateSTART(paECET); + else return; //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: 3.", mECCState.operator TForteUInt16 ()); + DEVLOG_ERROR("The state is not in the valid range! The state value is: %d. The max value can be: 5.", mECCState.operator TForteUInt16 ()); mECCState = 0; // 0 is always the initial state return; } @@ -102,6 +123,18 @@ void FORTE_E_STOPWATCH::enterStateSTOP(CEventChainExecutionThread *const paECET) sendOutputEvent(scmEventEOID, paECET); } +void FORTE_E_STOPWATCH::enterStateTrig(CEventChainExecutionThread *const paECET) { + mECCState = scmStateTrig; + alg_calcDiff(); + sendOutputEvent(scmEventETOID, paECET); +} + +void FORTE_E_STOPWATCH::enterStateRESET(CEventChainExecutionThread *const paECET) { + mECCState = scmStateRESET; + alg_reset(); + sendOutputEvent(scmEventRESETOID, paECET); +} + void FORTE_E_STOPWATCH::readInputData(TEventID) { // nothing to do } @@ -112,6 +145,14 @@ void FORTE_E_STOPWATCH::writeOutputData(const TEventID paEIID) { writeData(0, var_TD, conn_TD); break; } + case scmEventETOID: { + writeData(0, var_TD, conn_TD); + break; + } + case scmEventRESETOID: { + writeData(0, var_TD, conn_TD); + break; + } default: break; } @@ -128,13 +169,11 @@ CIEC_ANY *FORTE_E_STOPWATCH::getDO(const size_t paIndex) { return nullptr; } -CIEC_ANY *FORTE_E_STOPWATCH::getDIO(size_t) { - return nullptr; -} - CEventConnection *FORTE_E_STOPWATCH::getEOConUnchecked(const TPortId paIndex) { switch(paIndex) { case 0: return &conn_EO; + case 1: return &conn_ETO; + case 2: return &conn_RESETO; } return nullptr; } @@ -150,14 +189,6 @@ CDataConnection *FORTE_E_STOPWATCH::getDOConUnchecked(const TPortId paIndex) { return nullptr; } -CInOutDataConnection **FORTE_E_STOPWATCH::getDIOInConUnchecked(TPortId) { - return nullptr; -} - -CInOutDataConnection *FORTE_E_STOPWATCH::getDIOOutConUnchecked(TPortId) { - return nullptr; -} - CIEC_ANY *FORTE_E_STOPWATCH::getVarInternal(const size_t paIndex) { switch(paIndex) { case 0: return &var_startTime; @@ -177,3 +208,8 @@ void FORTE_E_STOPWATCH::alg_calcDiff(void) { var_TD = func_SUB(func_NOW_MONOTONIC(), var_startTime); } +void FORTE_E_STOPWATCH::alg_reset(void) { + + #line 10 "E_STOPWATCH.fbt" + var_TD = 0_TIME; +} diff --git a/src/modules/utils/E_STOPWATCH_fbt.h b/src/modules/utils/E_STOPWATCH_fbt.h index 4523e3a49..787a4a900 100644 --- a/src/modules/utils/E_STOPWATCH_fbt.h +++ b/src/modules/utils/E_STOPWATCH_fbt.h @@ -1,18 +1,21 @@ /******************************************************************************* - * Copyright (c) 2018 fortiss GmbH - * 2020 Johannes Kepler University Linz + * Copyright (c) 2018, 2024 fortiss GmbH, Johannes Kepler University Linz, HR Agrartechnik 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: - * Ben Schneider - initial API and implementation and/or initial documentation - * Alois Zoitl - Changed to a full basic FB implementation utilizing the new - * NOW_MONOTONIC function - *******************************************************************************/ + + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: E_STOPWATCH + *** Description: FB for stopping time between events + *** Version: + *** 1.0: 2018-08-29/Ben Schneider - fortiss GmbH - initial API and implementation and/or initial documentation + *** 1.1: 2020-05-24/alois Zoitl - Johannes Kepler University Linz - Changed to a full basic FB implementation utilizing the new NOW_MONOTONIC function + *** 1.2: 2024-09-19/Franz Höpfinger - HR Agrartechnik GmbH - Added additional Events + *************************************************************************/ #pragma once @@ -24,82 +27,98 @@ #include "forte_array_fixed.h" #include "forte_array_variable.h" - class FORTE_E_STOPWATCH final : public CBasicFB { DECLARE_FIRMWARE_FB(FORTE_E_STOPWATCH) -private: - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - static const TEventID scmEventSTARTID = 0; - static const TEventID scmEventSTOPID = 1; - static const TForteInt16 scmEIWithIndexes[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - static const TEventID scmEventEOID = 0; - static const TDataIOID scmEOWith[]; - static const TForteInt16 scmEOWithIndexes[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SFBInterfaceSpec scmFBInterfaceSpec; - - static const CStringDictionary::TStringId scmInternalsNames[]; - static const CStringDictionary::TStringId scmInternalsTypeIds[]; - static const SInternalVarsInformation scmInternalVars; - - CIEC_TIME var_startTime; - - CIEC_ANY *getVarInternal(size_t) override; - - void alg_captureStartTime(void); - void alg_calcDiff(void); - - static const TForteInt16 scmStateSTART = 0; - static const TForteInt16 scmStateMeasure = 1; - static const TForteInt16 scmStateSTOP = 2; - - void enterStateSTART(CEventChainExecutionThread *const paECET); - void enterStateMeasure(CEventChainExecutionThread *const paECET); - void enterStateSTOP(CEventChainExecutionThread *const paECET); - - void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; - - void readInputData(TEventID paEIID) override; - void writeOutputData(TEventID paEIID) override; - void setInitialValues() override; - -public: - FORTE_E_STOPWATCH(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - - CIEC_TIME var_TD; - - CIEC_TIME var_conn_TD; - - CEventConnection conn_EO; - - CDataConnection conn_TD; - - CIEC_ANY *getDI(size_t) override; - CIEC_ANY *getDO(size_t) override; - CIEC_ANY *getDIO(size_t) override; - CEventConnection *getEOConUnchecked(TPortId) override; - CDataConnection **getDIConUnchecked(TPortId) override; - CDataConnection *getDOConUnchecked(TPortId) override; - CInOutDataConnection **getDIOInConUnchecked(TPortId) override; - CInOutDataConnection *getDIOOutConUnchecked(TPortId) override; - - void evt_START(CIEC_TIME &paTD) { - receiveInputEvent(scmEventSTARTID, nullptr); - paTD = var_TD; - } - - void evt_STOP(CIEC_TIME &paTD) { - receiveInputEvent(scmEventSTOPID, nullptr); - paTD = var_TD; - } - - void operator()(CIEC_TIME &paTD) { - evt_START(paTD); - } + private: + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventSTARTID = 0; + static const TEventID scmEventETID = 1; + static const TEventID scmEventSTOPID = 2; + static const TEventID scmEventRESETID = 3; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventEOID = 0; + static const TEventID scmEventETOID = 1; + static const TEventID scmEventRESETOID = 2; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + static const CStringDictionary::TStringId scmInternalsNames[]; + static const CStringDictionary::TStringId scmInternalsTypeIds[]; + static const SInternalVarsInformation scmInternalVars; + + CIEC_TIME var_startTime; + + CIEC_ANY *getVarInternal(size_t) override; + + void alg_captureStartTime(void); + void alg_calcDiff(void); + void alg_reset(void); + + static const TForteInt16 scmStateSTART = 0; + static const TForteInt16 scmStateMeasure = 1; + static const TForteInt16 scmStateSTOP = 2; + static const TForteInt16 scmStateTrig = 3; + static const TForteInt16 scmStateRESET = 4; + + void enterStateSTART(CEventChainExecutionThread *const paECET); + void enterStateMeasure(CEventChainExecutionThread *const paECET); + void enterStateSTOP(CEventChainExecutionThread *const paECET); + void enterStateTrig(CEventChainExecutionThread *const paECET); + void enterStateRESET(CEventChainExecutionThread *const paECET); + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_E_STOPWATCH(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_TIME var_TD; + + CIEC_TIME var_conn_TD; + + CEventConnection conn_EO; + CEventConnection conn_ETO; + CEventConnection conn_RESETO; + + CDataConnection conn_TD; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_START(CIEC_TIME &paTD) { + executeEvent(scmEventSTARTID, nullptr); + paTD = var_TD; + } + + void evt_ET(CIEC_TIME &paTD) { + executeEvent(scmEventETID, nullptr); + paTD = var_TD; + } + + void evt_STOP(CIEC_TIME &paTD) { + executeEvent(scmEventSTOPID, nullptr); + paTD = var_TD; + } + + void evt_RESET(CIEC_TIME &paTD) { + executeEvent(scmEventRESETID, nullptr); + paTD = var_TD; + } + + void operator()(CIEC_TIME &paTD) { + evt_START(paTD); + } }; - diff --git a/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.cpp new file mode 100644 index 000000000..cec30b988 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.cpp @@ -0,0 +1,189 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_BYTE_FROM_BOOLS + *** Description: this Function combines the 8 BOOLS to a BYTE + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_BYTE_FROM_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_BYTE_FROM_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_BYTE_FROM_BOOLS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_BYTE_FROM_BOOLS, g_nStringIdASSEMBLE_BYTE_FROM_BOOLS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmDataInputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdBYTE}; +const TDataIOID FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_BYTE_FROM_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 8, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_BYTE_FROM_BOOLS::FORTE_ASSEMBLE_BYTE_FROM_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BIT_00(nullptr), + conn_BIT_01(nullptr), + conn_BIT_02(nullptr), + conn_BIT_03(nullptr), + conn_BIT_04(nullptr), + conn_BIT_05(nullptr), + conn_BIT_06(nullptr), + conn_BIT_07(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_BYTE_FROM_BOOLS::setInitialValues() { + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_ = 0_BYTE; +} + +void FORTE_ASSEMBLE_BYTE_FROM_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BIT_00, conn_BIT_00); + readData(1, var_BIT_01, conn_BIT_01); + readData(2, var_BIT_02, conn_BIT_02); + readData(3, var_BIT_03, conn_BIT_03); + readData(4, var_BIT_04, conn_BIT_04); + readData(5, var_BIT_05, conn_BIT_05); + readData(6, var_BIT_06, conn_BIT_06); + readData(7, var_BIT_07, conn_BIT_07); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_BYTE_FROM_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_BYTE_FROM_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_BYTE_FROM_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_BYTE_FROM_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_BYTE_FROM_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_BYTE_FROM_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_BYTE_FROM_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_BYTE_FROM_BOOLS(var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_BYTE func_ASSEMBLE_BYTE_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07) { + CIEC_BYTE st_ret_val = 0_BYTE; + + #line 15 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(0) = st_lv_BIT_00; + #line 16 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(1) = st_lv_BIT_01; + #line 17 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(2) = st_lv_BIT_02; + #line 18 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(3) = st_lv_BIT_03; + #line 19 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(4) = st_lv_BIT_04; + #line 20 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(5) = st_lv_BIT_05; + #line 21 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(6) = st_lv_BIT_06; + #line 22 "ASSEMBLE_BYTE_FROM_BOOLS.fct" + st_ret_val.partial(7) = st_lv_BIT_07; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.h b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.h new file mode 100644 index 000000000..2729d8ea7 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_BOOLS_fct.h @@ -0,0 +1,111 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_BYTE_FROM_BOOLS + *** Description: this Function combines the 8 BOOLS to a BYTE + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_BYTE_FROM_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_BYTE_FROM_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_BYTE_FROM_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + + CIEC_BYTE var_; + + CIEC_BYTE var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BIT_00; + CDataConnection *conn_BIT_01; + CDataConnection *conn_BIT_02; + CDataConnection *conn_BIT_03; + CDataConnection *conn_BIT_04; + CDataConnection *conn_BIT_05; + CDataConnection *conn_BIT_06; + CDataConnection *conn_BIT_07; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, CIEC_BYTE &pa) { + var_BIT_00 = paBIT_00; + var_BIT_01 = paBIT_01; + var_BIT_02 = paBIT_02; + var_BIT_03 = paBIT_03; + var_BIT_04 = paBIT_04; + var_BIT_05 = paBIT_05; + var_BIT_06 = paBIT_06; + var_BIT_07 = paBIT_07; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, CIEC_BYTE &pa) { + evt_REQ(paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, pa); + } +}; + +CIEC_BYTE func_ASSEMBLE_BYTE_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.cpp new file mode 100644 index 000000000..d824e0512 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.cpp @@ -0,0 +1,165 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_BYTE_FROM_QUARTERS + *** Description: this Function combines the 4 QUARTER BYTES to a BYTE + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#include "ASSEMBLE_BYTE_FROM_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_BYTE_FROM_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_any_int_variant.h" +#include "forte_byte.h" +#include "forte_any_bit_variant.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" +#include "ASSEMBLE_BYTE_FROM_QUARTERS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_BYTE_FROM_QUARTERS, g_nStringIdASSEMBLE_BYTE_FROM_QUARTERS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmDataInputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdBYTE}; +const TDataIOID FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEIWith[] = {0, 1, 2, 3, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 4, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::FORTE_ASSEMBLE_BYTE_FROM_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_QUARTER_BYTE_00(nullptr), + conn_QUARTER_BYTE_01(nullptr), + conn_QUARTER_BYTE_02(nullptr), + conn_QUARTER_BYTE_03(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::setInitialValues() { + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_ = 0_BYTE; +} + +void FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + readData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + readData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + readData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_BYTE_FROM_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_BYTE_FROM_QUARTERS(var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_BYTE func_ASSEMBLE_BYTE_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03) { + CIEC_BYTE st_ret_val = 0_BYTE; + + #line 11 "ASSEMBLE_BYTE_FROM_QUARTERS.fct" + st_ret_val = st_global_BYTE_QUARTER_ZZ; + #line 12 "ASSEMBLE_BYTE_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(st_lv_QUARTER_BYTE_03, st_global_SHIFT_QUARTER_03)); + #line 13 "ASSEMBLE_BYTE_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(st_lv_QUARTER_BYTE_02, st_global_SHIFT_QUARTER_02)); + #line 14 "ASSEMBLE_BYTE_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(st_lv_QUARTER_BYTE_01, st_global_SHIFT_QUARTER_01)); + #line 15 "ASSEMBLE_BYTE_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(st_lv_QUARTER_BYTE_00, st_global_SHIFT_QUARTER_00)); + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.h b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.h new file mode 100644 index 000000000..48a93843a --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_BYTE_FROM_QUARTERS_fct.h @@ -0,0 +1,98 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_BYTE_FROM_QUARTERS + *** Description: this Function combines the 4 QUARTER BYTES to a BYTE + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_BYTE_FROM_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_BYTE_FROM_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_BYTE_FROM_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + + CIEC_BYTE var_; + + CIEC_BYTE var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_QUARTER_BYTE_00; + CDataConnection *conn_QUARTER_BYTE_01; + CDataConnection *conn_QUARTER_BYTE_02; + CDataConnection *conn_QUARTER_BYTE_03; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &pa) { + var_QUARTER_BYTE_00 = paQUARTER_BYTE_00; + var_QUARTER_BYTE_01 = paQUARTER_BYTE_01; + var_QUARTER_BYTE_02 = paQUARTER_BYTE_02; + var_QUARTER_BYTE_03 = paQUARTER_BYTE_03; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &pa) { + evt_REQ(paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, pa); + } +}; + +CIEC_BYTE func_ASSEMBLE_BYTE_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.cpp new file mode 100644 index 000000000..a733e7101 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.cpp @@ -0,0 +1,357 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_BOOLS + *** Description: this Function combines the 32 BOOLS to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_DWORD_FROM_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_DWORD_FROM_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_DWORD_FROM_BOOLS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_BOOLS, g_nStringIdASSEMBLE_DWORD_FROM_BOOLS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmDataInputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15, g_nStringIdBIT_16, g_nStringIdBIT_17, g_nStringIdBIT_18, g_nStringIdBIT_19, g_nStringIdBIT_20, g_nStringIdBIT_21, g_nStringIdBIT_22, g_nStringIdBIT_23, g_nStringIdBIT_24, g_nStringIdBIT_25, g_nStringIdBIT_26, g_nStringIdBIT_27, g_nStringIdBIT_28, g_nStringIdBIT_29, g_nStringIdBIT_30, g_nStringIdBIT_31}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdDWORD}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_DWORD_FROM_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 32, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_DWORD_FROM_BOOLS::FORTE_ASSEMBLE_DWORD_FROM_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BIT_00(nullptr), + conn_BIT_01(nullptr), + conn_BIT_02(nullptr), + conn_BIT_03(nullptr), + conn_BIT_04(nullptr), + conn_BIT_05(nullptr), + conn_BIT_06(nullptr), + conn_BIT_07(nullptr), + conn_BIT_08(nullptr), + conn_BIT_09(nullptr), + conn_BIT_10(nullptr), + conn_BIT_11(nullptr), + conn_BIT_12(nullptr), + conn_BIT_13(nullptr), + conn_BIT_14(nullptr), + conn_BIT_15(nullptr), + conn_BIT_16(nullptr), + conn_BIT_17(nullptr), + conn_BIT_18(nullptr), + conn_BIT_19(nullptr), + conn_BIT_20(nullptr), + conn_BIT_21(nullptr), + conn_BIT_22(nullptr), + conn_BIT_23(nullptr), + conn_BIT_24(nullptr), + conn_BIT_25(nullptr), + conn_BIT_26(nullptr), + conn_BIT_27(nullptr), + conn_BIT_28(nullptr), + conn_BIT_29(nullptr), + conn_BIT_30(nullptr), + conn_BIT_31(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_DWORD_FROM_BOOLS::setInitialValues() { + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; + var_BIT_16 = 0_BOOL; + var_BIT_17 = 0_BOOL; + var_BIT_18 = 0_BOOL; + var_BIT_19 = 0_BOOL; + var_BIT_20 = 0_BOOL; + var_BIT_21 = 0_BOOL; + var_BIT_22 = 0_BOOL; + var_BIT_23 = 0_BOOL; + var_BIT_24 = 0_BOOL; + var_BIT_25 = 0_BOOL; + var_BIT_26 = 0_BOOL; + var_BIT_27 = 0_BOOL; + var_BIT_28 = 0_BOOL; + var_BIT_29 = 0_BOOL; + var_BIT_30 = 0_BOOL; + var_BIT_31 = 0_BOOL; + var_ = 0_DWORD; +} + +void FORTE_ASSEMBLE_DWORD_FROM_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BIT_00, conn_BIT_00); + readData(1, var_BIT_01, conn_BIT_01); + readData(2, var_BIT_02, conn_BIT_02); + readData(3, var_BIT_03, conn_BIT_03); + readData(4, var_BIT_04, conn_BIT_04); + readData(5, var_BIT_05, conn_BIT_05); + readData(6, var_BIT_06, conn_BIT_06); + readData(7, var_BIT_07, conn_BIT_07); + readData(8, var_BIT_08, conn_BIT_08); + readData(9, var_BIT_09, conn_BIT_09); + readData(10, var_BIT_10, conn_BIT_10); + readData(11, var_BIT_11, conn_BIT_11); + readData(12, var_BIT_12, conn_BIT_12); + readData(13, var_BIT_13, conn_BIT_13); + readData(14, var_BIT_14, conn_BIT_14); + readData(15, var_BIT_15, conn_BIT_15); + readData(16, var_BIT_16, conn_BIT_16); + readData(17, var_BIT_17, conn_BIT_17); + readData(18, var_BIT_18, conn_BIT_18); + readData(19, var_BIT_19, conn_BIT_19); + readData(20, var_BIT_20, conn_BIT_20); + readData(21, var_BIT_21, conn_BIT_21); + readData(22, var_BIT_22, conn_BIT_22); + readData(23, var_BIT_23, conn_BIT_23); + readData(24, var_BIT_24, conn_BIT_24); + readData(25, var_BIT_25, conn_BIT_25); + readData(26, var_BIT_26, conn_BIT_26); + readData(27, var_BIT_27, conn_BIT_27); + readData(28, var_BIT_28, conn_BIT_28); + readData(29, var_BIT_29, conn_BIT_29); + readData(30, var_BIT_30, conn_BIT_30); + readData(31, var_BIT_31, conn_BIT_31); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_DWORD_FROM_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + case 16: return &var_BIT_16; + case 17: return &var_BIT_17; + case 18: return &var_BIT_18; + case 19: return &var_BIT_19; + case 20: return &var_BIT_20; + case 21: return &var_BIT_21; + case 22: return &var_BIT_22; + case 23: return &var_BIT_23; + case 24: return &var_BIT_24; + case 25: return &var_BIT_25; + case 26: return &var_BIT_26; + case 27: return &var_BIT_27; + case 28: return &var_BIT_28; + case 29: return &var_BIT_29; + case 30: return &var_BIT_30; + case 31: return &var_BIT_31; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_DWORD_FROM_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_DWORD_FROM_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + case 16: return &conn_BIT_16; + case 17: return &conn_BIT_17; + case 18: return &conn_BIT_18; + case 19: return &conn_BIT_19; + case 20: return &conn_BIT_20; + case 21: return &conn_BIT_21; + case 22: return &conn_BIT_22; + case 23: return &conn_BIT_23; + case 24: return &conn_BIT_24; + case 25: return &conn_BIT_25; + case 26: return &conn_BIT_26; + case 27: return &conn_BIT_27; + case 28: return &conn_BIT_28; + case 29: return &conn_BIT_29; + case 30: return &conn_BIT_30; + case 31: return &conn_BIT_31; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_DWORD_FROM_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_DWORD_FROM_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_DWORD_FROM_BOOLS(var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15, var_BIT_16, var_BIT_17, var_BIT_18, var_BIT_19, var_BIT_20, var_BIT_21, var_BIT_22, var_BIT_23, var_BIT_24, var_BIT_25, var_BIT_26, var_BIT_27, var_BIT_28, var_BIT_29, var_BIT_30, var_BIT_31); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15, CIEC_BOOL st_lv_BIT_16, CIEC_BOOL st_lv_BIT_17, CIEC_BOOL st_lv_BIT_18, CIEC_BOOL st_lv_BIT_19, CIEC_BOOL st_lv_BIT_20, CIEC_BOOL st_lv_BIT_21, CIEC_BOOL st_lv_BIT_22, CIEC_BOOL st_lv_BIT_23, CIEC_BOOL st_lv_BIT_24, CIEC_BOOL st_lv_BIT_25, CIEC_BOOL st_lv_BIT_26, CIEC_BOOL st_lv_BIT_27, CIEC_BOOL st_lv_BIT_28, CIEC_BOOL st_lv_BIT_29, CIEC_BOOL st_lv_BIT_30, CIEC_BOOL st_lv_BIT_31) { + CIEC_DWORD st_ret_val = 0_DWORD; + + #line 39 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(0) = st_lv_BIT_00; + #line 40 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(1) = st_lv_BIT_01; + #line 41 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(2) = st_lv_BIT_02; + #line 42 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(3) = st_lv_BIT_03; + #line 43 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(4) = st_lv_BIT_04; + #line 44 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(5) = st_lv_BIT_05; + #line 45 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(6) = st_lv_BIT_06; + #line 46 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(7) = st_lv_BIT_07; + #line 47 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(8) = st_lv_BIT_08; + #line 48 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(9) = st_lv_BIT_09; + #line 49 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(10) = st_lv_BIT_10; + #line 50 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(11) = st_lv_BIT_11; + #line 51 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(12) = st_lv_BIT_12; + #line 52 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(13) = st_lv_BIT_13; + #line 53 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(14) = st_lv_BIT_14; + #line 54 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(15) = st_lv_BIT_15; + #line 55 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(16) = st_lv_BIT_16; + #line 56 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(17) = st_lv_BIT_17; + #line 57 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(18) = st_lv_BIT_18; + #line 58 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(19) = st_lv_BIT_19; + #line 59 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(20) = st_lv_BIT_20; + #line 60 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(21) = st_lv_BIT_21; + #line 61 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(22) = st_lv_BIT_22; + #line 62 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(23) = st_lv_BIT_23; + #line 63 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(24) = st_lv_BIT_24; + #line 64 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(25) = st_lv_BIT_25; + #line 65 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(26) = st_lv_BIT_26; + #line 66 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(27) = st_lv_BIT_27; + #line 67 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(28) = st_lv_BIT_28; + #line 68 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(29) = st_lv_BIT_29; + #line 69 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(30) = st_lv_BIT_30; + #line 70 "ASSEMBLE_DWORD_FROM_BOOLS.fct" + st_ret_val.partial(31) = st_lv_BIT_31; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.h b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.h new file mode 100644 index 000000000..e2055ab4e --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BOOLS_fct.h @@ -0,0 +1,183 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_BOOLS + *** Description: this Function combines the 32 BOOLS to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_DWORD_FROM_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_DWORD_FROM_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + CIEC_BOOL var_BIT_16; + CIEC_BOOL var_BIT_17; + CIEC_BOOL var_BIT_18; + CIEC_BOOL var_BIT_19; + CIEC_BOOL var_BIT_20; + CIEC_BOOL var_BIT_21; + CIEC_BOOL var_BIT_22; + CIEC_BOOL var_BIT_23; + CIEC_BOOL var_BIT_24; + CIEC_BOOL var_BIT_25; + CIEC_BOOL var_BIT_26; + CIEC_BOOL var_BIT_27; + CIEC_BOOL var_BIT_28; + CIEC_BOOL var_BIT_29; + CIEC_BOOL var_BIT_30; + CIEC_BOOL var_BIT_31; + + CIEC_DWORD var_; + + CIEC_DWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BIT_00; + CDataConnection *conn_BIT_01; + CDataConnection *conn_BIT_02; + CDataConnection *conn_BIT_03; + CDataConnection *conn_BIT_04; + CDataConnection *conn_BIT_05; + CDataConnection *conn_BIT_06; + CDataConnection *conn_BIT_07; + CDataConnection *conn_BIT_08; + CDataConnection *conn_BIT_09; + CDataConnection *conn_BIT_10; + CDataConnection *conn_BIT_11; + CDataConnection *conn_BIT_12; + CDataConnection *conn_BIT_13; + CDataConnection *conn_BIT_14; + CDataConnection *conn_BIT_15; + CDataConnection *conn_BIT_16; + CDataConnection *conn_BIT_17; + CDataConnection *conn_BIT_18; + CDataConnection *conn_BIT_19; + CDataConnection *conn_BIT_20; + CDataConnection *conn_BIT_21; + CDataConnection *conn_BIT_22; + CDataConnection *conn_BIT_23; + CDataConnection *conn_BIT_24; + CDataConnection *conn_BIT_25; + CDataConnection *conn_BIT_26; + CDataConnection *conn_BIT_27; + CDataConnection *conn_BIT_28; + CDataConnection *conn_BIT_29; + CDataConnection *conn_BIT_30; + CDataConnection *conn_BIT_31; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, const CIEC_BOOL &paBIT_16, const CIEC_BOOL &paBIT_17, const CIEC_BOOL &paBIT_18, const CIEC_BOOL &paBIT_19, const CIEC_BOOL &paBIT_20, const CIEC_BOOL &paBIT_21, const CIEC_BOOL &paBIT_22, const CIEC_BOOL &paBIT_23, const CIEC_BOOL &paBIT_24, const CIEC_BOOL &paBIT_25, const CIEC_BOOL &paBIT_26, const CIEC_BOOL &paBIT_27, const CIEC_BOOL &paBIT_28, const CIEC_BOOL &paBIT_29, const CIEC_BOOL &paBIT_30, const CIEC_BOOL &paBIT_31, CIEC_DWORD &pa) { + var_BIT_00 = paBIT_00; + var_BIT_01 = paBIT_01; + var_BIT_02 = paBIT_02; + var_BIT_03 = paBIT_03; + var_BIT_04 = paBIT_04; + var_BIT_05 = paBIT_05; + var_BIT_06 = paBIT_06; + var_BIT_07 = paBIT_07; + var_BIT_08 = paBIT_08; + var_BIT_09 = paBIT_09; + var_BIT_10 = paBIT_10; + var_BIT_11 = paBIT_11; + var_BIT_12 = paBIT_12; + var_BIT_13 = paBIT_13; + var_BIT_14 = paBIT_14; + var_BIT_15 = paBIT_15; + var_BIT_16 = paBIT_16; + var_BIT_17 = paBIT_17; + var_BIT_18 = paBIT_18; + var_BIT_19 = paBIT_19; + var_BIT_20 = paBIT_20; + var_BIT_21 = paBIT_21; + var_BIT_22 = paBIT_22; + var_BIT_23 = paBIT_23; + var_BIT_24 = paBIT_24; + var_BIT_25 = paBIT_25; + var_BIT_26 = paBIT_26; + var_BIT_27 = paBIT_27; + var_BIT_28 = paBIT_28; + var_BIT_29 = paBIT_29; + var_BIT_30 = paBIT_30; + var_BIT_31 = paBIT_31; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, const CIEC_BOOL &paBIT_16, const CIEC_BOOL &paBIT_17, const CIEC_BOOL &paBIT_18, const CIEC_BOOL &paBIT_19, const CIEC_BOOL &paBIT_20, const CIEC_BOOL &paBIT_21, const CIEC_BOOL &paBIT_22, const CIEC_BOOL &paBIT_23, const CIEC_BOOL &paBIT_24, const CIEC_BOOL &paBIT_25, const CIEC_BOOL &paBIT_26, const CIEC_BOOL &paBIT_27, const CIEC_BOOL &paBIT_28, const CIEC_BOOL &paBIT_29, const CIEC_BOOL &paBIT_30, const CIEC_BOOL &paBIT_31, CIEC_DWORD &pa) { + evt_REQ(paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15, paBIT_16, paBIT_17, paBIT_18, paBIT_19, paBIT_20, paBIT_21, paBIT_22, paBIT_23, paBIT_24, paBIT_25, paBIT_26, paBIT_27, paBIT_28, paBIT_29, paBIT_30, paBIT_31, pa); + } +}; + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15, CIEC_BOOL st_lv_BIT_16, CIEC_BOOL st_lv_BIT_17, CIEC_BOOL st_lv_BIT_18, CIEC_BOOL st_lv_BIT_19, CIEC_BOOL st_lv_BIT_20, CIEC_BOOL st_lv_BIT_21, CIEC_BOOL st_lv_BIT_22, CIEC_BOOL st_lv_BIT_23, CIEC_BOOL st_lv_BIT_24, CIEC_BOOL st_lv_BIT_25, CIEC_BOOL st_lv_BIT_26, CIEC_BOOL st_lv_BIT_27, CIEC_BOOL st_lv_BIT_28, CIEC_BOOL st_lv_BIT_29, CIEC_BOOL st_lv_BIT_30, CIEC_BOOL st_lv_BIT_31); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.cpp new file mode 100644 index 000000000..b195c426e --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.cpp @@ -0,0 +1,161 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_BYTES + *** Description: this Function combines the 2 BYTES to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_DWORD_FROM_BYTES_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_DWORD_FROM_BYTES_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_DWORD_FROM_BYTES_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_BYTES, g_nStringIdASSEMBLE_DWORD_FROM_BYTES) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmDataInputNames[] = {g_nStringIdBYTE_00, g_nStringIdBYTE_01, g_nStringIdBYTE_02, g_nStringIdBYTE_03}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmDataOutputTypeIds[] = {g_nStringIdDWORD}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEIWith[] = {0, 1, 2, 3, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_DWORD_FROM_BYTES::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 4, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_DWORD_FROM_BYTES::FORTE_ASSEMBLE_DWORD_FROM_BYTES(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BYTE_00(nullptr), + conn_BYTE_01(nullptr), + conn_BYTE_02(nullptr), + conn_BYTE_03(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_DWORD_FROM_BYTES::setInitialValues() { + var_BYTE_00 = 0_BYTE; + var_BYTE_01 = 0_BYTE; + var_BYTE_02 = 0_BYTE; + var_BYTE_03 = 0_BYTE; + var_ = 0_DWORD; +} + +void FORTE_ASSEMBLE_DWORD_FROM_BYTES::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BYTE_00, conn_BYTE_00); + readData(1, var_BYTE_01, conn_BYTE_01); + readData(2, var_BYTE_02, conn_BYTE_02); + readData(3, var_BYTE_03, conn_BYTE_03); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_DWORD_FROM_BYTES::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_BYTES::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BYTE_00; + case 1: return &var_BYTE_01; + case 2: return &var_BYTE_02; + case 3: return &var_BYTE_03; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_BYTES::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_DWORD_FROM_BYTES::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_DWORD_FROM_BYTES::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BYTE_00; + case 1: return &conn_BYTE_01; + case 2: return &conn_BYTE_02; + case 3: return &conn_BYTE_03; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_DWORD_FROM_BYTES::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_DWORD_FROM_BYTES::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_DWORD_FROM_BYTES(var_BYTE_00, var_BYTE_01, var_BYTE_02, var_BYTE_03); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_BYTES(CIEC_BYTE st_lv_BYTE_00, CIEC_BYTE st_lv_BYTE_01, CIEC_BYTE st_lv_BYTE_02, CIEC_BYTE st_lv_BYTE_03) { + CIEC_DWORD st_ret_val = 0_DWORD; + + #line 11 "ASSEMBLE_DWORD_FROM_BYTES.fct" + st_ret_val.partial(0) = st_lv_BYTE_00; + #line 12 "ASSEMBLE_DWORD_FROM_BYTES.fct" + st_ret_val.partial(1) = st_lv_BYTE_01; + #line 13 "ASSEMBLE_DWORD_FROM_BYTES.fct" + st_ret_val.partial(2) = st_lv_BYTE_02; + #line 14 "ASSEMBLE_DWORD_FROM_BYTES.fct" + st_ret_val.partial(3) = st_lv_BYTE_03; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.h b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.h new file mode 100644 index 000000000..2eaf00344 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_BYTES_fct.h @@ -0,0 +1,99 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_BYTES + *** Description: this Function combines the 2 BYTES to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_DWORD_FROM_BYTES final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_BYTES) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_DWORD_FROM_BYTES(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_BYTE_00; + CIEC_BYTE var_BYTE_01; + CIEC_BYTE var_BYTE_02; + CIEC_BYTE var_BYTE_03; + + CIEC_DWORD var_; + + CIEC_DWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BYTE_00; + CDataConnection *conn_BYTE_01; + CDataConnection *conn_BYTE_02; + CDataConnection *conn_BYTE_03; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paBYTE_00, const CIEC_BYTE &paBYTE_01, const CIEC_BYTE &paBYTE_02, const CIEC_BYTE &paBYTE_03, CIEC_DWORD &pa) { + var_BYTE_00 = paBYTE_00; + var_BYTE_01 = paBYTE_01; + var_BYTE_02 = paBYTE_02; + var_BYTE_03 = paBYTE_03; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paBYTE_00, const CIEC_BYTE &paBYTE_01, const CIEC_BYTE &paBYTE_02, const CIEC_BYTE &paBYTE_03, CIEC_DWORD &pa) { + evt_REQ(paBYTE_00, paBYTE_01, paBYTE_02, paBYTE_03, pa); + } +}; + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_BYTES(CIEC_BYTE st_lv_BYTE_00, CIEC_BYTE st_lv_BYTE_01, CIEC_BYTE st_lv_BYTE_02, CIEC_BYTE st_lv_BYTE_03); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.cpp new file mode 100644 index 000000000..95edbbc56 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.cpp @@ -0,0 +1,218 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_QUARTERS + *** Description: this Function combines the 16 QUARTER BYTES to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#include "ASSEMBLE_DWORD_FROM_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_DWORD_FROM_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" +#include "ASSEMBLE_DWORD_FROM_QUARTERS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_QUARTERS, g_nStringIdASSEMBLE_DWORD_FROM_QUARTERS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmDataInputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07, g_nStringIdQUARTER_BYTE_08, g_nStringIdQUARTER_BYTE_09, g_nStringIdQUARTER_BYTE_10, g_nStringIdQUARTER_BYTE_11, g_nStringIdQUARTER_BYTE_12, g_nStringIdQUARTER_BYTE_13, g_nStringIdQUARTER_BYTE_14, g_nStringIdQUARTER_BYTE_15}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdDWORD}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 16, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::FORTE_ASSEMBLE_DWORD_FROM_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_QUARTER_BYTE_00(nullptr), + conn_QUARTER_BYTE_01(nullptr), + conn_QUARTER_BYTE_02(nullptr), + conn_QUARTER_BYTE_03(nullptr), + conn_QUARTER_BYTE_04(nullptr), + conn_QUARTER_BYTE_05(nullptr), + conn_QUARTER_BYTE_06(nullptr), + conn_QUARTER_BYTE_07(nullptr), + conn_QUARTER_BYTE_08(nullptr), + conn_QUARTER_BYTE_09(nullptr), + conn_QUARTER_BYTE_10(nullptr), + conn_QUARTER_BYTE_11(nullptr), + conn_QUARTER_BYTE_12(nullptr), + conn_QUARTER_BYTE_13(nullptr), + conn_QUARTER_BYTE_14(nullptr), + conn_QUARTER_BYTE_15(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::setInitialValues() { + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; + var_QUARTER_BYTE_08 = 0_BYTE; + var_QUARTER_BYTE_09 = 0_BYTE; + var_QUARTER_BYTE_10 = 0_BYTE; + var_QUARTER_BYTE_11 = 0_BYTE; + var_QUARTER_BYTE_12 = 0_BYTE; + var_QUARTER_BYTE_13 = 0_BYTE; + var_QUARTER_BYTE_14 = 0_BYTE; + var_QUARTER_BYTE_15 = 0_BYTE; + var_ = 0_DWORD; +} + +void FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + readData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + readData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + readData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + readData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + readData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + readData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + readData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + readData(8, var_QUARTER_BYTE_08, conn_QUARTER_BYTE_08); + readData(9, var_QUARTER_BYTE_09, conn_QUARTER_BYTE_09); + readData(10, var_QUARTER_BYTE_10, conn_QUARTER_BYTE_10); + readData(11, var_QUARTER_BYTE_11, conn_QUARTER_BYTE_11); + readData(12, var_QUARTER_BYTE_12, conn_QUARTER_BYTE_12); + readData(13, var_QUARTER_BYTE_13, conn_QUARTER_BYTE_13); + readData(14, var_QUARTER_BYTE_14, conn_QUARTER_BYTE_14); + readData(15, var_QUARTER_BYTE_15, conn_QUARTER_BYTE_15); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + case 8: return &var_QUARTER_BYTE_08; + case 9: return &var_QUARTER_BYTE_09; + case 10: return &var_QUARTER_BYTE_10; + case 11: return &var_QUARTER_BYTE_11; + case 12: return &var_QUARTER_BYTE_12; + case 13: return &var_QUARTER_BYTE_13; + case 14: return &var_QUARTER_BYTE_14; + case 15: return &var_QUARTER_BYTE_15; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + case 8: return &conn_QUARTER_BYTE_08; + case 9: return &conn_QUARTER_BYTE_09; + case 10: return &conn_QUARTER_BYTE_10; + case 11: return &conn_QUARTER_BYTE_11; + case 12: return &conn_QUARTER_BYTE_12; + case 13: return &conn_QUARTER_BYTE_13; + case 14: return &conn_QUARTER_BYTE_14; + case 15: return &conn_QUARTER_BYTE_15; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_DWORD_FROM_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_DWORD_FROM_QUARTERS(var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07, var_QUARTER_BYTE_08, var_QUARTER_BYTE_09, var_QUARTER_BYTE_10, var_QUARTER_BYTE_11, var_QUARTER_BYTE_12, var_QUARTER_BYTE_13, var_QUARTER_BYTE_14, var_QUARTER_BYTE_15); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07, CIEC_BYTE st_lv_QUARTER_BYTE_08, CIEC_BYTE st_lv_QUARTER_BYTE_09, CIEC_BYTE st_lv_QUARTER_BYTE_10, CIEC_BYTE st_lv_QUARTER_BYTE_11, CIEC_BYTE st_lv_QUARTER_BYTE_12, CIEC_BYTE st_lv_QUARTER_BYTE_13, CIEC_BYTE st_lv_QUARTER_BYTE_14, CIEC_BYTE st_lv_QUARTER_BYTE_15) { + CIEC_DWORD st_ret_val = 0_DWORD; + + #line 23 "ASSEMBLE_DWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_OR(func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_15), st_global_SHIFT_QUARTER_15), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_14), st_global_SHIFT_QUARTER_14)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_13), st_global_SHIFT_QUARTER_13)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_12), st_global_SHIFT_QUARTER_12)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_11), st_global_SHIFT_QUARTER_11)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_10), st_global_SHIFT_QUARTER_10)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_09), st_global_SHIFT_QUARTER_09)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_08), st_global_SHIFT_QUARTER_08)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_07), st_global_SHIFT_QUARTER_07)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_06), st_global_SHIFT_QUARTER_06)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_05), st_global_SHIFT_QUARTER_05)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_04), st_global_SHIFT_QUARTER_04)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_03), st_global_SHIFT_QUARTER_03)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_02), st_global_SHIFT_QUARTER_02)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_01), st_global_SHIFT_QUARTER_01)), func_SHL(func_BYTE_TO_DWORD(st_lv_QUARTER_BYTE_00), st_global_SHIFT_QUARTER_00)); + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.h b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.h new file mode 100644 index 000000000..fc2d49257 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_QUARTERS_fct.h @@ -0,0 +1,135 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_QUARTERS + *** Description: this Function combines the 16 QUARTER BYTES to a DWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_DWORD_FROM_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_DWORD_FROM_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + CIEC_BYTE var_QUARTER_BYTE_08; + CIEC_BYTE var_QUARTER_BYTE_09; + CIEC_BYTE var_QUARTER_BYTE_10; + CIEC_BYTE var_QUARTER_BYTE_11; + CIEC_BYTE var_QUARTER_BYTE_12; + CIEC_BYTE var_QUARTER_BYTE_13; + CIEC_BYTE var_QUARTER_BYTE_14; + CIEC_BYTE var_QUARTER_BYTE_15; + + CIEC_DWORD var_; + + CIEC_DWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_QUARTER_BYTE_00; + CDataConnection *conn_QUARTER_BYTE_01; + CDataConnection *conn_QUARTER_BYTE_02; + CDataConnection *conn_QUARTER_BYTE_03; + CDataConnection *conn_QUARTER_BYTE_04; + CDataConnection *conn_QUARTER_BYTE_05; + CDataConnection *conn_QUARTER_BYTE_06; + CDataConnection *conn_QUARTER_BYTE_07; + CDataConnection *conn_QUARTER_BYTE_08; + CDataConnection *conn_QUARTER_BYTE_09; + CDataConnection *conn_QUARTER_BYTE_10; + CDataConnection *conn_QUARTER_BYTE_11; + CDataConnection *conn_QUARTER_BYTE_12; + CDataConnection *conn_QUARTER_BYTE_13; + CDataConnection *conn_QUARTER_BYTE_14; + CDataConnection *conn_QUARTER_BYTE_15; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, const CIEC_BYTE &paQUARTER_BYTE_08, const CIEC_BYTE &paQUARTER_BYTE_09, const CIEC_BYTE &paQUARTER_BYTE_10, const CIEC_BYTE &paQUARTER_BYTE_11, const CIEC_BYTE &paQUARTER_BYTE_12, const CIEC_BYTE &paQUARTER_BYTE_13, const CIEC_BYTE &paQUARTER_BYTE_14, const CIEC_BYTE &paQUARTER_BYTE_15, CIEC_DWORD &pa) { + var_QUARTER_BYTE_00 = paQUARTER_BYTE_00; + var_QUARTER_BYTE_01 = paQUARTER_BYTE_01; + var_QUARTER_BYTE_02 = paQUARTER_BYTE_02; + var_QUARTER_BYTE_03 = paQUARTER_BYTE_03; + var_QUARTER_BYTE_04 = paQUARTER_BYTE_04; + var_QUARTER_BYTE_05 = paQUARTER_BYTE_05; + var_QUARTER_BYTE_06 = paQUARTER_BYTE_06; + var_QUARTER_BYTE_07 = paQUARTER_BYTE_07; + var_QUARTER_BYTE_08 = paQUARTER_BYTE_08; + var_QUARTER_BYTE_09 = paQUARTER_BYTE_09; + var_QUARTER_BYTE_10 = paQUARTER_BYTE_10; + var_QUARTER_BYTE_11 = paQUARTER_BYTE_11; + var_QUARTER_BYTE_12 = paQUARTER_BYTE_12; + var_QUARTER_BYTE_13 = paQUARTER_BYTE_13; + var_QUARTER_BYTE_14 = paQUARTER_BYTE_14; + var_QUARTER_BYTE_15 = paQUARTER_BYTE_15; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, const CIEC_BYTE &paQUARTER_BYTE_08, const CIEC_BYTE &paQUARTER_BYTE_09, const CIEC_BYTE &paQUARTER_BYTE_10, const CIEC_BYTE &paQUARTER_BYTE_11, const CIEC_BYTE &paQUARTER_BYTE_12, const CIEC_BYTE &paQUARTER_BYTE_13, const CIEC_BYTE &paQUARTER_BYTE_14, const CIEC_BYTE &paQUARTER_BYTE_15, CIEC_DWORD &pa) { + evt_REQ(paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07, paQUARTER_BYTE_08, paQUARTER_BYTE_09, paQUARTER_BYTE_10, paQUARTER_BYTE_11, paQUARTER_BYTE_12, paQUARTER_BYTE_13, paQUARTER_BYTE_14, paQUARTER_BYTE_15, pa); + } +}; + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07, CIEC_BYTE st_lv_QUARTER_BYTE_08, CIEC_BYTE st_lv_QUARTER_BYTE_09, CIEC_BYTE st_lv_QUARTER_BYTE_10, CIEC_BYTE st_lv_QUARTER_BYTE_11, CIEC_BYTE st_lv_QUARTER_BYTE_12, CIEC_BYTE st_lv_QUARTER_BYTE_13, CIEC_BYTE st_lv_QUARTER_BYTE_14, CIEC_BYTE st_lv_QUARTER_BYTE_15); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.cpp new file mode 100644 index 000000000..45bdc37e3 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.cpp @@ -0,0 +1,147 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_WORDS + *** Description: this Function combines the 2 WORDS to a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_DWORD_FROM_WORDS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_DWORD_FROM_WORDS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_DWORD_FROM_WORDS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_WORDS, g_nStringIdASSEMBLE_DWORD_FROM_WORDS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmDataInputNames[] = {g_nStringIdWORD_00, g_nStringIdWORD_01}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmDataInputTypeIds[] = {g_nStringIdWORD, g_nStringIdWORD}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmDataOutputTypeIds[] = {g_nStringIdDWORD}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEIWith[] = {0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_DWORD_FROM_WORDS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 2, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_DWORD_FROM_WORDS::FORTE_ASSEMBLE_DWORD_FROM_WORDS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_WORD_00(nullptr), + conn_WORD_01(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_DWORD_FROM_WORDS::setInitialValues() { + var_WORD_00 = 0_WORD; + var_WORD_01 = 0_WORD; + var_ = 0_DWORD; +} + +void FORTE_ASSEMBLE_DWORD_FROM_WORDS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_WORD_00, conn_WORD_00); + readData(1, var_WORD_01, conn_WORD_01); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_DWORD_FROM_WORDS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_WORDS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_WORD_00; + case 1: return &var_WORD_01; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_DWORD_FROM_WORDS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_DWORD_FROM_WORDS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_DWORD_FROM_WORDS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_WORD_00; + case 1: return &conn_WORD_01; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_DWORD_FROM_WORDS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_DWORD_FROM_WORDS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_DWORD_FROM_WORDS(var_WORD_00, var_WORD_01); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_WORDS(CIEC_WORD st_lv_WORD_00, CIEC_WORD st_lv_WORD_01) { + CIEC_DWORD st_ret_val = 0_DWORD; + + #line 9 "ASSEMBLE_DWORD_FROM_WORDS.fct" + st_ret_val.partial(0) = st_lv_WORD_00; + #line 10 "ASSEMBLE_DWORD_FROM_WORDS.fct" + st_ret_val.partial(1) = st_lv_WORD_01; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.h b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.h new file mode 100644 index 000000000..b0fd9fcbe --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_DWORD_FROM_WORDS_fct.h @@ -0,0 +1,93 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_DWORD_FROM_WORDS + *** Description: this Function combines the 2 WORDS to a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_DWORD_FROM_WORDS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_DWORD_FROM_WORDS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_DWORD_FROM_WORDS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_WORD var_WORD_00; + CIEC_WORD var_WORD_01; + + CIEC_DWORD var_; + + CIEC_DWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_WORD_00; + CDataConnection *conn_WORD_01; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_WORD &paWORD_00, const CIEC_WORD &paWORD_01, CIEC_DWORD &pa) { + var_WORD_00 = paWORD_00; + var_WORD_01 = paWORD_01; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_WORD &paWORD_00, const CIEC_WORD &paWORD_01, CIEC_DWORD &pa) { + evt_REQ(paWORD_00, paWORD_01, pa); + } +}; + +CIEC_DWORD func_ASSEMBLE_DWORD_FROM_WORDS(CIEC_WORD st_lv_WORD_00, CIEC_WORD st_lv_WORD_01); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.cpp new file mode 100644 index 000000000..d0e61891b --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.cpp @@ -0,0 +1,581 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_LWORD_FROM_BOOLS + *** Description: this Function combines the 64 BOOLS to a LWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_LWORD_FROM_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_LWORD_FROM_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_lword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_LWORD_FROM_BOOLS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_LWORD_FROM_BOOLS, g_nStringIdASSEMBLE_LWORD_FROM_BOOLS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmDataInputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15, g_nStringIdBIT_16, g_nStringIdBIT_17, g_nStringIdBIT_18, g_nStringIdBIT_19, g_nStringIdBIT_20, g_nStringIdBIT_21, g_nStringIdBIT_22, g_nStringIdBIT_23, g_nStringIdBIT_24, g_nStringIdBIT_25, g_nStringIdBIT_26, g_nStringIdBIT_27, g_nStringIdBIT_28, g_nStringIdBIT_29, g_nStringIdBIT_30, g_nStringIdBIT_31, g_nStringIdBIT_32, g_nStringIdBIT_33, g_nStringIdBIT_34, g_nStringIdBIT_35, g_nStringIdBIT_36, g_nStringIdBIT_37, g_nStringIdBIT_38, g_nStringIdBIT_39, g_nStringIdBIT_40, g_nStringIdBIT_41, g_nStringIdBIT_42, g_nStringIdBIT_43, g_nStringIdBIT_44, g_nStringIdBIT_45, g_nStringIdBIT_46, g_nStringIdBIT_47, g_nStringIdBIT_48, g_nStringIdBIT_49, g_nStringIdBIT_50, g_nStringIdBIT_51, g_nStringIdBIT_52, g_nStringIdBIT_53, g_nStringIdBIT_54, g_nStringIdBIT_55, g_nStringIdBIT_56, g_nStringIdBIT_57, g_nStringIdBIT_58, g_nStringIdBIT_59, g_nStringIdBIT_60, g_nStringIdBIT_61, g_nStringIdBIT_62, g_nStringIdBIT_63}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdLWORD}; +const TDataIOID FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_LWORD_FROM_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 64, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_LWORD_FROM_BOOLS::FORTE_ASSEMBLE_LWORD_FROM_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BIT_00(nullptr), + conn_BIT_01(nullptr), + conn_BIT_02(nullptr), + conn_BIT_03(nullptr), + conn_BIT_04(nullptr), + conn_BIT_05(nullptr), + conn_BIT_06(nullptr), + conn_BIT_07(nullptr), + conn_BIT_08(nullptr), + conn_BIT_09(nullptr), + conn_BIT_10(nullptr), + conn_BIT_11(nullptr), + conn_BIT_12(nullptr), + conn_BIT_13(nullptr), + conn_BIT_14(nullptr), + conn_BIT_15(nullptr), + conn_BIT_16(nullptr), + conn_BIT_17(nullptr), + conn_BIT_18(nullptr), + conn_BIT_19(nullptr), + conn_BIT_20(nullptr), + conn_BIT_21(nullptr), + conn_BIT_22(nullptr), + conn_BIT_23(nullptr), + conn_BIT_24(nullptr), + conn_BIT_25(nullptr), + conn_BIT_26(nullptr), + conn_BIT_27(nullptr), + conn_BIT_28(nullptr), + conn_BIT_29(nullptr), + conn_BIT_30(nullptr), + conn_BIT_31(nullptr), + conn_BIT_32(nullptr), + conn_BIT_33(nullptr), + conn_BIT_34(nullptr), + conn_BIT_35(nullptr), + conn_BIT_36(nullptr), + conn_BIT_37(nullptr), + conn_BIT_38(nullptr), + conn_BIT_39(nullptr), + conn_BIT_40(nullptr), + conn_BIT_41(nullptr), + conn_BIT_42(nullptr), + conn_BIT_43(nullptr), + conn_BIT_44(nullptr), + conn_BIT_45(nullptr), + conn_BIT_46(nullptr), + conn_BIT_47(nullptr), + conn_BIT_48(nullptr), + conn_BIT_49(nullptr), + conn_BIT_50(nullptr), + conn_BIT_51(nullptr), + conn_BIT_52(nullptr), + conn_BIT_53(nullptr), + conn_BIT_54(nullptr), + conn_BIT_55(nullptr), + conn_BIT_56(nullptr), + conn_BIT_57(nullptr), + conn_BIT_58(nullptr), + conn_BIT_59(nullptr), + conn_BIT_60(nullptr), + conn_BIT_61(nullptr), + conn_BIT_62(nullptr), + conn_BIT_63(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_LWORD_FROM_BOOLS::setInitialValues() { + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; + var_BIT_16 = 0_BOOL; + var_BIT_17 = 0_BOOL; + var_BIT_18 = 0_BOOL; + var_BIT_19 = 0_BOOL; + var_BIT_20 = 0_BOOL; + var_BIT_21 = 0_BOOL; + var_BIT_22 = 0_BOOL; + var_BIT_23 = 0_BOOL; + var_BIT_24 = 0_BOOL; + var_BIT_25 = 0_BOOL; + var_BIT_26 = 0_BOOL; + var_BIT_27 = 0_BOOL; + var_BIT_28 = 0_BOOL; + var_BIT_29 = 0_BOOL; + var_BIT_30 = 0_BOOL; + var_BIT_31 = 0_BOOL; + var_BIT_32 = 0_BOOL; + var_BIT_33 = 0_BOOL; + var_BIT_34 = 0_BOOL; + var_BIT_35 = 0_BOOL; + var_BIT_36 = 0_BOOL; + var_BIT_37 = 0_BOOL; + var_BIT_38 = 0_BOOL; + var_BIT_39 = 0_BOOL; + var_BIT_40 = 0_BOOL; + var_BIT_41 = 0_BOOL; + var_BIT_42 = 0_BOOL; + var_BIT_43 = 0_BOOL; + var_BIT_44 = 0_BOOL; + var_BIT_45 = 0_BOOL; + var_BIT_46 = 0_BOOL; + var_BIT_47 = 0_BOOL; + var_BIT_48 = 0_BOOL; + var_BIT_49 = 0_BOOL; + var_BIT_50 = 0_BOOL; + var_BIT_51 = 0_BOOL; + var_BIT_52 = 0_BOOL; + var_BIT_53 = 0_BOOL; + var_BIT_54 = 0_BOOL; + var_BIT_55 = 0_BOOL; + var_BIT_56 = 0_BOOL; + var_BIT_57 = 0_BOOL; + var_BIT_58 = 0_BOOL; + var_BIT_59 = 0_BOOL; + var_BIT_60 = 0_BOOL; + var_BIT_61 = 0_BOOL; + var_BIT_62 = 0_BOOL; + var_BIT_63 = 0_BOOL; + var_ = 0_LWORD; +} + +void FORTE_ASSEMBLE_LWORD_FROM_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BIT_00, conn_BIT_00); + readData(1, var_BIT_01, conn_BIT_01); + readData(2, var_BIT_02, conn_BIT_02); + readData(3, var_BIT_03, conn_BIT_03); + readData(4, var_BIT_04, conn_BIT_04); + readData(5, var_BIT_05, conn_BIT_05); + readData(6, var_BIT_06, conn_BIT_06); + readData(7, var_BIT_07, conn_BIT_07); + readData(8, var_BIT_08, conn_BIT_08); + readData(9, var_BIT_09, conn_BIT_09); + readData(10, var_BIT_10, conn_BIT_10); + readData(11, var_BIT_11, conn_BIT_11); + readData(12, var_BIT_12, conn_BIT_12); + readData(13, var_BIT_13, conn_BIT_13); + readData(14, var_BIT_14, conn_BIT_14); + readData(15, var_BIT_15, conn_BIT_15); + readData(16, var_BIT_16, conn_BIT_16); + readData(17, var_BIT_17, conn_BIT_17); + readData(18, var_BIT_18, conn_BIT_18); + readData(19, var_BIT_19, conn_BIT_19); + readData(20, var_BIT_20, conn_BIT_20); + readData(21, var_BIT_21, conn_BIT_21); + readData(22, var_BIT_22, conn_BIT_22); + readData(23, var_BIT_23, conn_BIT_23); + readData(24, var_BIT_24, conn_BIT_24); + readData(25, var_BIT_25, conn_BIT_25); + readData(26, var_BIT_26, conn_BIT_26); + readData(27, var_BIT_27, conn_BIT_27); + readData(28, var_BIT_28, conn_BIT_28); + readData(29, var_BIT_29, conn_BIT_29); + readData(30, var_BIT_30, conn_BIT_30); + readData(31, var_BIT_31, conn_BIT_31); + readData(32, var_BIT_32, conn_BIT_32); + readData(33, var_BIT_33, conn_BIT_33); + readData(34, var_BIT_34, conn_BIT_34); + readData(35, var_BIT_35, conn_BIT_35); + readData(36, var_BIT_36, conn_BIT_36); + readData(37, var_BIT_37, conn_BIT_37); + readData(38, var_BIT_38, conn_BIT_38); + readData(39, var_BIT_39, conn_BIT_39); + readData(40, var_BIT_40, conn_BIT_40); + readData(41, var_BIT_41, conn_BIT_41); + readData(42, var_BIT_42, conn_BIT_42); + readData(43, var_BIT_43, conn_BIT_43); + readData(44, var_BIT_44, conn_BIT_44); + readData(45, var_BIT_45, conn_BIT_45); + readData(46, var_BIT_46, conn_BIT_46); + readData(47, var_BIT_47, conn_BIT_47); + readData(48, var_BIT_48, conn_BIT_48); + readData(49, var_BIT_49, conn_BIT_49); + readData(50, var_BIT_50, conn_BIT_50); + readData(51, var_BIT_51, conn_BIT_51); + readData(52, var_BIT_52, conn_BIT_52); + readData(53, var_BIT_53, conn_BIT_53); + readData(54, var_BIT_54, conn_BIT_54); + readData(55, var_BIT_55, conn_BIT_55); + readData(56, var_BIT_56, conn_BIT_56); + readData(57, var_BIT_57, conn_BIT_57); + readData(58, var_BIT_58, conn_BIT_58); + readData(59, var_BIT_59, conn_BIT_59); + readData(60, var_BIT_60, conn_BIT_60); + readData(61, var_BIT_61, conn_BIT_61); + readData(62, var_BIT_62, conn_BIT_62); + readData(63, var_BIT_63, conn_BIT_63); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_LWORD_FROM_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_LWORD_FROM_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + case 16: return &var_BIT_16; + case 17: return &var_BIT_17; + case 18: return &var_BIT_18; + case 19: return &var_BIT_19; + case 20: return &var_BIT_20; + case 21: return &var_BIT_21; + case 22: return &var_BIT_22; + case 23: return &var_BIT_23; + case 24: return &var_BIT_24; + case 25: return &var_BIT_25; + case 26: return &var_BIT_26; + case 27: return &var_BIT_27; + case 28: return &var_BIT_28; + case 29: return &var_BIT_29; + case 30: return &var_BIT_30; + case 31: return &var_BIT_31; + case 32: return &var_BIT_32; + case 33: return &var_BIT_33; + case 34: return &var_BIT_34; + case 35: return &var_BIT_35; + case 36: return &var_BIT_36; + case 37: return &var_BIT_37; + case 38: return &var_BIT_38; + case 39: return &var_BIT_39; + case 40: return &var_BIT_40; + case 41: return &var_BIT_41; + case 42: return &var_BIT_42; + case 43: return &var_BIT_43; + case 44: return &var_BIT_44; + case 45: return &var_BIT_45; + case 46: return &var_BIT_46; + case 47: return &var_BIT_47; + case 48: return &var_BIT_48; + case 49: return &var_BIT_49; + case 50: return &var_BIT_50; + case 51: return &var_BIT_51; + case 52: return &var_BIT_52; + case 53: return &var_BIT_53; + case 54: return &var_BIT_54; + case 55: return &var_BIT_55; + case 56: return &var_BIT_56; + case 57: return &var_BIT_57; + case 58: return &var_BIT_58; + case 59: return &var_BIT_59; + case 60: return &var_BIT_60; + case 61: return &var_BIT_61; + case 62: return &var_BIT_62; + case 63: return &var_BIT_63; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_LWORD_FROM_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_LWORD_FROM_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_LWORD_FROM_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + case 16: return &conn_BIT_16; + case 17: return &conn_BIT_17; + case 18: return &conn_BIT_18; + case 19: return &conn_BIT_19; + case 20: return &conn_BIT_20; + case 21: return &conn_BIT_21; + case 22: return &conn_BIT_22; + case 23: return &conn_BIT_23; + case 24: return &conn_BIT_24; + case 25: return &conn_BIT_25; + case 26: return &conn_BIT_26; + case 27: return &conn_BIT_27; + case 28: return &conn_BIT_28; + case 29: return &conn_BIT_29; + case 30: return &conn_BIT_30; + case 31: return &conn_BIT_31; + case 32: return &conn_BIT_32; + case 33: return &conn_BIT_33; + case 34: return &conn_BIT_34; + case 35: return &conn_BIT_35; + case 36: return &conn_BIT_36; + case 37: return &conn_BIT_37; + case 38: return &conn_BIT_38; + case 39: return &conn_BIT_39; + case 40: return &conn_BIT_40; + case 41: return &conn_BIT_41; + case 42: return &conn_BIT_42; + case 43: return &conn_BIT_43; + case 44: return &conn_BIT_44; + case 45: return &conn_BIT_45; + case 46: return &conn_BIT_46; + case 47: return &conn_BIT_47; + case 48: return &conn_BIT_48; + case 49: return &conn_BIT_49; + case 50: return &conn_BIT_50; + case 51: return &conn_BIT_51; + case 52: return &conn_BIT_52; + case 53: return &conn_BIT_53; + case 54: return &conn_BIT_54; + case 55: return &conn_BIT_55; + case 56: return &conn_BIT_56; + case 57: return &conn_BIT_57; + case 58: return &conn_BIT_58; + case 59: return &conn_BIT_59; + case 60: return &conn_BIT_60; + case 61: return &conn_BIT_61; + case 62: return &conn_BIT_62; + case 63: return &conn_BIT_63; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_LWORD_FROM_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_LWORD_FROM_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_LWORD_FROM_BOOLS(var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15, var_BIT_16, var_BIT_17, var_BIT_18, var_BIT_19, var_BIT_20, var_BIT_21, var_BIT_22, var_BIT_23, var_BIT_24, var_BIT_25, var_BIT_26, var_BIT_27, var_BIT_28, var_BIT_29, var_BIT_30, var_BIT_31, var_BIT_32, var_BIT_33, var_BIT_34, var_BIT_35, var_BIT_36, var_BIT_37, var_BIT_38, var_BIT_39, var_BIT_40, var_BIT_41, var_BIT_42, var_BIT_43, var_BIT_44, var_BIT_45, var_BIT_46, var_BIT_47, var_BIT_48, var_BIT_49, var_BIT_50, var_BIT_51, var_BIT_52, var_BIT_53, var_BIT_54, var_BIT_55, var_BIT_56, var_BIT_57, var_BIT_58, var_BIT_59, var_BIT_60, var_BIT_61, var_BIT_62, var_BIT_63); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_LWORD func_ASSEMBLE_LWORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15, CIEC_BOOL st_lv_BIT_16, CIEC_BOOL st_lv_BIT_17, CIEC_BOOL st_lv_BIT_18, CIEC_BOOL st_lv_BIT_19, CIEC_BOOL st_lv_BIT_20, CIEC_BOOL st_lv_BIT_21, CIEC_BOOL st_lv_BIT_22, CIEC_BOOL st_lv_BIT_23, CIEC_BOOL st_lv_BIT_24, CIEC_BOOL st_lv_BIT_25, CIEC_BOOL st_lv_BIT_26, CIEC_BOOL st_lv_BIT_27, CIEC_BOOL st_lv_BIT_28, CIEC_BOOL st_lv_BIT_29, CIEC_BOOL st_lv_BIT_30, CIEC_BOOL st_lv_BIT_31, CIEC_BOOL st_lv_BIT_32, CIEC_BOOL st_lv_BIT_33, CIEC_BOOL st_lv_BIT_34, CIEC_BOOL st_lv_BIT_35, CIEC_BOOL st_lv_BIT_36, CIEC_BOOL st_lv_BIT_37, CIEC_BOOL st_lv_BIT_38, CIEC_BOOL st_lv_BIT_39, CIEC_BOOL st_lv_BIT_40, CIEC_BOOL st_lv_BIT_41, CIEC_BOOL st_lv_BIT_42, CIEC_BOOL st_lv_BIT_43, CIEC_BOOL st_lv_BIT_44, CIEC_BOOL st_lv_BIT_45, CIEC_BOOL st_lv_BIT_46, CIEC_BOOL st_lv_BIT_47, CIEC_BOOL st_lv_BIT_48, CIEC_BOOL st_lv_BIT_49, CIEC_BOOL st_lv_BIT_50, CIEC_BOOL st_lv_BIT_51, CIEC_BOOL st_lv_BIT_52, CIEC_BOOL st_lv_BIT_53, CIEC_BOOL st_lv_BIT_54, CIEC_BOOL st_lv_BIT_55, CIEC_BOOL st_lv_BIT_56, CIEC_BOOL st_lv_BIT_57, CIEC_BOOL st_lv_BIT_58, CIEC_BOOL st_lv_BIT_59, CIEC_BOOL st_lv_BIT_60, CIEC_BOOL st_lv_BIT_61, CIEC_BOOL st_lv_BIT_62, CIEC_BOOL st_lv_BIT_63) { + CIEC_LWORD st_ret_val = 0_LWORD; + + #line 71 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(0) = st_lv_BIT_00; + #line 72 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(1) = st_lv_BIT_01; + #line 73 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(2) = st_lv_BIT_02; + #line 74 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(3) = st_lv_BIT_03; + #line 75 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(4) = st_lv_BIT_04; + #line 76 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(5) = st_lv_BIT_05; + #line 77 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(6) = st_lv_BIT_06; + #line 78 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(7) = st_lv_BIT_07; + #line 79 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(8) = st_lv_BIT_08; + #line 80 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(9) = st_lv_BIT_09; + #line 81 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(10) = st_lv_BIT_10; + #line 82 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(11) = st_lv_BIT_11; + #line 83 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(12) = st_lv_BIT_12; + #line 84 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(13) = st_lv_BIT_13; + #line 85 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(14) = st_lv_BIT_14; + #line 86 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(15) = st_lv_BIT_15; + #line 87 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(16) = st_lv_BIT_16; + #line 88 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(17) = st_lv_BIT_17; + #line 89 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(18) = st_lv_BIT_18; + #line 90 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(19) = st_lv_BIT_19; + #line 91 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(20) = st_lv_BIT_20; + #line 92 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(21) = st_lv_BIT_21; + #line 93 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(22) = st_lv_BIT_22; + #line 94 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(23) = st_lv_BIT_23; + #line 95 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(24) = st_lv_BIT_24; + #line 96 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(25) = st_lv_BIT_25; + #line 97 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(26) = st_lv_BIT_26; + #line 98 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(27) = st_lv_BIT_27; + #line 99 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(28) = st_lv_BIT_28; + #line 100 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(29) = st_lv_BIT_29; + #line 101 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(30) = st_lv_BIT_30; + #line 102 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(31) = st_lv_BIT_31; + #line 103 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(32) = st_lv_BIT_32; + #line 104 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(33) = st_lv_BIT_33; + #line 105 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(34) = st_lv_BIT_34; + #line 106 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(35) = st_lv_BIT_35; + #line 107 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(36) = st_lv_BIT_36; + #line 108 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(37) = st_lv_BIT_37; + #line 109 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(38) = st_lv_BIT_38; + #line 110 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(39) = st_lv_BIT_39; + #line 111 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(40) = st_lv_BIT_40; + #line 112 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(41) = st_lv_BIT_41; + #line 113 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(42) = st_lv_BIT_42; + #line 114 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(43) = st_lv_BIT_43; + #line 115 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(44) = st_lv_BIT_44; + #line 116 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(45) = st_lv_BIT_45; + #line 117 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(46) = st_lv_BIT_46; + #line 118 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(47) = st_lv_BIT_47; + #line 119 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(48) = st_lv_BIT_48; + #line 120 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(49) = st_lv_BIT_49; + #line 121 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(50) = st_lv_BIT_50; + #line 122 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(51) = st_lv_BIT_51; + #line 123 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(52) = st_lv_BIT_52; + #line 124 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(53) = st_lv_BIT_53; + #line 125 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(54) = st_lv_BIT_54; + #line 126 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(55) = st_lv_BIT_55; + #line 127 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(56) = st_lv_BIT_56; + #line 128 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(57) = st_lv_BIT_57; + #line 129 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(58) = st_lv_BIT_58; + #line 130 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(59) = st_lv_BIT_59; + #line 131 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(60) = st_lv_BIT_60; + #line 132 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(61) = st_lv_BIT_61; + #line 133 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(62) = st_lv_BIT_62; + #line 134 "ASSEMBLE_LWORD_FROM_BOOLS.fct" + st_ret_val.partial(63) = st_lv_BIT_63; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.h b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.h new file mode 100644 index 000000000..c336bc2d5 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_BOOLS_fct.h @@ -0,0 +1,279 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_LWORD_FROM_BOOLS + *** Description: this Function combines the 64 BOOLS to a LWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_lword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_LWORD_FROM_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_LWORD_FROM_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_LWORD_FROM_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + CIEC_BOOL var_BIT_16; + CIEC_BOOL var_BIT_17; + CIEC_BOOL var_BIT_18; + CIEC_BOOL var_BIT_19; + CIEC_BOOL var_BIT_20; + CIEC_BOOL var_BIT_21; + CIEC_BOOL var_BIT_22; + CIEC_BOOL var_BIT_23; + CIEC_BOOL var_BIT_24; + CIEC_BOOL var_BIT_25; + CIEC_BOOL var_BIT_26; + CIEC_BOOL var_BIT_27; + CIEC_BOOL var_BIT_28; + CIEC_BOOL var_BIT_29; + CIEC_BOOL var_BIT_30; + CIEC_BOOL var_BIT_31; + CIEC_BOOL var_BIT_32; + CIEC_BOOL var_BIT_33; + CIEC_BOOL var_BIT_34; + CIEC_BOOL var_BIT_35; + CIEC_BOOL var_BIT_36; + CIEC_BOOL var_BIT_37; + CIEC_BOOL var_BIT_38; + CIEC_BOOL var_BIT_39; + CIEC_BOOL var_BIT_40; + CIEC_BOOL var_BIT_41; + CIEC_BOOL var_BIT_42; + CIEC_BOOL var_BIT_43; + CIEC_BOOL var_BIT_44; + CIEC_BOOL var_BIT_45; + CIEC_BOOL var_BIT_46; + CIEC_BOOL var_BIT_47; + CIEC_BOOL var_BIT_48; + CIEC_BOOL var_BIT_49; + CIEC_BOOL var_BIT_50; + CIEC_BOOL var_BIT_51; + CIEC_BOOL var_BIT_52; + CIEC_BOOL var_BIT_53; + CIEC_BOOL var_BIT_54; + CIEC_BOOL var_BIT_55; + CIEC_BOOL var_BIT_56; + CIEC_BOOL var_BIT_57; + CIEC_BOOL var_BIT_58; + CIEC_BOOL var_BIT_59; + CIEC_BOOL var_BIT_60; + CIEC_BOOL var_BIT_61; + CIEC_BOOL var_BIT_62; + CIEC_BOOL var_BIT_63; + + CIEC_LWORD var_; + + CIEC_LWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BIT_00; + CDataConnection *conn_BIT_01; + CDataConnection *conn_BIT_02; + CDataConnection *conn_BIT_03; + CDataConnection *conn_BIT_04; + CDataConnection *conn_BIT_05; + CDataConnection *conn_BIT_06; + CDataConnection *conn_BIT_07; + CDataConnection *conn_BIT_08; + CDataConnection *conn_BIT_09; + CDataConnection *conn_BIT_10; + CDataConnection *conn_BIT_11; + CDataConnection *conn_BIT_12; + CDataConnection *conn_BIT_13; + CDataConnection *conn_BIT_14; + CDataConnection *conn_BIT_15; + CDataConnection *conn_BIT_16; + CDataConnection *conn_BIT_17; + CDataConnection *conn_BIT_18; + CDataConnection *conn_BIT_19; + CDataConnection *conn_BIT_20; + CDataConnection *conn_BIT_21; + CDataConnection *conn_BIT_22; + CDataConnection *conn_BIT_23; + CDataConnection *conn_BIT_24; + CDataConnection *conn_BIT_25; + CDataConnection *conn_BIT_26; + CDataConnection *conn_BIT_27; + CDataConnection *conn_BIT_28; + CDataConnection *conn_BIT_29; + CDataConnection *conn_BIT_30; + CDataConnection *conn_BIT_31; + CDataConnection *conn_BIT_32; + CDataConnection *conn_BIT_33; + CDataConnection *conn_BIT_34; + CDataConnection *conn_BIT_35; + CDataConnection *conn_BIT_36; + CDataConnection *conn_BIT_37; + CDataConnection *conn_BIT_38; + CDataConnection *conn_BIT_39; + CDataConnection *conn_BIT_40; + CDataConnection *conn_BIT_41; + CDataConnection *conn_BIT_42; + CDataConnection *conn_BIT_43; + CDataConnection *conn_BIT_44; + CDataConnection *conn_BIT_45; + CDataConnection *conn_BIT_46; + CDataConnection *conn_BIT_47; + CDataConnection *conn_BIT_48; + CDataConnection *conn_BIT_49; + CDataConnection *conn_BIT_50; + CDataConnection *conn_BIT_51; + CDataConnection *conn_BIT_52; + CDataConnection *conn_BIT_53; + CDataConnection *conn_BIT_54; + CDataConnection *conn_BIT_55; + CDataConnection *conn_BIT_56; + CDataConnection *conn_BIT_57; + CDataConnection *conn_BIT_58; + CDataConnection *conn_BIT_59; + CDataConnection *conn_BIT_60; + CDataConnection *conn_BIT_61; + CDataConnection *conn_BIT_62; + CDataConnection *conn_BIT_63; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, const CIEC_BOOL &paBIT_16, const CIEC_BOOL &paBIT_17, const CIEC_BOOL &paBIT_18, const CIEC_BOOL &paBIT_19, const CIEC_BOOL &paBIT_20, const CIEC_BOOL &paBIT_21, const CIEC_BOOL &paBIT_22, const CIEC_BOOL &paBIT_23, const CIEC_BOOL &paBIT_24, const CIEC_BOOL &paBIT_25, const CIEC_BOOL &paBIT_26, const CIEC_BOOL &paBIT_27, const CIEC_BOOL &paBIT_28, const CIEC_BOOL &paBIT_29, const CIEC_BOOL &paBIT_30, const CIEC_BOOL &paBIT_31, const CIEC_BOOL &paBIT_32, const CIEC_BOOL &paBIT_33, const CIEC_BOOL &paBIT_34, const CIEC_BOOL &paBIT_35, const CIEC_BOOL &paBIT_36, const CIEC_BOOL &paBIT_37, const CIEC_BOOL &paBIT_38, const CIEC_BOOL &paBIT_39, const CIEC_BOOL &paBIT_40, const CIEC_BOOL &paBIT_41, const CIEC_BOOL &paBIT_42, const CIEC_BOOL &paBIT_43, const CIEC_BOOL &paBIT_44, const CIEC_BOOL &paBIT_45, const CIEC_BOOL &paBIT_46, const CIEC_BOOL &paBIT_47, const CIEC_BOOL &paBIT_48, const CIEC_BOOL &paBIT_49, const CIEC_BOOL &paBIT_50, const CIEC_BOOL &paBIT_51, const CIEC_BOOL &paBIT_52, const CIEC_BOOL &paBIT_53, const CIEC_BOOL &paBIT_54, const CIEC_BOOL &paBIT_55, const CIEC_BOOL &paBIT_56, const CIEC_BOOL &paBIT_57, const CIEC_BOOL &paBIT_58, const CIEC_BOOL &paBIT_59, const CIEC_BOOL &paBIT_60, const CIEC_BOOL &paBIT_61, const CIEC_BOOL &paBIT_62, const CIEC_BOOL &paBIT_63, CIEC_LWORD &pa) { + var_BIT_00 = paBIT_00; + var_BIT_01 = paBIT_01; + var_BIT_02 = paBIT_02; + var_BIT_03 = paBIT_03; + var_BIT_04 = paBIT_04; + var_BIT_05 = paBIT_05; + var_BIT_06 = paBIT_06; + var_BIT_07 = paBIT_07; + var_BIT_08 = paBIT_08; + var_BIT_09 = paBIT_09; + var_BIT_10 = paBIT_10; + var_BIT_11 = paBIT_11; + var_BIT_12 = paBIT_12; + var_BIT_13 = paBIT_13; + var_BIT_14 = paBIT_14; + var_BIT_15 = paBIT_15; + var_BIT_16 = paBIT_16; + var_BIT_17 = paBIT_17; + var_BIT_18 = paBIT_18; + var_BIT_19 = paBIT_19; + var_BIT_20 = paBIT_20; + var_BIT_21 = paBIT_21; + var_BIT_22 = paBIT_22; + var_BIT_23 = paBIT_23; + var_BIT_24 = paBIT_24; + var_BIT_25 = paBIT_25; + var_BIT_26 = paBIT_26; + var_BIT_27 = paBIT_27; + var_BIT_28 = paBIT_28; + var_BIT_29 = paBIT_29; + var_BIT_30 = paBIT_30; + var_BIT_31 = paBIT_31; + var_BIT_32 = paBIT_32; + var_BIT_33 = paBIT_33; + var_BIT_34 = paBIT_34; + var_BIT_35 = paBIT_35; + var_BIT_36 = paBIT_36; + var_BIT_37 = paBIT_37; + var_BIT_38 = paBIT_38; + var_BIT_39 = paBIT_39; + var_BIT_40 = paBIT_40; + var_BIT_41 = paBIT_41; + var_BIT_42 = paBIT_42; + var_BIT_43 = paBIT_43; + var_BIT_44 = paBIT_44; + var_BIT_45 = paBIT_45; + var_BIT_46 = paBIT_46; + var_BIT_47 = paBIT_47; + var_BIT_48 = paBIT_48; + var_BIT_49 = paBIT_49; + var_BIT_50 = paBIT_50; + var_BIT_51 = paBIT_51; + var_BIT_52 = paBIT_52; + var_BIT_53 = paBIT_53; + var_BIT_54 = paBIT_54; + var_BIT_55 = paBIT_55; + var_BIT_56 = paBIT_56; + var_BIT_57 = paBIT_57; + var_BIT_58 = paBIT_58; + var_BIT_59 = paBIT_59; + var_BIT_60 = paBIT_60; + var_BIT_61 = paBIT_61; + var_BIT_62 = paBIT_62; + var_BIT_63 = paBIT_63; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, const CIEC_BOOL &paBIT_16, const CIEC_BOOL &paBIT_17, const CIEC_BOOL &paBIT_18, const CIEC_BOOL &paBIT_19, const CIEC_BOOL &paBIT_20, const CIEC_BOOL &paBIT_21, const CIEC_BOOL &paBIT_22, const CIEC_BOOL &paBIT_23, const CIEC_BOOL &paBIT_24, const CIEC_BOOL &paBIT_25, const CIEC_BOOL &paBIT_26, const CIEC_BOOL &paBIT_27, const CIEC_BOOL &paBIT_28, const CIEC_BOOL &paBIT_29, const CIEC_BOOL &paBIT_30, const CIEC_BOOL &paBIT_31, const CIEC_BOOL &paBIT_32, const CIEC_BOOL &paBIT_33, const CIEC_BOOL &paBIT_34, const CIEC_BOOL &paBIT_35, const CIEC_BOOL &paBIT_36, const CIEC_BOOL &paBIT_37, const CIEC_BOOL &paBIT_38, const CIEC_BOOL &paBIT_39, const CIEC_BOOL &paBIT_40, const CIEC_BOOL &paBIT_41, const CIEC_BOOL &paBIT_42, const CIEC_BOOL &paBIT_43, const CIEC_BOOL &paBIT_44, const CIEC_BOOL &paBIT_45, const CIEC_BOOL &paBIT_46, const CIEC_BOOL &paBIT_47, const CIEC_BOOL &paBIT_48, const CIEC_BOOL &paBIT_49, const CIEC_BOOL &paBIT_50, const CIEC_BOOL &paBIT_51, const CIEC_BOOL &paBIT_52, const CIEC_BOOL &paBIT_53, const CIEC_BOOL &paBIT_54, const CIEC_BOOL &paBIT_55, const CIEC_BOOL &paBIT_56, const CIEC_BOOL &paBIT_57, const CIEC_BOOL &paBIT_58, const CIEC_BOOL &paBIT_59, const CIEC_BOOL &paBIT_60, const CIEC_BOOL &paBIT_61, const CIEC_BOOL &paBIT_62, const CIEC_BOOL &paBIT_63, CIEC_LWORD &pa) { + evt_REQ(paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15, paBIT_16, paBIT_17, paBIT_18, paBIT_19, paBIT_20, paBIT_21, paBIT_22, paBIT_23, paBIT_24, paBIT_25, paBIT_26, paBIT_27, paBIT_28, paBIT_29, paBIT_30, paBIT_31, paBIT_32, paBIT_33, paBIT_34, paBIT_35, paBIT_36, paBIT_37, paBIT_38, paBIT_39, paBIT_40, paBIT_41, paBIT_42, paBIT_43, paBIT_44, paBIT_45, paBIT_46, paBIT_47, paBIT_48, paBIT_49, paBIT_50, paBIT_51, paBIT_52, paBIT_53, paBIT_54, paBIT_55, paBIT_56, paBIT_57, paBIT_58, paBIT_59, paBIT_60, paBIT_61, paBIT_62, paBIT_63, pa); + } +}; + +CIEC_LWORD func_ASSEMBLE_LWORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15, CIEC_BOOL st_lv_BIT_16, CIEC_BOOL st_lv_BIT_17, CIEC_BOOL st_lv_BIT_18, CIEC_BOOL st_lv_BIT_19, CIEC_BOOL st_lv_BIT_20, CIEC_BOOL st_lv_BIT_21, CIEC_BOOL st_lv_BIT_22, CIEC_BOOL st_lv_BIT_23, CIEC_BOOL st_lv_BIT_24, CIEC_BOOL st_lv_BIT_25, CIEC_BOOL st_lv_BIT_26, CIEC_BOOL st_lv_BIT_27, CIEC_BOOL st_lv_BIT_28, CIEC_BOOL st_lv_BIT_29, CIEC_BOOL st_lv_BIT_30, CIEC_BOOL st_lv_BIT_31, CIEC_BOOL st_lv_BIT_32, CIEC_BOOL st_lv_BIT_33, CIEC_BOOL st_lv_BIT_34, CIEC_BOOL st_lv_BIT_35, CIEC_BOOL st_lv_BIT_36, CIEC_BOOL st_lv_BIT_37, CIEC_BOOL st_lv_BIT_38, CIEC_BOOL st_lv_BIT_39, CIEC_BOOL st_lv_BIT_40, CIEC_BOOL st_lv_BIT_41, CIEC_BOOL st_lv_BIT_42, CIEC_BOOL st_lv_BIT_43, CIEC_BOOL st_lv_BIT_44, CIEC_BOOL st_lv_BIT_45, CIEC_BOOL st_lv_BIT_46, CIEC_BOOL st_lv_BIT_47, CIEC_BOOL st_lv_BIT_48, CIEC_BOOL st_lv_BIT_49, CIEC_BOOL st_lv_BIT_50, CIEC_BOOL st_lv_BIT_51, CIEC_BOOL st_lv_BIT_52, CIEC_BOOL st_lv_BIT_53, CIEC_BOOL st_lv_BIT_54, CIEC_BOOL st_lv_BIT_55, CIEC_BOOL st_lv_BIT_56, CIEC_BOOL st_lv_BIT_57, CIEC_BOOL st_lv_BIT_58, CIEC_BOOL st_lv_BIT_59, CIEC_BOOL st_lv_BIT_60, CIEC_BOOL st_lv_BIT_61, CIEC_BOOL st_lv_BIT_62, CIEC_BOOL st_lv_BIT_63); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.cpp new file mode 100644 index 000000000..d1c5494db --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.cpp @@ -0,0 +1,362 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_LWORD_FROM_QUARTERS + *** Description: this Function combines the 31 QUARTER BYTES to a LWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#include "ASSEMBLE_LWORD_FROM_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_LWORD_FROM_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "forte_lword.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" +#include "ASSEMBLE_LWORD_FROM_QUARTERS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_LWORD_FROM_QUARTERS, g_nStringIdASSEMBLE_LWORD_FROM_QUARTERS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmDataInputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07, g_nStringIdQUARTER_BYTE_08, g_nStringIdQUARTER_BYTE_09, g_nStringIdQUARTER_BYTE_10, g_nStringIdQUARTER_BYTE_11, g_nStringIdQUARTER_BYTE_12, g_nStringIdQUARTER_BYTE_13, g_nStringIdQUARTER_BYTE_14, g_nStringIdQUARTER_BYTE_15, g_nStringIdQUARTER_BYTE_16, g_nStringIdQUARTER_BYTE_17, g_nStringIdQUARTER_BYTE_18, g_nStringIdQUARTER_BYTE_19, g_nStringIdQUARTER_BYTE_20, g_nStringIdQUARTER_BYTE_21, g_nStringIdQUARTER_BYTE_22, g_nStringIdQUARTER_BYTE_23, g_nStringIdQUARTER_BYTE_24, g_nStringIdQUARTER_BYTE_25, g_nStringIdQUARTER_BYTE_26, g_nStringIdQUARTER_BYTE_27, g_nStringIdQUARTER_BYTE_28, g_nStringIdQUARTER_BYTE_29, g_nStringIdQUARTER_BYTE_30, g_nStringIdQUARTER_BYTE_31}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdLWORD}; +const TDataIOID FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 32, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::FORTE_ASSEMBLE_LWORD_FROM_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_QUARTER_BYTE_00(nullptr), + conn_QUARTER_BYTE_01(nullptr), + conn_QUARTER_BYTE_02(nullptr), + conn_QUARTER_BYTE_03(nullptr), + conn_QUARTER_BYTE_04(nullptr), + conn_QUARTER_BYTE_05(nullptr), + conn_QUARTER_BYTE_06(nullptr), + conn_QUARTER_BYTE_07(nullptr), + conn_QUARTER_BYTE_08(nullptr), + conn_QUARTER_BYTE_09(nullptr), + conn_QUARTER_BYTE_10(nullptr), + conn_QUARTER_BYTE_11(nullptr), + conn_QUARTER_BYTE_12(nullptr), + conn_QUARTER_BYTE_13(nullptr), + conn_QUARTER_BYTE_14(nullptr), + conn_QUARTER_BYTE_15(nullptr), + conn_QUARTER_BYTE_16(nullptr), + conn_QUARTER_BYTE_17(nullptr), + conn_QUARTER_BYTE_18(nullptr), + conn_QUARTER_BYTE_19(nullptr), + conn_QUARTER_BYTE_20(nullptr), + conn_QUARTER_BYTE_21(nullptr), + conn_QUARTER_BYTE_22(nullptr), + conn_QUARTER_BYTE_23(nullptr), + conn_QUARTER_BYTE_24(nullptr), + conn_QUARTER_BYTE_25(nullptr), + conn_QUARTER_BYTE_26(nullptr), + conn_QUARTER_BYTE_27(nullptr), + conn_QUARTER_BYTE_28(nullptr), + conn_QUARTER_BYTE_29(nullptr), + conn_QUARTER_BYTE_30(nullptr), + conn_QUARTER_BYTE_31(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::setInitialValues() { + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; + var_QUARTER_BYTE_08 = 0_BYTE; + var_QUARTER_BYTE_09 = 0_BYTE; + var_QUARTER_BYTE_10 = 0_BYTE; + var_QUARTER_BYTE_11 = 0_BYTE; + var_QUARTER_BYTE_12 = 0_BYTE; + var_QUARTER_BYTE_13 = 0_BYTE; + var_QUARTER_BYTE_14 = 0_BYTE; + var_QUARTER_BYTE_15 = 0_BYTE; + var_QUARTER_BYTE_16 = 0_BYTE; + var_QUARTER_BYTE_17 = 0_BYTE; + var_QUARTER_BYTE_18 = 0_BYTE; + var_QUARTER_BYTE_19 = 0_BYTE; + var_QUARTER_BYTE_20 = 0_BYTE; + var_QUARTER_BYTE_21 = 0_BYTE; + var_QUARTER_BYTE_22 = 0_BYTE; + var_QUARTER_BYTE_23 = 0_BYTE; + var_QUARTER_BYTE_24 = 0_BYTE; + var_QUARTER_BYTE_25 = 0_BYTE; + var_QUARTER_BYTE_26 = 0_BYTE; + var_QUARTER_BYTE_27 = 0_BYTE; + var_QUARTER_BYTE_28 = 0_BYTE; + var_QUARTER_BYTE_29 = 0_BYTE; + var_QUARTER_BYTE_30 = 0_BYTE; + var_QUARTER_BYTE_31 = 0_BYTE; + var_ = 0_LWORD; +} + +void FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + readData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + readData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + readData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + readData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + readData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + readData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + readData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + readData(8, var_QUARTER_BYTE_08, conn_QUARTER_BYTE_08); + readData(9, var_QUARTER_BYTE_09, conn_QUARTER_BYTE_09); + readData(10, var_QUARTER_BYTE_10, conn_QUARTER_BYTE_10); + readData(11, var_QUARTER_BYTE_11, conn_QUARTER_BYTE_11); + readData(12, var_QUARTER_BYTE_12, conn_QUARTER_BYTE_12); + readData(13, var_QUARTER_BYTE_13, conn_QUARTER_BYTE_13); + readData(14, var_QUARTER_BYTE_14, conn_QUARTER_BYTE_14); + readData(15, var_QUARTER_BYTE_15, conn_QUARTER_BYTE_15); + readData(16, var_QUARTER_BYTE_16, conn_QUARTER_BYTE_16); + readData(17, var_QUARTER_BYTE_17, conn_QUARTER_BYTE_17); + readData(18, var_QUARTER_BYTE_18, conn_QUARTER_BYTE_18); + readData(19, var_QUARTER_BYTE_19, conn_QUARTER_BYTE_19); + readData(20, var_QUARTER_BYTE_20, conn_QUARTER_BYTE_20); + readData(21, var_QUARTER_BYTE_21, conn_QUARTER_BYTE_21); + readData(22, var_QUARTER_BYTE_22, conn_QUARTER_BYTE_22); + readData(23, var_QUARTER_BYTE_23, conn_QUARTER_BYTE_23); + readData(24, var_QUARTER_BYTE_24, conn_QUARTER_BYTE_24); + readData(25, var_QUARTER_BYTE_25, conn_QUARTER_BYTE_25); + readData(26, var_QUARTER_BYTE_26, conn_QUARTER_BYTE_26); + readData(27, var_QUARTER_BYTE_27, conn_QUARTER_BYTE_27); + readData(28, var_QUARTER_BYTE_28, conn_QUARTER_BYTE_28); + readData(29, var_QUARTER_BYTE_29, conn_QUARTER_BYTE_29); + readData(30, var_QUARTER_BYTE_30, conn_QUARTER_BYTE_30); + readData(31, var_QUARTER_BYTE_31, conn_QUARTER_BYTE_31); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + case 8: return &var_QUARTER_BYTE_08; + case 9: return &var_QUARTER_BYTE_09; + case 10: return &var_QUARTER_BYTE_10; + case 11: return &var_QUARTER_BYTE_11; + case 12: return &var_QUARTER_BYTE_12; + case 13: return &var_QUARTER_BYTE_13; + case 14: return &var_QUARTER_BYTE_14; + case 15: return &var_QUARTER_BYTE_15; + case 16: return &var_QUARTER_BYTE_16; + case 17: return &var_QUARTER_BYTE_17; + case 18: return &var_QUARTER_BYTE_18; + case 19: return &var_QUARTER_BYTE_19; + case 20: return &var_QUARTER_BYTE_20; + case 21: return &var_QUARTER_BYTE_21; + case 22: return &var_QUARTER_BYTE_22; + case 23: return &var_QUARTER_BYTE_23; + case 24: return &var_QUARTER_BYTE_24; + case 25: return &var_QUARTER_BYTE_25; + case 26: return &var_QUARTER_BYTE_26; + case 27: return &var_QUARTER_BYTE_27; + case 28: return &var_QUARTER_BYTE_28; + case 29: return &var_QUARTER_BYTE_29; + case 30: return &var_QUARTER_BYTE_30; + case 31: return &var_QUARTER_BYTE_31; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + case 8: return &conn_QUARTER_BYTE_08; + case 9: return &conn_QUARTER_BYTE_09; + case 10: return &conn_QUARTER_BYTE_10; + case 11: return &conn_QUARTER_BYTE_11; + case 12: return &conn_QUARTER_BYTE_12; + case 13: return &conn_QUARTER_BYTE_13; + case 14: return &conn_QUARTER_BYTE_14; + case 15: return &conn_QUARTER_BYTE_15; + case 16: return &conn_QUARTER_BYTE_16; + case 17: return &conn_QUARTER_BYTE_17; + case 18: return &conn_QUARTER_BYTE_18; + case 19: return &conn_QUARTER_BYTE_19; + case 20: return &conn_QUARTER_BYTE_20; + case 21: return &conn_QUARTER_BYTE_21; + case 22: return &conn_QUARTER_BYTE_22; + case 23: return &conn_QUARTER_BYTE_23; + case 24: return &conn_QUARTER_BYTE_24; + case 25: return &conn_QUARTER_BYTE_25; + case 26: return &conn_QUARTER_BYTE_26; + case 27: return &conn_QUARTER_BYTE_27; + case 28: return &conn_QUARTER_BYTE_28; + case 29: return &conn_QUARTER_BYTE_29; + case 30: return &conn_QUARTER_BYTE_30; + case 31: return &conn_QUARTER_BYTE_31; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_LWORD_FROM_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_LWORD_FROM_QUARTERS(var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07, var_QUARTER_BYTE_08, var_QUARTER_BYTE_09, var_QUARTER_BYTE_10, var_QUARTER_BYTE_11, var_QUARTER_BYTE_12, var_QUARTER_BYTE_13, var_QUARTER_BYTE_14, var_QUARTER_BYTE_15, var_QUARTER_BYTE_16, var_QUARTER_BYTE_17, var_QUARTER_BYTE_18, var_QUARTER_BYTE_19, var_QUARTER_BYTE_20, var_QUARTER_BYTE_21, var_QUARTER_BYTE_22, var_QUARTER_BYTE_23, var_QUARTER_BYTE_24, var_QUARTER_BYTE_25, var_QUARTER_BYTE_26, var_QUARTER_BYTE_27, var_QUARTER_BYTE_28, var_QUARTER_BYTE_29, var_QUARTER_BYTE_30, var_QUARTER_BYTE_31); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_LWORD func_ASSEMBLE_LWORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07, CIEC_BYTE st_lv_QUARTER_BYTE_08, CIEC_BYTE st_lv_QUARTER_BYTE_09, CIEC_BYTE st_lv_QUARTER_BYTE_10, CIEC_BYTE st_lv_QUARTER_BYTE_11, CIEC_BYTE st_lv_QUARTER_BYTE_12, CIEC_BYTE st_lv_QUARTER_BYTE_13, CIEC_BYTE st_lv_QUARTER_BYTE_14, CIEC_BYTE st_lv_QUARTER_BYTE_15, CIEC_BYTE st_lv_QUARTER_BYTE_16, CIEC_BYTE st_lv_QUARTER_BYTE_17, CIEC_BYTE st_lv_QUARTER_BYTE_18, CIEC_BYTE st_lv_QUARTER_BYTE_19, CIEC_BYTE st_lv_QUARTER_BYTE_20, CIEC_BYTE st_lv_QUARTER_BYTE_21, CIEC_BYTE st_lv_QUARTER_BYTE_22, CIEC_BYTE st_lv_QUARTER_BYTE_23, CIEC_BYTE st_lv_QUARTER_BYTE_24, CIEC_BYTE st_lv_QUARTER_BYTE_25, CIEC_BYTE st_lv_QUARTER_BYTE_26, CIEC_BYTE st_lv_QUARTER_BYTE_27, CIEC_BYTE st_lv_QUARTER_BYTE_28, CIEC_BYTE st_lv_QUARTER_BYTE_29, CIEC_BYTE st_lv_QUARTER_BYTE_30, CIEC_BYTE st_lv_QUARTER_BYTE_31) { + CIEC_LWORD st_ret_val = 0_LWORD; + + #line 39 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = st_global_LWORD_QUARTER_ZZ; + #line 40 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_31), st_global_SHIFT_QUARTER_31)); + #line 41 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_30), st_global_SHIFT_QUARTER_30)); + #line 42 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_29), st_global_SHIFT_QUARTER_29)); + #line 43 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_28), st_global_SHIFT_QUARTER_28)); + #line 44 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_27), st_global_SHIFT_QUARTER_27)); + #line 45 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_26), st_global_SHIFT_QUARTER_26)); + #line 46 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_25), st_global_SHIFT_QUARTER_25)); + #line 47 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_24), st_global_SHIFT_QUARTER_24)); + #line 48 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_23), st_global_SHIFT_QUARTER_23)); + #line 49 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_22), st_global_SHIFT_QUARTER_22)); + #line 50 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_21), st_global_SHIFT_QUARTER_21)); + #line 51 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_20), st_global_SHIFT_QUARTER_20)); + #line 52 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_19), st_global_SHIFT_QUARTER_19)); + #line 53 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_18), st_global_SHIFT_QUARTER_18)); + #line 54 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_17), st_global_SHIFT_QUARTER_17)); + #line 55 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_16), st_global_SHIFT_QUARTER_16)); + #line 56 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_15), st_global_SHIFT_QUARTER_15)); + #line 57 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_14), st_global_SHIFT_QUARTER_14)); + #line 58 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_13), st_global_SHIFT_QUARTER_13)); + #line 59 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_12), st_global_SHIFT_QUARTER_12)); + #line 60 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_11), st_global_SHIFT_QUARTER_11)); + #line 61 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_10), st_global_SHIFT_QUARTER_10)); + #line 62 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_09), st_global_SHIFT_QUARTER_09)); + #line 63 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_08), st_global_SHIFT_QUARTER_08)); + #line 64 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_07), st_global_SHIFT_QUARTER_07)); + #line 65 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_06), st_global_SHIFT_QUARTER_06)); + #line 66 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_05), st_global_SHIFT_QUARTER_05)); + #line 67 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_04), st_global_SHIFT_QUARTER_04)); + #line 68 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_03), st_global_SHIFT_QUARTER_03)); + #line 69 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_02), st_global_SHIFT_QUARTER_02)); + #line 70 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_01), st_global_SHIFT_QUARTER_01)); + #line 71 "ASSEMBLE_LWORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_LWORD(st_lv_QUARTER_BYTE_00), st_global_SHIFT_QUARTER_00)); + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.h b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.h new file mode 100644 index 000000000..5ea3a07ab --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_LWORD_FROM_QUARTERS_fct.h @@ -0,0 +1,183 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_LWORD_FROM_QUARTERS + *** Description: this Function combines the 31 QUARTER BYTES to a LWORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_lword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_LWORD_FROM_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_LWORD_FROM_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_LWORD_FROM_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + CIEC_BYTE var_QUARTER_BYTE_08; + CIEC_BYTE var_QUARTER_BYTE_09; + CIEC_BYTE var_QUARTER_BYTE_10; + CIEC_BYTE var_QUARTER_BYTE_11; + CIEC_BYTE var_QUARTER_BYTE_12; + CIEC_BYTE var_QUARTER_BYTE_13; + CIEC_BYTE var_QUARTER_BYTE_14; + CIEC_BYTE var_QUARTER_BYTE_15; + CIEC_BYTE var_QUARTER_BYTE_16; + CIEC_BYTE var_QUARTER_BYTE_17; + CIEC_BYTE var_QUARTER_BYTE_18; + CIEC_BYTE var_QUARTER_BYTE_19; + CIEC_BYTE var_QUARTER_BYTE_20; + CIEC_BYTE var_QUARTER_BYTE_21; + CIEC_BYTE var_QUARTER_BYTE_22; + CIEC_BYTE var_QUARTER_BYTE_23; + CIEC_BYTE var_QUARTER_BYTE_24; + CIEC_BYTE var_QUARTER_BYTE_25; + CIEC_BYTE var_QUARTER_BYTE_26; + CIEC_BYTE var_QUARTER_BYTE_27; + CIEC_BYTE var_QUARTER_BYTE_28; + CIEC_BYTE var_QUARTER_BYTE_29; + CIEC_BYTE var_QUARTER_BYTE_30; + CIEC_BYTE var_QUARTER_BYTE_31; + + CIEC_LWORD var_; + + CIEC_LWORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_QUARTER_BYTE_00; + CDataConnection *conn_QUARTER_BYTE_01; + CDataConnection *conn_QUARTER_BYTE_02; + CDataConnection *conn_QUARTER_BYTE_03; + CDataConnection *conn_QUARTER_BYTE_04; + CDataConnection *conn_QUARTER_BYTE_05; + CDataConnection *conn_QUARTER_BYTE_06; + CDataConnection *conn_QUARTER_BYTE_07; + CDataConnection *conn_QUARTER_BYTE_08; + CDataConnection *conn_QUARTER_BYTE_09; + CDataConnection *conn_QUARTER_BYTE_10; + CDataConnection *conn_QUARTER_BYTE_11; + CDataConnection *conn_QUARTER_BYTE_12; + CDataConnection *conn_QUARTER_BYTE_13; + CDataConnection *conn_QUARTER_BYTE_14; + CDataConnection *conn_QUARTER_BYTE_15; + CDataConnection *conn_QUARTER_BYTE_16; + CDataConnection *conn_QUARTER_BYTE_17; + CDataConnection *conn_QUARTER_BYTE_18; + CDataConnection *conn_QUARTER_BYTE_19; + CDataConnection *conn_QUARTER_BYTE_20; + CDataConnection *conn_QUARTER_BYTE_21; + CDataConnection *conn_QUARTER_BYTE_22; + CDataConnection *conn_QUARTER_BYTE_23; + CDataConnection *conn_QUARTER_BYTE_24; + CDataConnection *conn_QUARTER_BYTE_25; + CDataConnection *conn_QUARTER_BYTE_26; + CDataConnection *conn_QUARTER_BYTE_27; + CDataConnection *conn_QUARTER_BYTE_28; + CDataConnection *conn_QUARTER_BYTE_29; + CDataConnection *conn_QUARTER_BYTE_30; + CDataConnection *conn_QUARTER_BYTE_31; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, const CIEC_BYTE &paQUARTER_BYTE_08, const CIEC_BYTE &paQUARTER_BYTE_09, const CIEC_BYTE &paQUARTER_BYTE_10, const CIEC_BYTE &paQUARTER_BYTE_11, const CIEC_BYTE &paQUARTER_BYTE_12, const CIEC_BYTE &paQUARTER_BYTE_13, const CIEC_BYTE &paQUARTER_BYTE_14, const CIEC_BYTE &paQUARTER_BYTE_15, const CIEC_BYTE &paQUARTER_BYTE_16, const CIEC_BYTE &paQUARTER_BYTE_17, const CIEC_BYTE &paQUARTER_BYTE_18, const CIEC_BYTE &paQUARTER_BYTE_19, const CIEC_BYTE &paQUARTER_BYTE_20, const CIEC_BYTE &paQUARTER_BYTE_21, const CIEC_BYTE &paQUARTER_BYTE_22, const CIEC_BYTE &paQUARTER_BYTE_23, const CIEC_BYTE &paQUARTER_BYTE_24, const CIEC_BYTE &paQUARTER_BYTE_25, const CIEC_BYTE &paQUARTER_BYTE_26, const CIEC_BYTE &paQUARTER_BYTE_27, const CIEC_BYTE &paQUARTER_BYTE_28, const CIEC_BYTE &paQUARTER_BYTE_29, const CIEC_BYTE &paQUARTER_BYTE_30, const CIEC_BYTE &paQUARTER_BYTE_31, CIEC_LWORD &pa) { + var_QUARTER_BYTE_00 = paQUARTER_BYTE_00; + var_QUARTER_BYTE_01 = paQUARTER_BYTE_01; + var_QUARTER_BYTE_02 = paQUARTER_BYTE_02; + var_QUARTER_BYTE_03 = paQUARTER_BYTE_03; + var_QUARTER_BYTE_04 = paQUARTER_BYTE_04; + var_QUARTER_BYTE_05 = paQUARTER_BYTE_05; + var_QUARTER_BYTE_06 = paQUARTER_BYTE_06; + var_QUARTER_BYTE_07 = paQUARTER_BYTE_07; + var_QUARTER_BYTE_08 = paQUARTER_BYTE_08; + var_QUARTER_BYTE_09 = paQUARTER_BYTE_09; + var_QUARTER_BYTE_10 = paQUARTER_BYTE_10; + var_QUARTER_BYTE_11 = paQUARTER_BYTE_11; + var_QUARTER_BYTE_12 = paQUARTER_BYTE_12; + var_QUARTER_BYTE_13 = paQUARTER_BYTE_13; + var_QUARTER_BYTE_14 = paQUARTER_BYTE_14; + var_QUARTER_BYTE_15 = paQUARTER_BYTE_15; + var_QUARTER_BYTE_16 = paQUARTER_BYTE_16; + var_QUARTER_BYTE_17 = paQUARTER_BYTE_17; + var_QUARTER_BYTE_18 = paQUARTER_BYTE_18; + var_QUARTER_BYTE_19 = paQUARTER_BYTE_19; + var_QUARTER_BYTE_20 = paQUARTER_BYTE_20; + var_QUARTER_BYTE_21 = paQUARTER_BYTE_21; + var_QUARTER_BYTE_22 = paQUARTER_BYTE_22; + var_QUARTER_BYTE_23 = paQUARTER_BYTE_23; + var_QUARTER_BYTE_24 = paQUARTER_BYTE_24; + var_QUARTER_BYTE_25 = paQUARTER_BYTE_25; + var_QUARTER_BYTE_26 = paQUARTER_BYTE_26; + var_QUARTER_BYTE_27 = paQUARTER_BYTE_27; + var_QUARTER_BYTE_28 = paQUARTER_BYTE_28; + var_QUARTER_BYTE_29 = paQUARTER_BYTE_29; + var_QUARTER_BYTE_30 = paQUARTER_BYTE_30; + var_QUARTER_BYTE_31 = paQUARTER_BYTE_31; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, const CIEC_BYTE &paQUARTER_BYTE_08, const CIEC_BYTE &paQUARTER_BYTE_09, const CIEC_BYTE &paQUARTER_BYTE_10, const CIEC_BYTE &paQUARTER_BYTE_11, const CIEC_BYTE &paQUARTER_BYTE_12, const CIEC_BYTE &paQUARTER_BYTE_13, const CIEC_BYTE &paQUARTER_BYTE_14, const CIEC_BYTE &paQUARTER_BYTE_15, const CIEC_BYTE &paQUARTER_BYTE_16, const CIEC_BYTE &paQUARTER_BYTE_17, const CIEC_BYTE &paQUARTER_BYTE_18, const CIEC_BYTE &paQUARTER_BYTE_19, const CIEC_BYTE &paQUARTER_BYTE_20, const CIEC_BYTE &paQUARTER_BYTE_21, const CIEC_BYTE &paQUARTER_BYTE_22, const CIEC_BYTE &paQUARTER_BYTE_23, const CIEC_BYTE &paQUARTER_BYTE_24, const CIEC_BYTE &paQUARTER_BYTE_25, const CIEC_BYTE &paQUARTER_BYTE_26, const CIEC_BYTE &paQUARTER_BYTE_27, const CIEC_BYTE &paQUARTER_BYTE_28, const CIEC_BYTE &paQUARTER_BYTE_29, const CIEC_BYTE &paQUARTER_BYTE_30, const CIEC_BYTE &paQUARTER_BYTE_31, CIEC_LWORD &pa) { + evt_REQ(paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07, paQUARTER_BYTE_08, paQUARTER_BYTE_09, paQUARTER_BYTE_10, paQUARTER_BYTE_11, paQUARTER_BYTE_12, paQUARTER_BYTE_13, paQUARTER_BYTE_14, paQUARTER_BYTE_15, paQUARTER_BYTE_16, paQUARTER_BYTE_17, paQUARTER_BYTE_18, paQUARTER_BYTE_19, paQUARTER_BYTE_20, paQUARTER_BYTE_21, paQUARTER_BYTE_22, paQUARTER_BYTE_23, paQUARTER_BYTE_24, paQUARTER_BYTE_25, paQUARTER_BYTE_26, paQUARTER_BYTE_27, paQUARTER_BYTE_28, paQUARTER_BYTE_29, paQUARTER_BYTE_30, paQUARTER_BYTE_31, pa); + } +}; + +CIEC_LWORD func_ASSEMBLE_LWORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07, CIEC_BYTE st_lv_QUARTER_BYTE_08, CIEC_BYTE st_lv_QUARTER_BYTE_09, CIEC_BYTE st_lv_QUARTER_BYTE_10, CIEC_BYTE st_lv_QUARTER_BYTE_11, CIEC_BYTE st_lv_QUARTER_BYTE_12, CIEC_BYTE st_lv_QUARTER_BYTE_13, CIEC_BYTE st_lv_QUARTER_BYTE_14, CIEC_BYTE st_lv_QUARTER_BYTE_15, CIEC_BYTE st_lv_QUARTER_BYTE_16, CIEC_BYTE st_lv_QUARTER_BYTE_17, CIEC_BYTE st_lv_QUARTER_BYTE_18, CIEC_BYTE st_lv_QUARTER_BYTE_19, CIEC_BYTE st_lv_QUARTER_BYTE_20, CIEC_BYTE st_lv_QUARTER_BYTE_21, CIEC_BYTE st_lv_QUARTER_BYTE_22, CIEC_BYTE st_lv_QUARTER_BYTE_23, CIEC_BYTE st_lv_QUARTER_BYTE_24, CIEC_BYTE st_lv_QUARTER_BYTE_25, CIEC_BYTE st_lv_QUARTER_BYTE_26, CIEC_BYTE st_lv_QUARTER_BYTE_27, CIEC_BYTE st_lv_QUARTER_BYTE_28, CIEC_BYTE st_lv_QUARTER_BYTE_29, CIEC_BYTE st_lv_QUARTER_BYTE_30, CIEC_BYTE st_lv_QUARTER_BYTE_31); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.cpp new file mode 100644 index 000000000..29ce103f7 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.cpp @@ -0,0 +1,245 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_BOOLS + *** Description: this Function combines the 16 BOOLS to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_WORD_FROM_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_WORD_FROM_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_bool.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_WORD_FROM_BOOLS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_BOOLS, g_nStringIdASSEMBLE_WORD_FROM_BOOLS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmDataInputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdWORD}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_WORD_FROM_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 16, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_WORD_FROM_BOOLS::FORTE_ASSEMBLE_WORD_FROM_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BIT_00(nullptr), + conn_BIT_01(nullptr), + conn_BIT_02(nullptr), + conn_BIT_03(nullptr), + conn_BIT_04(nullptr), + conn_BIT_05(nullptr), + conn_BIT_06(nullptr), + conn_BIT_07(nullptr), + conn_BIT_08(nullptr), + conn_BIT_09(nullptr), + conn_BIT_10(nullptr), + conn_BIT_11(nullptr), + conn_BIT_12(nullptr), + conn_BIT_13(nullptr), + conn_BIT_14(nullptr), + conn_BIT_15(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_WORD_FROM_BOOLS::setInitialValues() { + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; + var_ = 0_WORD; +} + +void FORTE_ASSEMBLE_WORD_FROM_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BIT_00, conn_BIT_00); + readData(1, var_BIT_01, conn_BIT_01); + readData(2, var_BIT_02, conn_BIT_02); + readData(3, var_BIT_03, conn_BIT_03); + readData(4, var_BIT_04, conn_BIT_04); + readData(5, var_BIT_05, conn_BIT_05); + readData(6, var_BIT_06, conn_BIT_06); + readData(7, var_BIT_07, conn_BIT_07); + readData(8, var_BIT_08, conn_BIT_08); + readData(9, var_BIT_09, conn_BIT_09); + readData(10, var_BIT_10, conn_BIT_10); + readData(11, var_BIT_11, conn_BIT_11); + readData(12, var_BIT_12, conn_BIT_12); + readData(13, var_BIT_13, conn_BIT_13); + readData(14, var_BIT_14, conn_BIT_14); + readData(15, var_BIT_15, conn_BIT_15); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_WORD_FROM_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_WORD_FROM_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_WORD_FROM_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_WORD_FROM_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_WORD_FROM_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_WORD_FROM_BOOLS(var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_WORD func_ASSEMBLE_WORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15) { + CIEC_WORD st_ret_val = 0_WORD; + + #line 23 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(0) = st_lv_BIT_00; + #line 24 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(1) = st_lv_BIT_01; + #line 25 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(2) = st_lv_BIT_02; + #line 26 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(3) = st_lv_BIT_03; + #line 27 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(4) = st_lv_BIT_04; + #line 28 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(5) = st_lv_BIT_05; + #line 29 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(6) = st_lv_BIT_06; + #line 30 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(7) = st_lv_BIT_07; + #line 31 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(8) = st_lv_BIT_08; + #line 32 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(9) = st_lv_BIT_09; + #line 33 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(10) = st_lv_BIT_10; + #line 34 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(11) = st_lv_BIT_11; + #line 35 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(12) = st_lv_BIT_12; + #line 36 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(13) = st_lv_BIT_13; + #line 37 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(14) = st_lv_BIT_14; + #line 38 "ASSEMBLE_WORD_FROM_BOOLS.fct" + st_ret_val.partial(15) = st_lv_BIT_15; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.h b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.h new file mode 100644 index 000000000..d1381f4c9 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BOOLS_fct.h @@ -0,0 +1,135 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_BOOLS + *** Description: this Function combines the 16 BOOLS to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_bool.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_WORD_FROM_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_WORD_FROM_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + + CIEC_WORD var_; + + CIEC_WORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BIT_00; + CDataConnection *conn_BIT_01; + CDataConnection *conn_BIT_02; + CDataConnection *conn_BIT_03; + CDataConnection *conn_BIT_04; + CDataConnection *conn_BIT_05; + CDataConnection *conn_BIT_06; + CDataConnection *conn_BIT_07; + CDataConnection *conn_BIT_08; + CDataConnection *conn_BIT_09; + CDataConnection *conn_BIT_10; + CDataConnection *conn_BIT_11; + CDataConnection *conn_BIT_12; + CDataConnection *conn_BIT_13; + CDataConnection *conn_BIT_14; + CDataConnection *conn_BIT_15; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, CIEC_WORD &pa) { + var_BIT_00 = paBIT_00; + var_BIT_01 = paBIT_01; + var_BIT_02 = paBIT_02; + var_BIT_03 = paBIT_03; + var_BIT_04 = paBIT_04; + var_BIT_05 = paBIT_05; + var_BIT_06 = paBIT_06; + var_BIT_07 = paBIT_07; + var_BIT_08 = paBIT_08; + var_BIT_09 = paBIT_09; + var_BIT_10 = paBIT_10; + var_BIT_11 = paBIT_11; + var_BIT_12 = paBIT_12; + var_BIT_13 = paBIT_13; + var_BIT_14 = paBIT_14; + var_BIT_15 = paBIT_15; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BOOL &paBIT_00, const CIEC_BOOL &paBIT_01, const CIEC_BOOL &paBIT_02, const CIEC_BOOL &paBIT_03, const CIEC_BOOL &paBIT_04, const CIEC_BOOL &paBIT_05, const CIEC_BOOL &paBIT_06, const CIEC_BOOL &paBIT_07, const CIEC_BOOL &paBIT_08, const CIEC_BOOL &paBIT_09, const CIEC_BOOL &paBIT_10, const CIEC_BOOL &paBIT_11, const CIEC_BOOL &paBIT_12, const CIEC_BOOL &paBIT_13, const CIEC_BOOL &paBIT_14, const CIEC_BOOL &paBIT_15, CIEC_WORD &pa) { + evt_REQ(paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15, pa); + } +}; + +CIEC_WORD func_ASSEMBLE_WORD_FROM_BOOLS(CIEC_BOOL st_lv_BIT_00, CIEC_BOOL st_lv_BIT_01, CIEC_BOOL st_lv_BIT_02, CIEC_BOOL st_lv_BIT_03, CIEC_BOOL st_lv_BIT_04, CIEC_BOOL st_lv_BIT_05, CIEC_BOOL st_lv_BIT_06, CIEC_BOOL st_lv_BIT_07, CIEC_BOOL st_lv_BIT_08, CIEC_BOOL st_lv_BIT_09, CIEC_BOOL st_lv_BIT_10, CIEC_BOOL st_lv_BIT_11, CIEC_BOOL st_lv_BIT_12, CIEC_BOOL st_lv_BIT_13, CIEC_BOOL st_lv_BIT_14, CIEC_BOOL st_lv_BIT_15); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.cpp new file mode 100644 index 000000000..d32119b1f --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.cpp @@ -0,0 +1,147 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_BYTES + *** Description: this Function combines the 2 BYTES to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#include "ASSEMBLE_WORD_FROM_BYTES_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_WORD_FROM_BYTES_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "ASSEMBLE_WORD_FROM_BYTES_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_BYTES, g_nStringIdASSEMBLE_WORD_FROM_BYTES) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmDataInputNames[] = {g_nStringIdBYTE_00, g_nStringIdBYTE_01}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmDataOutputTypeIds[] = {g_nStringIdWORD}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEIWith[] = {0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_BYTES::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_WORD_FROM_BYTES::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 2, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_WORD_FROM_BYTES::FORTE_ASSEMBLE_WORD_FROM_BYTES(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_BYTE_00(nullptr), + conn_BYTE_01(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_WORD_FROM_BYTES::setInitialValues() { + var_BYTE_00 = 0_BYTE; + var_BYTE_01 = 0_BYTE; + var_ = 0_WORD; +} + +void FORTE_ASSEMBLE_WORD_FROM_BYTES::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_BYTE_00, conn_BYTE_00); + readData(1, var_BYTE_01, conn_BYTE_01); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_WORD_FROM_BYTES::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_BYTES::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BYTE_00; + case 1: return &var_BYTE_01; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_BYTES::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_WORD_FROM_BYTES::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_WORD_FROM_BYTES::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BYTE_00; + case 1: return &conn_BYTE_01; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_WORD_FROM_BYTES::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_WORD_FROM_BYTES::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_WORD_FROM_BYTES(var_BYTE_00, var_BYTE_01); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_WORD func_ASSEMBLE_WORD_FROM_BYTES(CIEC_BYTE st_lv_BYTE_00, CIEC_BYTE st_lv_BYTE_01) { + CIEC_WORD st_ret_val = 0_WORD; + + #line 9 "ASSEMBLE_WORD_FROM_BYTES.fct" + st_ret_val.partial(0) = st_lv_BYTE_00; + #line 10 "ASSEMBLE_WORD_FROM_BYTES.fct" + st_ret_val.partial(1) = st_lv_BYTE_01; + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.h b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.h new file mode 100644 index 000000000..917aff333 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_BYTES_fct.h @@ -0,0 +1,93 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_BYTES + *** Description: this Function combines the 2 BYTES to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_WORD_FROM_BYTES final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_BYTES) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_WORD_FROM_BYTES(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_BYTE_00; + CIEC_BYTE var_BYTE_01; + + CIEC_WORD var_; + + CIEC_WORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_BYTE_00; + CDataConnection *conn_BYTE_01; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paBYTE_00, const CIEC_BYTE &paBYTE_01, CIEC_WORD &pa) { + var_BYTE_00 = paBYTE_00; + var_BYTE_01 = paBYTE_01; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paBYTE_00, const CIEC_BYTE &paBYTE_01, CIEC_WORD &pa) { + evt_REQ(paBYTE_00, paBYTE_01, pa); + } +}; + +CIEC_WORD func_ASSEMBLE_WORD_FROM_BYTES(CIEC_BYTE st_lv_BYTE_00, CIEC_BYTE st_lv_BYTE_01); + + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.cpp b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.cpp new file mode 100644 index 000000000..4a70036a2 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.cpp @@ -0,0 +1,194 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_QUARTERS + *** Description: this Function combines the 8 QUARTER BYTES to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#include "ASSEMBLE_WORD_FROM_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "ASSEMBLE_WORD_FROM_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" +#include "ASSEMBLE_WORD_FROM_QUARTERS_fct.h" + +DEFINE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_QUARTERS, g_nStringIdASSEMBLE_WORD_FROM_QUARTERS) + +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmDataInputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmDataOutputNames[] = {g_nStringId}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdWORD}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEIWith[] = {0, 1, 2, 3, 4, 5, 6, 7, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEOWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_ASSEMBLE_WORD_FROM_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 8, scmDataInputNames, scmDataInputTypeIds, + 1, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_ASSEMBLE_WORD_FROM_QUARTERS::FORTE_ASSEMBLE_WORD_FROM_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_(var_), + conn_CNF(this, 0), + conn_QUARTER_BYTE_00(nullptr), + conn_QUARTER_BYTE_01(nullptr), + conn_QUARTER_BYTE_02(nullptr), + conn_QUARTER_BYTE_03(nullptr), + conn_QUARTER_BYTE_04(nullptr), + conn_QUARTER_BYTE_05(nullptr), + conn_QUARTER_BYTE_06(nullptr), + conn_QUARTER_BYTE_07(nullptr), + conn_(this, 0, &var_conn_) { +} + +void FORTE_ASSEMBLE_WORD_FROM_QUARTERS::setInitialValues() { + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; + var_ = 0_WORD; +} + +void FORTE_ASSEMBLE_WORD_FROM_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + readData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + readData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + readData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + readData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + readData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + readData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + readData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + break; + } + default: + break; + } +} + +void FORTE_ASSEMBLE_WORD_FROM_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_, conn_); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + } + return nullptr; +} + +CIEC_ANY *FORTE_ASSEMBLE_WORD_FROM_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_; + } + return nullptr; +} + +CEventConnection *FORTE_ASSEMBLE_WORD_FROM_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_ASSEMBLE_WORD_FROM_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + } + return nullptr; +} + +CDataConnection *FORTE_ASSEMBLE_WORD_FROM_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_; + } + return nullptr; +} + +void FORTE_ASSEMBLE_WORD_FROM_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + var_ = func_ASSEMBLE_WORD_FROM_QUARTERS(var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07); + sendOutputEvent(scmEventCNFID, paECET); +} + +CIEC_WORD func_ASSEMBLE_WORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07) { + CIEC_WORD st_ret_val = 0_WORD; + + #line 15 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = st_global_WORD_QUARTER_ZZ; + #line 16 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_07), st_global_SHIFT_QUARTER_07)); + #line 17 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_06), st_global_SHIFT_QUARTER_06)); + #line 18 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_05), st_global_SHIFT_QUARTER_05)); + #line 19 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_04), st_global_SHIFT_QUARTER_04)); + #line 20 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_03), st_global_SHIFT_QUARTER_03)); + #line 21 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_02), st_global_SHIFT_QUARTER_02)); + #line 22 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_01), st_global_SHIFT_QUARTER_01)); + #line 23 "ASSEMBLE_WORD_FROM_QUARTERS.fct" + st_ret_val = func_OR(st_ret_val, func_SHL(func_BYTE_TO_WORD(st_lv_QUARTER_BYTE_00), st_global_SHIFT_QUARTER_00)); + + return st_ret_val; +} + diff --git a/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.h b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.h new file mode 100644 index 000000000..c49bb4513 --- /dev/null +++ b/src/modules/utils/assembling/ASSEMBLE_WORD_FROM_QUARTERS_fct.h @@ -0,0 +1,111 @@ +/******************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: ASSEMBLE_WORD_FROM_QUARTERS + *** Description: this Function combines the 8 QUARTER BYTES to a WORD + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Input/Output Variables + *******************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_ASSEMBLE_WORD_FROM_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_ASSEMBLE_WORD_FROM_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_ASSEMBLE_WORD_FROM_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + + CIEC_WORD var_; + + CIEC_WORD var_conn_; + + CEventConnection conn_CNF; + + CDataConnection *conn_QUARTER_BYTE_00; + CDataConnection *conn_QUARTER_BYTE_01; + CDataConnection *conn_QUARTER_BYTE_02; + CDataConnection *conn_QUARTER_BYTE_03; + CDataConnection *conn_QUARTER_BYTE_04; + CDataConnection *conn_QUARTER_BYTE_05; + CDataConnection *conn_QUARTER_BYTE_06; + CDataConnection *conn_QUARTER_BYTE_07; + + CDataConnection conn_; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, CIEC_WORD &pa) { + var_QUARTER_BYTE_00 = paQUARTER_BYTE_00; + var_QUARTER_BYTE_01 = paQUARTER_BYTE_01; + var_QUARTER_BYTE_02 = paQUARTER_BYTE_02; + var_QUARTER_BYTE_03 = paQUARTER_BYTE_03; + var_QUARTER_BYTE_04 = paQUARTER_BYTE_04; + var_QUARTER_BYTE_05 = paQUARTER_BYTE_05; + var_QUARTER_BYTE_06 = paQUARTER_BYTE_06; + var_QUARTER_BYTE_07 = paQUARTER_BYTE_07; + executeEvent(scmEventREQID, nullptr); + pa = var_; + } + + void operator()(const CIEC_BYTE &paQUARTER_BYTE_00, const CIEC_BYTE &paQUARTER_BYTE_01, const CIEC_BYTE &paQUARTER_BYTE_02, const CIEC_BYTE &paQUARTER_BYTE_03, const CIEC_BYTE &paQUARTER_BYTE_04, const CIEC_BYTE &paQUARTER_BYTE_05, const CIEC_BYTE &paQUARTER_BYTE_06, const CIEC_BYTE &paQUARTER_BYTE_07, CIEC_WORD &pa) { + evt_REQ(paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07, pa); + } +}; + +CIEC_WORD func_ASSEMBLE_WORD_FROM_QUARTERS(CIEC_BYTE st_lv_QUARTER_BYTE_00, CIEC_BYTE st_lv_QUARTER_BYTE_01, CIEC_BYTE st_lv_QUARTER_BYTE_02, CIEC_BYTE st_lv_QUARTER_BYTE_03, CIEC_BYTE st_lv_QUARTER_BYTE_04, CIEC_BYTE st_lv_QUARTER_BYTE_05, CIEC_BYTE st_lv_QUARTER_BYTE_06, CIEC_BYTE st_lv_QUARTER_BYTE_07); + + diff --git a/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.cpp b/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.cpp new file mode 100644 index 000000000..c14e222e2 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.cpp @@ -0,0 +1,201 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_BYTE_INTO_BOOLS + *** Description: this Function extracts the 8 BOOLS from a byte + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_BYTE_INTO_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_BYTE_INTO_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_BYTE_INTO_BOOLS, g_nStringIdSPLIT_BYTE_INTO_BOOLS) + +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmDataInputTypeIds[] = {g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmDataOutputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const TDataIOID FORTE_SPLIT_BYTE_INTO_BOOLS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_BYTE_INTO_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_BYTE_INTO_BOOLS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_BYTE_INTO_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_BYTE_INTO_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 8, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_BYTE_INTO_BOOLS::FORTE_SPLIT_BYTE_INTO_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_BIT_00(var_BIT_00), + var_conn_BIT_01(var_BIT_01), + var_conn_BIT_02(var_BIT_02), + var_conn_BIT_03(var_BIT_03), + var_conn_BIT_04(var_BIT_04), + var_conn_BIT_05(var_BIT_05), + var_conn_BIT_06(var_BIT_06), + var_conn_BIT_07(var_BIT_07), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_BIT_00(this, 0, &var_conn_BIT_00), + conn_BIT_01(this, 1, &var_conn_BIT_01), + conn_BIT_02(this, 2, &var_conn_BIT_02), + conn_BIT_03(this, 3, &var_conn_BIT_03), + conn_BIT_04(this, 4, &var_conn_BIT_04), + conn_BIT_05(this, 5, &var_conn_BIT_05), + conn_BIT_06(this, 6, &var_conn_BIT_06), + conn_BIT_07(this, 7, &var_conn_BIT_07) { +} + +void FORTE_SPLIT_BYTE_INTO_BOOLS::setInitialValues() { + var_IN = 0_BYTE; + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; +} + +void FORTE_SPLIT_BYTE_INTO_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_BYTE_INTO_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_BIT_00, conn_BIT_00); + writeData(1, var_BIT_01, conn_BIT_01); + writeData(2, var_BIT_02, conn_BIT_02); + writeData(3, var_BIT_03, conn_BIT_03); + writeData(4, var_BIT_04, conn_BIT_04); + writeData(5, var_BIT_05, conn_BIT_05); + writeData(6, var_BIT_06, conn_BIT_06); + writeData(7, var_BIT_07, conn_BIT_07); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_BYTE_INTO_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_BYTE_INTO_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_BYTE_INTO_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_BYTE_INTO_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_BYTE_INTO_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + } + return nullptr; +} + +void FORTE_SPLIT_BYTE_INTO_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_BYTE_INTO_BOOLS(var_IN, var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_BYTE_INTO_BOOLS(CIEC_BYTE st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07) { + st_lv_BIT_00 = 0_BOOL; + st_lv_BIT_01 = 0_BOOL; + st_lv_BIT_02 = 0_BOOL; + st_lv_BIT_03 = 0_BOOL; + st_lv_BIT_04 = 0_BOOL; + st_lv_BIT_05 = 0_BOOL; + st_lv_BIT_06 = 0_BOOL; + st_lv_BIT_07 = 0_BOOL; + + #line 19 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_00 = st_lv_IN.cpartial(0); + #line 20 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_01 = st_lv_IN.cpartial(1); + #line 21 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_02 = st_lv_IN.cpartial(2); + #line 22 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_03 = st_lv_IN.cpartial(3); + #line 23 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_04 = st_lv_IN.cpartial(4); + #line 24 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_05 = st_lv_IN.cpartial(5); + #line 25 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_06 = st_lv_IN.cpartial(6); + #line 26 "SPLIT_BYTE_INTO_BOOLS.fct" + st_lv_BIT_07 = st_lv_IN.cpartial(7); + +} + diff --git a/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.h b/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.h new file mode 100644 index 000000000..65c23fa1a --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_BYTE_INTO_BOOLS_fct.h @@ -0,0 +1,118 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_BYTE_INTO_BOOLS + *** Description: this Function extracts the 8 BOOLS from a byte + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-28/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_BYTE_INTO_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_BYTE_INTO_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_BYTE_INTO_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_IN; + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + + CIEC_BOOL var_conn_BIT_00; + CIEC_BOOL var_conn_BIT_01; + CIEC_BOOL var_conn_BIT_02; + CIEC_BOOL var_conn_BIT_03; + CIEC_BOOL var_conn_BIT_04; + CIEC_BOOL var_conn_BIT_05; + CIEC_BOOL var_conn_BIT_06; + CIEC_BOOL var_conn_BIT_07; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_BIT_00; + CDataConnection conn_BIT_01; + CDataConnection conn_BIT_02; + CDataConnection conn_BIT_03; + CDataConnection conn_BIT_04; + CDataConnection conn_BIT_05; + CDataConnection conn_BIT_06; + CDataConnection conn_BIT_07; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paBIT_00 = var_BIT_00; + paBIT_01 = var_BIT_01; + paBIT_02 = var_BIT_02; + paBIT_03 = var_BIT_03; + paBIT_04 = var_BIT_04; + paBIT_05 = var_BIT_05; + paBIT_06 = var_BIT_06; + paBIT_07 = var_BIT_07; + } + + void operator()(const CIEC_BYTE &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07) { + evt_REQ(paIN, paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07); + } +}; + +void func_SPLIT_BYTE_INTO_BOOLS(CIEC_BYTE st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07); + + diff --git a/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.cpp b/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.cpp new file mode 100644 index 000000000..7e6a2fbdc --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.cpp @@ -0,0 +1,167 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_BYTE_INTO_QUARTERS + *** Description: this Function extracts the 4 QUARTER BYTE from a byte + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_BYTE_INTO_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_BYTE_INTO_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_any_int_variant.h" +#include "forte_byte.h" +#include "forte_any_bit_variant.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_BYTE_INTO_QUARTERS, g_nStringIdSPLIT_BYTE_INTO_QUARTERS) + +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdBYTE}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmDataOutputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const TDataIOID FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEOWith[] = {0, 1, 2, 3, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_BYTE_INTO_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_BYTE_INTO_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 4, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_BYTE_INTO_QUARTERS::FORTE_SPLIT_BYTE_INTO_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QUARTER_BYTE_00(var_QUARTER_BYTE_00), + var_conn_QUARTER_BYTE_01(var_QUARTER_BYTE_01), + var_conn_QUARTER_BYTE_02(var_QUARTER_BYTE_02), + var_conn_QUARTER_BYTE_03(var_QUARTER_BYTE_03), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_QUARTER_BYTE_00(this, 0, &var_conn_QUARTER_BYTE_00), + conn_QUARTER_BYTE_01(this, 1, &var_conn_QUARTER_BYTE_01), + conn_QUARTER_BYTE_02(this, 2, &var_conn_QUARTER_BYTE_02), + conn_QUARTER_BYTE_03(this, 3, &var_conn_QUARTER_BYTE_03) { +} + +void FORTE_SPLIT_BYTE_INTO_QUARTERS::setInitialValues() { + var_IN = 0_BYTE; + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; +} + +void FORTE_SPLIT_BYTE_INTO_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_BYTE_INTO_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + writeData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + writeData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + writeData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_BYTE_INTO_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_BYTE_INTO_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_BYTE_INTO_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_BYTE_INTO_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_BYTE_INTO_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + } + return nullptr; +} + +void FORTE_SPLIT_BYTE_INTO_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_BYTE_INTO_QUARTERS(var_IN, var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_BYTE_INTO_QUARTERS(CIEC_BYTE st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03) { + st_lv_QUARTER_BYTE_00 = 0_BYTE; + st_lv_QUARTER_BYTE_01 = 0_BYTE; + st_lv_QUARTER_BYTE_02 = 0_BYTE; + st_lv_QUARTER_BYTE_03 = 0_BYTE; + + #line 15 "SPLIT_BYTE_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_00 = func_SHR(func_AND(st_lv_IN, st_global_BYTE_QUARTER_00), st_global_SHIFT_QUARTER_00); + #line 16 "SPLIT_BYTE_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_01 = func_SHR(func_AND(st_lv_IN, st_global_BYTE_QUARTER_01), st_global_SHIFT_QUARTER_01); + #line 17 "SPLIT_BYTE_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_02 = func_SHR(func_AND(st_lv_IN, st_global_BYTE_QUARTER_02), st_global_SHIFT_QUARTER_02); + #line 18 "SPLIT_BYTE_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_03 = func_SHR(func_AND(st_lv_IN, st_global_BYTE_QUARTER_03), st_global_SHIFT_QUARTER_03); + +} + diff --git a/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.h b/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.h new file mode 100644 index 000000000..0bc342c16 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_BYTE_INTO_QUARTERS_fct.h @@ -0,0 +1,101 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_BYTE_INTO_QUARTERS + *** Description: this Function extracts the 4 QUARTER BYTE from a byte + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_BYTE_INTO_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_BYTE_INTO_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_BYTE_INTO_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_BYTE var_IN; + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + + CIEC_BYTE var_conn_QUARTER_BYTE_00; + CIEC_BYTE var_conn_QUARTER_BYTE_01; + CIEC_BYTE var_conn_QUARTER_BYTE_02; + CIEC_BYTE var_conn_QUARTER_BYTE_03; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_QUARTER_BYTE_00; + CDataConnection conn_QUARTER_BYTE_01; + CDataConnection conn_QUARTER_BYTE_02; + CDataConnection conn_QUARTER_BYTE_03; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_BYTE &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paQUARTER_BYTE_00 = var_QUARTER_BYTE_00; + paQUARTER_BYTE_01 = var_QUARTER_BYTE_01; + paQUARTER_BYTE_02 = var_QUARTER_BYTE_02; + paQUARTER_BYTE_03 = var_QUARTER_BYTE_03; + } + + void operator()(const CIEC_BYTE &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03) { + evt_REQ(paIN, paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03); + } +}; + +void func_SPLIT_BYTE_INTO_QUARTERS(CIEC_BYTE st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03); + + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.cpp b/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.cpp new file mode 100644 index 000000000..7e90ce512 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.cpp @@ -0,0 +1,417 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_BOOLS + *** Description: this Function extracts the 32 BOOLS from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_DWORD_INTO_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_DWORD_INTO_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_BOOLS, g_nStringIdSPLIT_DWORD_INTO_BOOLS) + +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmDataInputTypeIds[] = {g_nStringIdDWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmDataOutputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15, g_nStringIdBIT_16, g_nStringIdBIT_17, g_nStringIdBIT_18, g_nStringIdBIT_19, g_nStringIdBIT_20, g_nStringIdBIT_21, g_nStringIdBIT_22, g_nStringIdBIT_23, g_nStringIdBIT_24, g_nStringIdBIT_25, g_nStringIdBIT_26, g_nStringIdBIT_27, g_nStringIdBIT_28, g_nStringIdBIT_29, g_nStringIdBIT_30, g_nStringIdBIT_31}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_BOOLS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_BOOLS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_DWORD_INTO_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 32, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_DWORD_INTO_BOOLS::FORTE_SPLIT_DWORD_INTO_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_BIT_00(var_BIT_00), + var_conn_BIT_01(var_BIT_01), + var_conn_BIT_02(var_BIT_02), + var_conn_BIT_03(var_BIT_03), + var_conn_BIT_04(var_BIT_04), + var_conn_BIT_05(var_BIT_05), + var_conn_BIT_06(var_BIT_06), + var_conn_BIT_07(var_BIT_07), + var_conn_BIT_08(var_BIT_08), + var_conn_BIT_09(var_BIT_09), + var_conn_BIT_10(var_BIT_10), + var_conn_BIT_11(var_BIT_11), + var_conn_BIT_12(var_BIT_12), + var_conn_BIT_13(var_BIT_13), + var_conn_BIT_14(var_BIT_14), + var_conn_BIT_15(var_BIT_15), + var_conn_BIT_16(var_BIT_16), + var_conn_BIT_17(var_BIT_17), + var_conn_BIT_18(var_BIT_18), + var_conn_BIT_19(var_BIT_19), + var_conn_BIT_20(var_BIT_20), + var_conn_BIT_21(var_BIT_21), + var_conn_BIT_22(var_BIT_22), + var_conn_BIT_23(var_BIT_23), + var_conn_BIT_24(var_BIT_24), + var_conn_BIT_25(var_BIT_25), + var_conn_BIT_26(var_BIT_26), + var_conn_BIT_27(var_BIT_27), + var_conn_BIT_28(var_BIT_28), + var_conn_BIT_29(var_BIT_29), + var_conn_BIT_30(var_BIT_30), + var_conn_BIT_31(var_BIT_31), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_BIT_00(this, 0, &var_conn_BIT_00), + conn_BIT_01(this, 1, &var_conn_BIT_01), + conn_BIT_02(this, 2, &var_conn_BIT_02), + conn_BIT_03(this, 3, &var_conn_BIT_03), + conn_BIT_04(this, 4, &var_conn_BIT_04), + conn_BIT_05(this, 5, &var_conn_BIT_05), + conn_BIT_06(this, 6, &var_conn_BIT_06), + conn_BIT_07(this, 7, &var_conn_BIT_07), + conn_BIT_08(this, 8, &var_conn_BIT_08), + conn_BIT_09(this, 9, &var_conn_BIT_09), + conn_BIT_10(this, 10, &var_conn_BIT_10), + conn_BIT_11(this, 11, &var_conn_BIT_11), + conn_BIT_12(this, 12, &var_conn_BIT_12), + conn_BIT_13(this, 13, &var_conn_BIT_13), + conn_BIT_14(this, 14, &var_conn_BIT_14), + conn_BIT_15(this, 15, &var_conn_BIT_15), + conn_BIT_16(this, 16, &var_conn_BIT_16), + conn_BIT_17(this, 17, &var_conn_BIT_17), + conn_BIT_18(this, 18, &var_conn_BIT_18), + conn_BIT_19(this, 19, &var_conn_BIT_19), + conn_BIT_20(this, 20, &var_conn_BIT_20), + conn_BIT_21(this, 21, &var_conn_BIT_21), + conn_BIT_22(this, 22, &var_conn_BIT_22), + conn_BIT_23(this, 23, &var_conn_BIT_23), + conn_BIT_24(this, 24, &var_conn_BIT_24), + conn_BIT_25(this, 25, &var_conn_BIT_25), + conn_BIT_26(this, 26, &var_conn_BIT_26), + conn_BIT_27(this, 27, &var_conn_BIT_27), + conn_BIT_28(this, 28, &var_conn_BIT_28), + conn_BIT_29(this, 29, &var_conn_BIT_29), + conn_BIT_30(this, 30, &var_conn_BIT_30), + conn_BIT_31(this, 31, &var_conn_BIT_31) { +} + +void FORTE_SPLIT_DWORD_INTO_BOOLS::setInitialValues() { + var_IN = 0_DWORD; + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; + var_BIT_16 = 0_BOOL; + var_BIT_17 = 0_BOOL; + var_BIT_18 = 0_BOOL; + var_BIT_19 = 0_BOOL; + var_BIT_20 = 0_BOOL; + var_BIT_21 = 0_BOOL; + var_BIT_22 = 0_BOOL; + var_BIT_23 = 0_BOOL; + var_BIT_24 = 0_BOOL; + var_BIT_25 = 0_BOOL; + var_BIT_26 = 0_BOOL; + var_BIT_27 = 0_BOOL; + var_BIT_28 = 0_BOOL; + var_BIT_29 = 0_BOOL; + var_BIT_30 = 0_BOOL; + var_BIT_31 = 0_BOOL; +} + +void FORTE_SPLIT_DWORD_INTO_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_DWORD_INTO_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_BIT_00, conn_BIT_00); + writeData(1, var_BIT_01, conn_BIT_01); + writeData(2, var_BIT_02, conn_BIT_02); + writeData(3, var_BIT_03, conn_BIT_03); + writeData(4, var_BIT_04, conn_BIT_04); + writeData(5, var_BIT_05, conn_BIT_05); + writeData(6, var_BIT_06, conn_BIT_06); + writeData(7, var_BIT_07, conn_BIT_07); + writeData(8, var_BIT_08, conn_BIT_08); + writeData(9, var_BIT_09, conn_BIT_09); + writeData(10, var_BIT_10, conn_BIT_10); + writeData(11, var_BIT_11, conn_BIT_11); + writeData(12, var_BIT_12, conn_BIT_12); + writeData(13, var_BIT_13, conn_BIT_13); + writeData(14, var_BIT_14, conn_BIT_14); + writeData(15, var_BIT_15, conn_BIT_15); + writeData(16, var_BIT_16, conn_BIT_16); + writeData(17, var_BIT_17, conn_BIT_17); + writeData(18, var_BIT_18, conn_BIT_18); + writeData(19, var_BIT_19, conn_BIT_19); + writeData(20, var_BIT_20, conn_BIT_20); + writeData(21, var_BIT_21, conn_BIT_21); + writeData(22, var_BIT_22, conn_BIT_22); + writeData(23, var_BIT_23, conn_BIT_23); + writeData(24, var_BIT_24, conn_BIT_24); + writeData(25, var_BIT_25, conn_BIT_25); + writeData(26, var_BIT_26, conn_BIT_26); + writeData(27, var_BIT_27, conn_BIT_27); + writeData(28, var_BIT_28, conn_BIT_28); + writeData(29, var_BIT_29, conn_BIT_29); + writeData(30, var_BIT_30, conn_BIT_30); + writeData(31, var_BIT_31, conn_BIT_31); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + case 16: return &var_BIT_16; + case 17: return &var_BIT_17; + case 18: return &var_BIT_18; + case 19: return &var_BIT_19; + case 20: return &var_BIT_20; + case 21: return &var_BIT_21; + case 22: return &var_BIT_22; + case 23: return &var_BIT_23; + case 24: return &var_BIT_24; + case 25: return &var_BIT_25; + case 26: return &var_BIT_26; + case 27: return &var_BIT_27; + case 28: return &var_BIT_28; + case 29: return &var_BIT_29; + case 30: return &var_BIT_30; + case 31: return &var_BIT_31; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_DWORD_INTO_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_DWORD_INTO_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_DWORD_INTO_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + case 16: return &conn_BIT_16; + case 17: return &conn_BIT_17; + case 18: return &conn_BIT_18; + case 19: return &conn_BIT_19; + case 20: return &conn_BIT_20; + case 21: return &conn_BIT_21; + case 22: return &conn_BIT_22; + case 23: return &conn_BIT_23; + case 24: return &conn_BIT_24; + case 25: return &conn_BIT_25; + case 26: return &conn_BIT_26; + case 27: return &conn_BIT_27; + case 28: return &conn_BIT_28; + case 29: return &conn_BIT_29; + case 30: return &conn_BIT_30; + case 31: return &conn_BIT_31; + } + return nullptr; +} + +void FORTE_SPLIT_DWORD_INTO_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_DWORD_INTO_BOOLS(var_IN, var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15, var_BIT_16, var_BIT_17, var_BIT_18, var_BIT_19, var_BIT_20, var_BIT_21, var_BIT_22, var_BIT_23, var_BIT_24, var_BIT_25, var_BIT_26, var_BIT_27, var_BIT_28, var_BIT_29, var_BIT_30, var_BIT_31); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_DWORD_INTO_BOOLS(CIEC_DWORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15, CIEC_BOOL &st_lv_BIT_16, CIEC_BOOL &st_lv_BIT_17, CIEC_BOOL &st_lv_BIT_18, CIEC_BOOL &st_lv_BIT_19, CIEC_BOOL &st_lv_BIT_20, CIEC_BOOL &st_lv_BIT_21, CIEC_BOOL &st_lv_BIT_22, CIEC_BOOL &st_lv_BIT_23, CIEC_BOOL &st_lv_BIT_24, CIEC_BOOL &st_lv_BIT_25, CIEC_BOOL &st_lv_BIT_26, CIEC_BOOL &st_lv_BIT_27, CIEC_BOOL &st_lv_BIT_28, CIEC_BOOL &st_lv_BIT_29, CIEC_BOOL &st_lv_BIT_30, CIEC_BOOL &st_lv_BIT_31) { + st_lv_BIT_00 = 0_BOOL; + st_lv_BIT_01 = 0_BOOL; + st_lv_BIT_02 = 0_BOOL; + st_lv_BIT_03 = 0_BOOL; + st_lv_BIT_04 = 0_BOOL; + st_lv_BIT_05 = 0_BOOL; + st_lv_BIT_06 = 0_BOOL; + st_lv_BIT_07 = 0_BOOL; + st_lv_BIT_08 = 0_BOOL; + st_lv_BIT_09 = 0_BOOL; + st_lv_BIT_10 = 0_BOOL; + st_lv_BIT_11 = 0_BOOL; + st_lv_BIT_12 = 0_BOOL; + st_lv_BIT_13 = 0_BOOL; + st_lv_BIT_14 = 0_BOOL; + st_lv_BIT_15 = 0_BOOL; + st_lv_BIT_16 = 0_BOOL; + st_lv_BIT_17 = 0_BOOL; + st_lv_BIT_18 = 0_BOOL; + st_lv_BIT_19 = 0_BOOL; + st_lv_BIT_20 = 0_BOOL; + st_lv_BIT_21 = 0_BOOL; + st_lv_BIT_22 = 0_BOOL; + st_lv_BIT_23 = 0_BOOL; + st_lv_BIT_24 = 0_BOOL; + st_lv_BIT_25 = 0_BOOL; + st_lv_BIT_26 = 0_BOOL; + st_lv_BIT_27 = 0_BOOL; + st_lv_BIT_28 = 0_BOOL; + st_lv_BIT_29 = 0_BOOL; + st_lv_BIT_30 = 0_BOOL; + st_lv_BIT_31 = 0_BOOL; + + #line 43 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_00 = st_lv_IN.cpartial(0); + #line 44 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_01 = st_lv_IN.cpartial(1); + #line 45 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_02 = st_lv_IN.cpartial(2); + #line 46 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_03 = st_lv_IN.cpartial(3); + #line 47 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_04 = st_lv_IN.cpartial(4); + #line 48 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_05 = st_lv_IN.cpartial(5); + #line 49 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_06 = st_lv_IN.cpartial(6); + #line 50 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_07 = st_lv_IN.cpartial(7); + #line 51 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_08 = st_lv_IN.cpartial(8); + #line 52 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_09 = st_lv_IN.cpartial(9); + #line 53 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_10 = st_lv_IN.cpartial(10); + #line 54 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_11 = st_lv_IN.cpartial(11); + #line 55 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_12 = st_lv_IN.cpartial(12); + #line 56 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_13 = st_lv_IN.cpartial(13); + #line 57 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_14 = st_lv_IN.cpartial(14); + #line 58 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_15 = st_lv_IN.cpartial(15); + #line 59 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_16 = st_lv_IN.cpartial(16); + #line 60 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_17 = st_lv_IN.cpartial(17); + #line 61 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_18 = st_lv_IN.cpartial(18); + #line 62 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_19 = st_lv_IN.cpartial(19); + #line 63 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_20 = st_lv_IN.cpartial(20); + #line 64 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_21 = st_lv_IN.cpartial(21); + #line 65 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_22 = st_lv_IN.cpartial(22); + #line 66 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_23 = st_lv_IN.cpartial(23); + #line 67 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_24 = st_lv_IN.cpartial(24); + #line 68 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_25 = st_lv_IN.cpartial(25); + #line 69 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_26 = st_lv_IN.cpartial(26); + #line 70 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_27 = st_lv_IN.cpartial(27); + #line 71 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_28 = st_lv_IN.cpartial(28); + #line 72 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_29 = st_lv_IN.cpartial(29); + #line 73 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_30 = st_lv_IN.cpartial(30); + #line 74 "SPLIT_DWORD_INTO_BOOLS.fct" + st_lv_BIT_31 = st_lv_IN.cpartial(31); + +} + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.h b/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.h new file mode 100644 index 000000000..1c269073d --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_BOOLS_fct.h @@ -0,0 +1,214 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_BOOLS + *** Description: this Function extracts the 32 BOOLS from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_DWORD_INTO_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_DWORD_INTO_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_DWORD var_IN; + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + CIEC_BOOL var_BIT_16; + CIEC_BOOL var_BIT_17; + CIEC_BOOL var_BIT_18; + CIEC_BOOL var_BIT_19; + CIEC_BOOL var_BIT_20; + CIEC_BOOL var_BIT_21; + CIEC_BOOL var_BIT_22; + CIEC_BOOL var_BIT_23; + CIEC_BOOL var_BIT_24; + CIEC_BOOL var_BIT_25; + CIEC_BOOL var_BIT_26; + CIEC_BOOL var_BIT_27; + CIEC_BOOL var_BIT_28; + CIEC_BOOL var_BIT_29; + CIEC_BOOL var_BIT_30; + CIEC_BOOL var_BIT_31; + + CIEC_BOOL var_conn_BIT_00; + CIEC_BOOL var_conn_BIT_01; + CIEC_BOOL var_conn_BIT_02; + CIEC_BOOL var_conn_BIT_03; + CIEC_BOOL var_conn_BIT_04; + CIEC_BOOL var_conn_BIT_05; + CIEC_BOOL var_conn_BIT_06; + CIEC_BOOL var_conn_BIT_07; + CIEC_BOOL var_conn_BIT_08; + CIEC_BOOL var_conn_BIT_09; + CIEC_BOOL var_conn_BIT_10; + CIEC_BOOL var_conn_BIT_11; + CIEC_BOOL var_conn_BIT_12; + CIEC_BOOL var_conn_BIT_13; + CIEC_BOOL var_conn_BIT_14; + CIEC_BOOL var_conn_BIT_15; + CIEC_BOOL var_conn_BIT_16; + CIEC_BOOL var_conn_BIT_17; + CIEC_BOOL var_conn_BIT_18; + CIEC_BOOL var_conn_BIT_19; + CIEC_BOOL var_conn_BIT_20; + CIEC_BOOL var_conn_BIT_21; + CIEC_BOOL var_conn_BIT_22; + CIEC_BOOL var_conn_BIT_23; + CIEC_BOOL var_conn_BIT_24; + CIEC_BOOL var_conn_BIT_25; + CIEC_BOOL var_conn_BIT_26; + CIEC_BOOL var_conn_BIT_27; + CIEC_BOOL var_conn_BIT_28; + CIEC_BOOL var_conn_BIT_29; + CIEC_BOOL var_conn_BIT_30; + CIEC_BOOL var_conn_BIT_31; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_BIT_00; + CDataConnection conn_BIT_01; + CDataConnection conn_BIT_02; + CDataConnection conn_BIT_03; + CDataConnection conn_BIT_04; + CDataConnection conn_BIT_05; + CDataConnection conn_BIT_06; + CDataConnection conn_BIT_07; + CDataConnection conn_BIT_08; + CDataConnection conn_BIT_09; + CDataConnection conn_BIT_10; + CDataConnection conn_BIT_11; + CDataConnection conn_BIT_12; + CDataConnection conn_BIT_13; + CDataConnection conn_BIT_14; + CDataConnection conn_BIT_15; + CDataConnection conn_BIT_16; + CDataConnection conn_BIT_17; + CDataConnection conn_BIT_18; + CDataConnection conn_BIT_19; + CDataConnection conn_BIT_20; + CDataConnection conn_BIT_21; + CDataConnection conn_BIT_22; + CDataConnection conn_BIT_23; + CDataConnection conn_BIT_24; + CDataConnection conn_BIT_25; + CDataConnection conn_BIT_26; + CDataConnection conn_BIT_27; + CDataConnection conn_BIT_28; + CDataConnection conn_BIT_29; + CDataConnection conn_BIT_30; + CDataConnection conn_BIT_31; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_DWORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15, CIEC_BOOL &paBIT_16, CIEC_BOOL &paBIT_17, CIEC_BOOL &paBIT_18, CIEC_BOOL &paBIT_19, CIEC_BOOL &paBIT_20, CIEC_BOOL &paBIT_21, CIEC_BOOL &paBIT_22, CIEC_BOOL &paBIT_23, CIEC_BOOL &paBIT_24, CIEC_BOOL &paBIT_25, CIEC_BOOL &paBIT_26, CIEC_BOOL &paBIT_27, CIEC_BOOL &paBIT_28, CIEC_BOOL &paBIT_29, CIEC_BOOL &paBIT_30, CIEC_BOOL &paBIT_31) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paBIT_00 = var_BIT_00; + paBIT_01 = var_BIT_01; + paBIT_02 = var_BIT_02; + paBIT_03 = var_BIT_03; + paBIT_04 = var_BIT_04; + paBIT_05 = var_BIT_05; + paBIT_06 = var_BIT_06; + paBIT_07 = var_BIT_07; + paBIT_08 = var_BIT_08; + paBIT_09 = var_BIT_09; + paBIT_10 = var_BIT_10; + paBIT_11 = var_BIT_11; + paBIT_12 = var_BIT_12; + paBIT_13 = var_BIT_13; + paBIT_14 = var_BIT_14; + paBIT_15 = var_BIT_15; + paBIT_16 = var_BIT_16; + paBIT_17 = var_BIT_17; + paBIT_18 = var_BIT_18; + paBIT_19 = var_BIT_19; + paBIT_20 = var_BIT_20; + paBIT_21 = var_BIT_21; + paBIT_22 = var_BIT_22; + paBIT_23 = var_BIT_23; + paBIT_24 = var_BIT_24; + paBIT_25 = var_BIT_25; + paBIT_26 = var_BIT_26; + paBIT_27 = var_BIT_27; + paBIT_28 = var_BIT_28; + paBIT_29 = var_BIT_29; + paBIT_30 = var_BIT_30; + paBIT_31 = var_BIT_31; + } + + void operator()(const CIEC_DWORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15, CIEC_BOOL &paBIT_16, CIEC_BOOL &paBIT_17, CIEC_BOOL &paBIT_18, CIEC_BOOL &paBIT_19, CIEC_BOOL &paBIT_20, CIEC_BOOL &paBIT_21, CIEC_BOOL &paBIT_22, CIEC_BOOL &paBIT_23, CIEC_BOOL &paBIT_24, CIEC_BOOL &paBIT_25, CIEC_BOOL &paBIT_26, CIEC_BOOL &paBIT_27, CIEC_BOOL &paBIT_28, CIEC_BOOL &paBIT_29, CIEC_BOOL &paBIT_30, CIEC_BOOL &paBIT_31) { + evt_REQ(paIN, paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15, paBIT_16, paBIT_17, paBIT_18, paBIT_19, paBIT_20, paBIT_21, paBIT_22, paBIT_23, paBIT_24, paBIT_25, paBIT_26, paBIT_27, paBIT_28, paBIT_29, paBIT_30, paBIT_31); + } +}; + +void func_SPLIT_DWORD_INTO_BOOLS(CIEC_DWORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15, CIEC_BOOL &st_lv_BIT_16, CIEC_BOOL &st_lv_BIT_17, CIEC_BOOL &st_lv_BIT_18, CIEC_BOOL &st_lv_BIT_19, CIEC_BOOL &st_lv_BIT_20, CIEC_BOOL &st_lv_BIT_21, CIEC_BOOL &st_lv_BIT_22, CIEC_BOOL &st_lv_BIT_23, CIEC_BOOL &st_lv_BIT_24, CIEC_BOOL &st_lv_BIT_25, CIEC_BOOL &st_lv_BIT_26, CIEC_BOOL &st_lv_BIT_27, CIEC_BOOL &st_lv_BIT_28, CIEC_BOOL &st_lv_BIT_29, CIEC_BOOL &st_lv_BIT_30, CIEC_BOOL &st_lv_BIT_31); + + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.cpp b/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.cpp new file mode 100644 index 000000000..3ceb17f19 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.cpp @@ -0,0 +1,276 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_QUARTERS + *** Description: this Function extracts the 16 QUARTER BYTE from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_DWORD_INTO_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_DWORD_INTO_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "forte_dword.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_QUARTERS, g_nStringIdSPLIT_DWORD_INTO_QUARTERS) + +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdDWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmDataOutputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07, g_nStringIdQUARTER_BYTE_08, g_nStringIdQUARTER_BYTE_09, g_nStringIdQUARTER_BYTE_10, g_nStringIdQUARTER_BYTE_11, g_nStringIdQUARTER_BYTE_12, g_nStringIdQUARTER_BYTE_13, g_nStringIdQUARTER_BYTE_14, g_nStringIdQUARTER_BYTE_15}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_DWORD_INTO_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 16, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_DWORD_INTO_QUARTERS::FORTE_SPLIT_DWORD_INTO_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QUARTER_BYTE_00(var_QUARTER_BYTE_00), + var_conn_QUARTER_BYTE_01(var_QUARTER_BYTE_01), + var_conn_QUARTER_BYTE_02(var_QUARTER_BYTE_02), + var_conn_QUARTER_BYTE_03(var_QUARTER_BYTE_03), + var_conn_QUARTER_BYTE_04(var_QUARTER_BYTE_04), + var_conn_QUARTER_BYTE_05(var_QUARTER_BYTE_05), + var_conn_QUARTER_BYTE_06(var_QUARTER_BYTE_06), + var_conn_QUARTER_BYTE_07(var_QUARTER_BYTE_07), + var_conn_QUARTER_BYTE_08(var_QUARTER_BYTE_08), + var_conn_QUARTER_BYTE_09(var_QUARTER_BYTE_09), + var_conn_QUARTER_BYTE_10(var_QUARTER_BYTE_10), + var_conn_QUARTER_BYTE_11(var_QUARTER_BYTE_11), + var_conn_QUARTER_BYTE_12(var_QUARTER_BYTE_12), + var_conn_QUARTER_BYTE_13(var_QUARTER_BYTE_13), + var_conn_QUARTER_BYTE_14(var_QUARTER_BYTE_14), + var_conn_QUARTER_BYTE_15(var_QUARTER_BYTE_15), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_QUARTER_BYTE_00(this, 0, &var_conn_QUARTER_BYTE_00), + conn_QUARTER_BYTE_01(this, 1, &var_conn_QUARTER_BYTE_01), + conn_QUARTER_BYTE_02(this, 2, &var_conn_QUARTER_BYTE_02), + conn_QUARTER_BYTE_03(this, 3, &var_conn_QUARTER_BYTE_03), + conn_QUARTER_BYTE_04(this, 4, &var_conn_QUARTER_BYTE_04), + conn_QUARTER_BYTE_05(this, 5, &var_conn_QUARTER_BYTE_05), + conn_QUARTER_BYTE_06(this, 6, &var_conn_QUARTER_BYTE_06), + conn_QUARTER_BYTE_07(this, 7, &var_conn_QUARTER_BYTE_07), + conn_QUARTER_BYTE_08(this, 8, &var_conn_QUARTER_BYTE_08), + conn_QUARTER_BYTE_09(this, 9, &var_conn_QUARTER_BYTE_09), + conn_QUARTER_BYTE_10(this, 10, &var_conn_QUARTER_BYTE_10), + conn_QUARTER_BYTE_11(this, 11, &var_conn_QUARTER_BYTE_11), + conn_QUARTER_BYTE_12(this, 12, &var_conn_QUARTER_BYTE_12), + conn_QUARTER_BYTE_13(this, 13, &var_conn_QUARTER_BYTE_13), + conn_QUARTER_BYTE_14(this, 14, &var_conn_QUARTER_BYTE_14), + conn_QUARTER_BYTE_15(this, 15, &var_conn_QUARTER_BYTE_15) { +} + +void FORTE_SPLIT_DWORD_INTO_QUARTERS::setInitialValues() { + var_IN = 0_DWORD; + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; + var_QUARTER_BYTE_08 = 0_BYTE; + var_QUARTER_BYTE_09 = 0_BYTE; + var_QUARTER_BYTE_10 = 0_BYTE; + var_QUARTER_BYTE_11 = 0_BYTE; + var_QUARTER_BYTE_12 = 0_BYTE; + var_QUARTER_BYTE_13 = 0_BYTE; + var_QUARTER_BYTE_14 = 0_BYTE; + var_QUARTER_BYTE_15 = 0_BYTE; +} + +void FORTE_SPLIT_DWORD_INTO_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_DWORD_INTO_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + writeData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + writeData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + writeData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + writeData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + writeData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + writeData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + writeData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + writeData(8, var_QUARTER_BYTE_08, conn_QUARTER_BYTE_08); + writeData(9, var_QUARTER_BYTE_09, conn_QUARTER_BYTE_09); + writeData(10, var_QUARTER_BYTE_10, conn_QUARTER_BYTE_10); + writeData(11, var_QUARTER_BYTE_11, conn_QUARTER_BYTE_11); + writeData(12, var_QUARTER_BYTE_12, conn_QUARTER_BYTE_12); + writeData(13, var_QUARTER_BYTE_13, conn_QUARTER_BYTE_13); + writeData(14, var_QUARTER_BYTE_14, conn_QUARTER_BYTE_14); + writeData(15, var_QUARTER_BYTE_15, conn_QUARTER_BYTE_15); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + case 8: return &var_QUARTER_BYTE_08; + case 9: return &var_QUARTER_BYTE_09; + case 10: return &var_QUARTER_BYTE_10; + case 11: return &var_QUARTER_BYTE_11; + case 12: return &var_QUARTER_BYTE_12; + case 13: return &var_QUARTER_BYTE_13; + case 14: return &var_QUARTER_BYTE_14; + case 15: return &var_QUARTER_BYTE_15; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_DWORD_INTO_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_DWORD_INTO_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_DWORD_INTO_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + case 8: return &conn_QUARTER_BYTE_08; + case 9: return &conn_QUARTER_BYTE_09; + case 10: return &conn_QUARTER_BYTE_10; + case 11: return &conn_QUARTER_BYTE_11; + case 12: return &conn_QUARTER_BYTE_12; + case 13: return &conn_QUARTER_BYTE_13; + case 14: return &conn_QUARTER_BYTE_14; + case 15: return &conn_QUARTER_BYTE_15; + } + return nullptr; +} + +void FORTE_SPLIT_DWORD_INTO_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_DWORD_INTO_QUARTERS(var_IN, var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07, var_QUARTER_BYTE_08, var_QUARTER_BYTE_09, var_QUARTER_BYTE_10, var_QUARTER_BYTE_11, var_QUARTER_BYTE_12, var_QUARTER_BYTE_13, var_QUARTER_BYTE_14, var_QUARTER_BYTE_15); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_DWORD_INTO_QUARTERS(CIEC_DWORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07, CIEC_BYTE &st_lv_QUARTER_BYTE_08, CIEC_BYTE &st_lv_QUARTER_BYTE_09, CIEC_BYTE &st_lv_QUARTER_BYTE_10, CIEC_BYTE &st_lv_QUARTER_BYTE_11, CIEC_BYTE &st_lv_QUARTER_BYTE_12, CIEC_BYTE &st_lv_QUARTER_BYTE_13, CIEC_BYTE &st_lv_QUARTER_BYTE_14, CIEC_BYTE &st_lv_QUARTER_BYTE_15) { + st_lv_QUARTER_BYTE_00 = 0_BYTE; + st_lv_QUARTER_BYTE_01 = 0_BYTE; + st_lv_QUARTER_BYTE_02 = 0_BYTE; + st_lv_QUARTER_BYTE_03 = 0_BYTE; + st_lv_QUARTER_BYTE_04 = 0_BYTE; + st_lv_QUARTER_BYTE_05 = 0_BYTE; + st_lv_QUARTER_BYTE_06 = 0_BYTE; + st_lv_QUARTER_BYTE_07 = 0_BYTE; + st_lv_QUARTER_BYTE_08 = 0_BYTE; + st_lv_QUARTER_BYTE_09 = 0_BYTE; + st_lv_QUARTER_BYTE_10 = 0_BYTE; + st_lv_QUARTER_BYTE_11 = 0_BYTE; + st_lv_QUARTER_BYTE_12 = 0_BYTE; + st_lv_QUARTER_BYTE_13 = 0_BYTE; + st_lv_QUARTER_BYTE_14 = 0_BYTE; + st_lv_QUARTER_BYTE_15 = 0_BYTE; + + #line 27 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_00 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_00), st_global_SHIFT_QUARTER_00)); + #line 28 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_01 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_01), st_global_SHIFT_QUARTER_01)); + #line 29 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_02 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_02), st_global_SHIFT_QUARTER_02)); + #line 30 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_03 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_03), st_global_SHIFT_QUARTER_03)); + #line 31 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_04 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_04), st_global_SHIFT_QUARTER_04)); + #line 32 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_05 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_05), st_global_SHIFT_QUARTER_05)); + #line 33 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_06 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_06), st_global_SHIFT_QUARTER_06)); + #line 34 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_07 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_07), st_global_SHIFT_QUARTER_07)); + #line 35 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_08 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_08), st_global_SHIFT_QUARTER_08)); + #line 36 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_09 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_09), st_global_SHIFT_QUARTER_09)); + #line 37 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_10 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_10), st_global_SHIFT_QUARTER_10)); + #line 38 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_11 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_11), st_global_SHIFT_QUARTER_11)); + #line 39 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_12 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_12), st_global_SHIFT_QUARTER_12)); + #line 40 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_13 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_13), st_global_SHIFT_QUARTER_13)); + #line 41 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_14 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_14), st_global_SHIFT_QUARTER_14)); + #line 42 "SPLIT_DWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_15 = func_DWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_DWORD_QUARTER_15), st_global_SHIFT_QUARTER_15)); + +} + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.h b/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.h new file mode 100644 index 000000000..9eaa8d152 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_QUARTERS_fct.h @@ -0,0 +1,150 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_QUARTERS + *** Description: this Function extracts the 16 QUARTER BYTE from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_DWORD_INTO_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_DWORD_INTO_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_DWORD var_IN; + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + CIEC_BYTE var_QUARTER_BYTE_08; + CIEC_BYTE var_QUARTER_BYTE_09; + CIEC_BYTE var_QUARTER_BYTE_10; + CIEC_BYTE var_QUARTER_BYTE_11; + CIEC_BYTE var_QUARTER_BYTE_12; + CIEC_BYTE var_QUARTER_BYTE_13; + CIEC_BYTE var_QUARTER_BYTE_14; + CIEC_BYTE var_QUARTER_BYTE_15; + + CIEC_BYTE var_conn_QUARTER_BYTE_00; + CIEC_BYTE var_conn_QUARTER_BYTE_01; + CIEC_BYTE var_conn_QUARTER_BYTE_02; + CIEC_BYTE var_conn_QUARTER_BYTE_03; + CIEC_BYTE var_conn_QUARTER_BYTE_04; + CIEC_BYTE var_conn_QUARTER_BYTE_05; + CIEC_BYTE var_conn_QUARTER_BYTE_06; + CIEC_BYTE var_conn_QUARTER_BYTE_07; + CIEC_BYTE var_conn_QUARTER_BYTE_08; + CIEC_BYTE var_conn_QUARTER_BYTE_09; + CIEC_BYTE var_conn_QUARTER_BYTE_10; + CIEC_BYTE var_conn_QUARTER_BYTE_11; + CIEC_BYTE var_conn_QUARTER_BYTE_12; + CIEC_BYTE var_conn_QUARTER_BYTE_13; + CIEC_BYTE var_conn_QUARTER_BYTE_14; + CIEC_BYTE var_conn_QUARTER_BYTE_15; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_QUARTER_BYTE_00; + CDataConnection conn_QUARTER_BYTE_01; + CDataConnection conn_QUARTER_BYTE_02; + CDataConnection conn_QUARTER_BYTE_03; + CDataConnection conn_QUARTER_BYTE_04; + CDataConnection conn_QUARTER_BYTE_05; + CDataConnection conn_QUARTER_BYTE_06; + CDataConnection conn_QUARTER_BYTE_07; + CDataConnection conn_QUARTER_BYTE_08; + CDataConnection conn_QUARTER_BYTE_09; + CDataConnection conn_QUARTER_BYTE_10; + CDataConnection conn_QUARTER_BYTE_11; + CDataConnection conn_QUARTER_BYTE_12; + CDataConnection conn_QUARTER_BYTE_13; + CDataConnection conn_QUARTER_BYTE_14; + CDataConnection conn_QUARTER_BYTE_15; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_DWORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07, CIEC_BYTE &paQUARTER_BYTE_08, CIEC_BYTE &paQUARTER_BYTE_09, CIEC_BYTE &paQUARTER_BYTE_10, CIEC_BYTE &paQUARTER_BYTE_11, CIEC_BYTE &paQUARTER_BYTE_12, CIEC_BYTE &paQUARTER_BYTE_13, CIEC_BYTE &paQUARTER_BYTE_14, CIEC_BYTE &paQUARTER_BYTE_15) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paQUARTER_BYTE_00 = var_QUARTER_BYTE_00; + paQUARTER_BYTE_01 = var_QUARTER_BYTE_01; + paQUARTER_BYTE_02 = var_QUARTER_BYTE_02; + paQUARTER_BYTE_03 = var_QUARTER_BYTE_03; + paQUARTER_BYTE_04 = var_QUARTER_BYTE_04; + paQUARTER_BYTE_05 = var_QUARTER_BYTE_05; + paQUARTER_BYTE_06 = var_QUARTER_BYTE_06; + paQUARTER_BYTE_07 = var_QUARTER_BYTE_07; + paQUARTER_BYTE_08 = var_QUARTER_BYTE_08; + paQUARTER_BYTE_09 = var_QUARTER_BYTE_09; + paQUARTER_BYTE_10 = var_QUARTER_BYTE_10; + paQUARTER_BYTE_11 = var_QUARTER_BYTE_11; + paQUARTER_BYTE_12 = var_QUARTER_BYTE_12; + paQUARTER_BYTE_13 = var_QUARTER_BYTE_13; + paQUARTER_BYTE_14 = var_QUARTER_BYTE_14; + paQUARTER_BYTE_15 = var_QUARTER_BYTE_15; + } + + void operator()(const CIEC_DWORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07, CIEC_BYTE &paQUARTER_BYTE_08, CIEC_BYTE &paQUARTER_BYTE_09, CIEC_BYTE &paQUARTER_BYTE_10, CIEC_BYTE &paQUARTER_BYTE_11, CIEC_BYTE &paQUARTER_BYTE_12, CIEC_BYTE &paQUARTER_BYTE_13, CIEC_BYTE &paQUARTER_BYTE_14, CIEC_BYTE &paQUARTER_BYTE_15) { + evt_REQ(paIN, paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07, paQUARTER_BYTE_08, paQUARTER_BYTE_09, paQUARTER_BYTE_10, paQUARTER_BYTE_11, paQUARTER_BYTE_12, paQUARTER_BYTE_13, paQUARTER_BYTE_14, paQUARTER_BYTE_15); + } +}; + +void func_SPLIT_DWORD_INTO_QUARTERS(CIEC_DWORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07, CIEC_BYTE &st_lv_QUARTER_BYTE_08, CIEC_BYTE &st_lv_QUARTER_BYTE_09, CIEC_BYTE &st_lv_QUARTER_BYTE_10, CIEC_BYTE &st_lv_QUARTER_BYTE_11, CIEC_BYTE &st_lv_QUARTER_BYTE_12, CIEC_BYTE &st_lv_QUARTER_BYTE_13, CIEC_BYTE &st_lv_QUARTER_BYTE_14, CIEC_BYTE &st_lv_QUARTER_BYTE_15); + + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.cpp b/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.cpp new file mode 100644 index 000000000..f552712dd --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.cpp @@ -0,0 +1,147 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_WORDS + *** Description: this Function extracts the 2 WORD from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_DWORD_INTO_WORDS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_DWORD_INTO_WORDS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_dword.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_WORDS, g_nStringIdSPLIT_DWORD_INTO_WORDS) + +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmDataInputTypeIds[] = {g_nStringIdDWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmDataOutputNames[] = {g_nStringIdWORD_00, g_nStringIdWORD_01}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmDataOutputTypeIds[] = {g_nStringIdWORD, g_nStringIdWORD}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_WORDS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_WORDS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_DWORD_INTO_WORDS::scmEOWith[] = {0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_DWORD_INTO_WORDS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_DWORD_INTO_WORDS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_DWORD_INTO_WORDS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_DWORD_INTO_WORDS::FORTE_SPLIT_DWORD_INTO_WORDS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_WORD_00(var_WORD_00), + var_conn_WORD_01(var_WORD_01), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_WORD_00(this, 0, &var_conn_WORD_00), + conn_WORD_01(this, 1, &var_conn_WORD_01) { +} + +void FORTE_SPLIT_DWORD_INTO_WORDS::setInitialValues() { + var_IN = 0_DWORD; + var_WORD_00 = 0_WORD; + var_WORD_01 = 0_WORD; +} + +void FORTE_SPLIT_DWORD_INTO_WORDS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_DWORD_INTO_WORDS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_WORD_00, conn_WORD_00); + writeData(1, var_WORD_01, conn_WORD_01); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_WORDS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_DWORD_INTO_WORDS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_WORD_00; + case 1: return &var_WORD_01; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_DWORD_INTO_WORDS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_DWORD_INTO_WORDS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_DWORD_INTO_WORDS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_WORD_00; + case 1: return &conn_WORD_01; + } + return nullptr; +} + +void FORTE_SPLIT_DWORD_INTO_WORDS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_DWORD_INTO_WORDS(var_IN, var_WORD_00, var_WORD_01); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_DWORD_INTO_WORDS(CIEC_DWORD st_lv_IN, CIEC_WORD &st_lv_WORD_00, CIEC_WORD &st_lv_WORD_01) { + st_lv_WORD_00 = 0_WORD; + st_lv_WORD_01 = 0_WORD; + + #line 13 "SPLIT_DWORD_INTO_WORDS.fct" + st_lv_WORD_00 = st_lv_IN.cpartial(0); + #line 14 "SPLIT_DWORD_INTO_WORDS.fct" + st_lv_WORD_01 = st_lv_IN.cpartial(1); + +} + diff --git a/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.h b/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.h new file mode 100644 index 000000000..7630d7f53 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_DWORD_INTO_WORDS_fct.h @@ -0,0 +1,94 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_DWORD_INTO_WORDS + *** Description: this Function extracts the 2 WORD from a dword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_dword.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_DWORD_INTO_WORDS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_DWORD_INTO_WORDS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_DWORD_INTO_WORDS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_DWORD var_IN; + + CIEC_WORD var_WORD_00; + CIEC_WORD var_WORD_01; + + CIEC_WORD var_conn_WORD_00; + CIEC_WORD var_conn_WORD_01; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_WORD_00; + CDataConnection conn_WORD_01; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_DWORD &paIN, CIEC_WORD &paWORD_00, CIEC_WORD &paWORD_01) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paWORD_00 = var_WORD_00; + paWORD_01 = var_WORD_01; + } + + void operator()(const CIEC_DWORD &paIN, CIEC_WORD &paWORD_00, CIEC_WORD &paWORD_01) { + evt_REQ(paIN, paWORD_00, paWORD_01); + } +}; + +void func_SPLIT_DWORD_INTO_WORDS(CIEC_DWORD st_lv_IN, CIEC_WORD &st_lv_WORD_00, CIEC_WORD &st_lv_WORD_01); + + diff --git a/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.cpp b/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.cpp new file mode 100644 index 000000000..12b5c01b1 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.cpp @@ -0,0 +1,705 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_LWORD_INTO_BOOLS + *** Description: this Function extracts the 64 BOOLS from a lword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_LWORD_INTO_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_LWORD_INTO_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_lword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_LWORD_INTO_BOOLS, g_nStringIdSPLIT_LWORD_INTO_BOOLS) + +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmDataInputTypeIds[] = {g_nStringIdLWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmDataOutputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15, g_nStringIdBIT_16, g_nStringIdBIT_17, g_nStringIdBIT_18, g_nStringIdBIT_19, g_nStringIdBIT_20, g_nStringIdBIT_21, g_nStringIdBIT_22, g_nStringIdBIT_23, g_nStringIdBIT_24, g_nStringIdBIT_25, g_nStringIdBIT_26, g_nStringIdBIT_27, g_nStringIdBIT_28, g_nStringIdBIT_29, g_nStringIdBIT_30, g_nStringIdBIT_31, g_nStringIdBIT_32, g_nStringIdBIT_33, g_nStringIdBIT_34, g_nStringIdBIT_35, g_nStringIdBIT_36, g_nStringIdBIT_37, g_nStringIdBIT_38, g_nStringIdBIT_39, g_nStringIdBIT_40, g_nStringIdBIT_41, g_nStringIdBIT_42, g_nStringIdBIT_43, g_nStringIdBIT_44, g_nStringIdBIT_45, g_nStringIdBIT_46, g_nStringIdBIT_47, g_nStringIdBIT_48, g_nStringIdBIT_49, g_nStringIdBIT_50, g_nStringIdBIT_51, g_nStringIdBIT_52, g_nStringIdBIT_53, g_nStringIdBIT_54, g_nStringIdBIT_55, g_nStringIdBIT_56, g_nStringIdBIT_57, g_nStringIdBIT_58, g_nStringIdBIT_59, g_nStringIdBIT_60, g_nStringIdBIT_61, g_nStringIdBIT_62, g_nStringIdBIT_63}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const TDataIOID FORTE_SPLIT_LWORD_INTO_BOOLS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_LWORD_INTO_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_LWORD_INTO_BOOLS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_LWORD_INTO_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_LWORD_INTO_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 64, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_LWORD_INTO_BOOLS::FORTE_SPLIT_LWORD_INTO_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_BIT_00(var_BIT_00), + var_conn_BIT_01(var_BIT_01), + var_conn_BIT_02(var_BIT_02), + var_conn_BIT_03(var_BIT_03), + var_conn_BIT_04(var_BIT_04), + var_conn_BIT_05(var_BIT_05), + var_conn_BIT_06(var_BIT_06), + var_conn_BIT_07(var_BIT_07), + var_conn_BIT_08(var_BIT_08), + var_conn_BIT_09(var_BIT_09), + var_conn_BIT_10(var_BIT_10), + var_conn_BIT_11(var_BIT_11), + var_conn_BIT_12(var_BIT_12), + var_conn_BIT_13(var_BIT_13), + var_conn_BIT_14(var_BIT_14), + var_conn_BIT_15(var_BIT_15), + var_conn_BIT_16(var_BIT_16), + var_conn_BIT_17(var_BIT_17), + var_conn_BIT_18(var_BIT_18), + var_conn_BIT_19(var_BIT_19), + var_conn_BIT_20(var_BIT_20), + var_conn_BIT_21(var_BIT_21), + var_conn_BIT_22(var_BIT_22), + var_conn_BIT_23(var_BIT_23), + var_conn_BIT_24(var_BIT_24), + var_conn_BIT_25(var_BIT_25), + var_conn_BIT_26(var_BIT_26), + var_conn_BIT_27(var_BIT_27), + var_conn_BIT_28(var_BIT_28), + var_conn_BIT_29(var_BIT_29), + var_conn_BIT_30(var_BIT_30), + var_conn_BIT_31(var_BIT_31), + var_conn_BIT_32(var_BIT_32), + var_conn_BIT_33(var_BIT_33), + var_conn_BIT_34(var_BIT_34), + var_conn_BIT_35(var_BIT_35), + var_conn_BIT_36(var_BIT_36), + var_conn_BIT_37(var_BIT_37), + var_conn_BIT_38(var_BIT_38), + var_conn_BIT_39(var_BIT_39), + var_conn_BIT_40(var_BIT_40), + var_conn_BIT_41(var_BIT_41), + var_conn_BIT_42(var_BIT_42), + var_conn_BIT_43(var_BIT_43), + var_conn_BIT_44(var_BIT_44), + var_conn_BIT_45(var_BIT_45), + var_conn_BIT_46(var_BIT_46), + var_conn_BIT_47(var_BIT_47), + var_conn_BIT_48(var_BIT_48), + var_conn_BIT_49(var_BIT_49), + var_conn_BIT_50(var_BIT_50), + var_conn_BIT_51(var_BIT_51), + var_conn_BIT_52(var_BIT_52), + var_conn_BIT_53(var_BIT_53), + var_conn_BIT_54(var_BIT_54), + var_conn_BIT_55(var_BIT_55), + var_conn_BIT_56(var_BIT_56), + var_conn_BIT_57(var_BIT_57), + var_conn_BIT_58(var_BIT_58), + var_conn_BIT_59(var_BIT_59), + var_conn_BIT_60(var_BIT_60), + var_conn_BIT_61(var_BIT_61), + var_conn_BIT_62(var_BIT_62), + var_conn_BIT_63(var_BIT_63), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_BIT_00(this, 0, &var_conn_BIT_00), + conn_BIT_01(this, 1, &var_conn_BIT_01), + conn_BIT_02(this, 2, &var_conn_BIT_02), + conn_BIT_03(this, 3, &var_conn_BIT_03), + conn_BIT_04(this, 4, &var_conn_BIT_04), + conn_BIT_05(this, 5, &var_conn_BIT_05), + conn_BIT_06(this, 6, &var_conn_BIT_06), + conn_BIT_07(this, 7, &var_conn_BIT_07), + conn_BIT_08(this, 8, &var_conn_BIT_08), + conn_BIT_09(this, 9, &var_conn_BIT_09), + conn_BIT_10(this, 10, &var_conn_BIT_10), + conn_BIT_11(this, 11, &var_conn_BIT_11), + conn_BIT_12(this, 12, &var_conn_BIT_12), + conn_BIT_13(this, 13, &var_conn_BIT_13), + conn_BIT_14(this, 14, &var_conn_BIT_14), + conn_BIT_15(this, 15, &var_conn_BIT_15), + conn_BIT_16(this, 16, &var_conn_BIT_16), + conn_BIT_17(this, 17, &var_conn_BIT_17), + conn_BIT_18(this, 18, &var_conn_BIT_18), + conn_BIT_19(this, 19, &var_conn_BIT_19), + conn_BIT_20(this, 20, &var_conn_BIT_20), + conn_BIT_21(this, 21, &var_conn_BIT_21), + conn_BIT_22(this, 22, &var_conn_BIT_22), + conn_BIT_23(this, 23, &var_conn_BIT_23), + conn_BIT_24(this, 24, &var_conn_BIT_24), + conn_BIT_25(this, 25, &var_conn_BIT_25), + conn_BIT_26(this, 26, &var_conn_BIT_26), + conn_BIT_27(this, 27, &var_conn_BIT_27), + conn_BIT_28(this, 28, &var_conn_BIT_28), + conn_BIT_29(this, 29, &var_conn_BIT_29), + conn_BIT_30(this, 30, &var_conn_BIT_30), + conn_BIT_31(this, 31, &var_conn_BIT_31), + conn_BIT_32(this, 32, &var_conn_BIT_32), + conn_BIT_33(this, 33, &var_conn_BIT_33), + conn_BIT_34(this, 34, &var_conn_BIT_34), + conn_BIT_35(this, 35, &var_conn_BIT_35), + conn_BIT_36(this, 36, &var_conn_BIT_36), + conn_BIT_37(this, 37, &var_conn_BIT_37), + conn_BIT_38(this, 38, &var_conn_BIT_38), + conn_BIT_39(this, 39, &var_conn_BIT_39), + conn_BIT_40(this, 40, &var_conn_BIT_40), + conn_BIT_41(this, 41, &var_conn_BIT_41), + conn_BIT_42(this, 42, &var_conn_BIT_42), + conn_BIT_43(this, 43, &var_conn_BIT_43), + conn_BIT_44(this, 44, &var_conn_BIT_44), + conn_BIT_45(this, 45, &var_conn_BIT_45), + conn_BIT_46(this, 46, &var_conn_BIT_46), + conn_BIT_47(this, 47, &var_conn_BIT_47), + conn_BIT_48(this, 48, &var_conn_BIT_48), + conn_BIT_49(this, 49, &var_conn_BIT_49), + conn_BIT_50(this, 50, &var_conn_BIT_50), + conn_BIT_51(this, 51, &var_conn_BIT_51), + conn_BIT_52(this, 52, &var_conn_BIT_52), + conn_BIT_53(this, 53, &var_conn_BIT_53), + conn_BIT_54(this, 54, &var_conn_BIT_54), + conn_BIT_55(this, 55, &var_conn_BIT_55), + conn_BIT_56(this, 56, &var_conn_BIT_56), + conn_BIT_57(this, 57, &var_conn_BIT_57), + conn_BIT_58(this, 58, &var_conn_BIT_58), + conn_BIT_59(this, 59, &var_conn_BIT_59), + conn_BIT_60(this, 60, &var_conn_BIT_60), + conn_BIT_61(this, 61, &var_conn_BIT_61), + conn_BIT_62(this, 62, &var_conn_BIT_62), + conn_BIT_63(this, 63, &var_conn_BIT_63) { +} + +void FORTE_SPLIT_LWORD_INTO_BOOLS::setInitialValues() { + var_IN = 0_LWORD; + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; + var_BIT_16 = 0_BOOL; + var_BIT_17 = 0_BOOL; + var_BIT_18 = 0_BOOL; + var_BIT_19 = 0_BOOL; + var_BIT_20 = 0_BOOL; + var_BIT_21 = 0_BOOL; + var_BIT_22 = 0_BOOL; + var_BIT_23 = 0_BOOL; + var_BIT_24 = 0_BOOL; + var_BIT_25 = 0_BOOL; + var_BIT_26 = 0_BOOL; + var_BIT_27 = 0_BOOL; + var_BIT_28 = 0_BOOL; + var_BIT_29 = 0_BOOL; + var_BIT_30 = 0_BOOL; + var_BIT_31 = 0_BOOL; + var_BIT_32 = 0_BOOL; + var_BIT_33 = 0_BOOL; + var_BIT_34 = 0_BOOL; + var_BIT_35 = 0_BOOL; + var_BIT_36 = 0_BOOL; + var_BIT_37 = 0_BOOL; + var_BIT_38 = 0_BOOL; + var_BIT_39 = 0_BOOL; + var_BIT_40 = 0_BOOL; + var_BIT_41 = 0_BOOL; + var_BIT_42 = 0_BOOL; + var_BIT_43 = 0_BOOL; + var_BIT_44 = 0_BOOL; + var_BIT_45 = 0_BOOL; + var_BIT_46 = 0_BOOL; + var_BIT_47 = 0_BOOL; + var_BIT_48 = 0_BOOL; + var_BIT_49 = 0_BOOL; + var_BIT_50 = 0_BOOL; + var_BIT_51 = 0_BOOL; + var_BIT_52 = 0_BOOL; + var_BIT_53 = 0_BOOL; + var_BIT_54 = 0_BOOL; + var_BIT_55 = 0_BOOL; + var_BIT_56 = 0_BOOL; + var_BIT_57 = 0_BOOL; + var_BIT_58 = 0_BOOL; + var_BIT_59 = 0_BOOL; + var_BIT_60 = 0_BOOL; + var_BIT_61 = 0_BOOL; + var_BIT_62 = 0_BOOL; + var_BIT_63 = 0_BOOL; +} + +void FORTE_SPLIT_LWORD_INTO_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_LWORD_INTO_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_BIT_00, conn_BIT_00); + writeData(1, var_BIT_01, conn_BIT_01); + writeData(2, var_BIT_02, conn_BIT_02); + writeData(3, var_BIT_03, conn_BIT_03); + writeData(4, var_BIT_04, conn_BIT_04); + writeData(5, var_BIT_05, conn_BIT_05); + writeData(6, var_BIT_06, conn_BIT_06); + writeData(7, var_BIT_07, conn_BIT_07); + writeData(8, var_BIT_08, conn_BIT_08); + writeData(9, var_BIT_09, conn_BIT_09); + writeData(10, var_BIT_10, conn_BIT_10); + writeData(11, var_BIT_11, conn_BIT_11); + writeData(12, var_BIT_12, conn_BIT_12); + writeData(13, var_BIT_13, conn_BIT_13); + writeData(14, var_BIT_14, conn_BIT_14); + writeData(15, var_BIT_15, conn_BIT_15); + writeData(16, var_BIT_16, conn_BIT_16); + writeData(17, var_BIT_17, conn_BIT_17); + writeData(18, var_BIT_18, conn_BIT_18); + writeData(19, var_BIT_19, conn_BIT_19); + writeData(20, var_BIT_20, conn_BIT_20); + writeData(21, var_BIT_21, conn_BIT_21); + writeData(22, var_BIT_22, conn_BIT_22); + writeData(23, var_BIT_23, conn_BIT_23); + writeData(24, var_BIT_24, conn_BIT_24); + writeData(25, var_BIT_25, conn_BIT_25); + writeData(26, var_BIT_26, conn_BIT_26); + writeData(27, var_BIT_27, conn_BIT_27); + writeData(28, var_BIT_28, conn_BIT_28); + writeData(29, var_BIT_29, conn_BIT_29); + writeData(30, var_BIT_30, conn_BIT_30); + writeData(31, var_BIT_31, conn_BIT_31); + writeData(32, var_BIT_32, conn_BIT_32); + writeData(33, var_BIT_33, conn_BIT_33); + writeData(34, var_BIT_34, conn_BIT_34); + writeData(35, var_BIT_35, conn_BIT_35); + writeData(36, var_BIT_36, conn_BIT_36); + writeData(37, var_BIT_37, conn_BIT_37); + writeData(38, var_BIT_38, conn_BIT_38); + writeData(39, var_BIT_39, conn_BIT_39); + writeData(40, var_BIT_40, conn_BIT_40); + writeData(41, var_BIT_41, conn_BIT_41); + writeData(42, var_BIT_42, conn_BIT_42); + writeData(43, var_BIT_43, conn_BIT_43); + writeData(44, var_BIT_44, conn_BIT_44); + writeData(45, var_BIT_45, conn_BIT_45); + writeData(46, var_BIT_46, conn_BIT_46); + writeData(47, var_BIT_47, conn_BIT_47); + writeData(48, var_BIT_48, conn_BIT_48); + writeData(49, var_BIT_49, conn_BIT_49); + writeData(50, var_BIT_50, conn_BIT_50); + writeData(51, var_BIT_51, conn_BIT_51); + writeData(52, var_BIT_52, conn_BIT_52); + writeData(53, var_BIT_53, conn_BIT_53); + writeData(54, var_BIT_54, conn_BIT_54); + writeData(55, var_BIT_55, conn_BIT_55); + writeData(56, var_BIT_56, conn_BIT_56); + writeData(57, var_BIT_57, conn_BIT_57); + writeData(58, var_BIT_58, conn_BIT_58); + writeData(59, var_BIT_59, conn_BIT_59); + writeData(60, var_BIT_60, conn_BIT_60); + writeData(61, var_BIT_61, conn_BIT_61); + writeData(62, var_BIT_62, conn_BIT_62); + writeData(63, var_BIT_63, conn_BIT_63); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_LWORD_INTO_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_LWORD_INTO_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + case 16: return &var_BIT_16; + case 17: return &var_BIT_17; + case 18: return &var_BIT_18; + case 19: return &var_BIT_19; + case 20: return &var_BIT_20; + case 21: return &var_BIT_21; + case 22: return &var_BIT_22; + case 23: return &var_BIT_23; + case 24: return &var_BIT_24; + case 25: return &var_BIT_25; + case 26: return &var_BIT_26; + case 27: return &var_BIT_27; + case 28: return &var_BIT_28; + case 29: return &var_BIT_29; + case 30: return &var_BIT_30; + case 31: return &var_BIT_31; + case 32: return &var_BIT_32; + case 33: return &var_BIT_33; + case 34: return &var_BIT_34; + case 35: return &var_BIT_35; + case 36: return &var_BIT_36; + case 37: return &var_BIT_37; + case 38: return &var_BIT_38; + case 39: return &var_BIT_39; + case 40: return &var_BIT_40; + case 41: return &var_BIT_41; + case 42: return &var_BIT_42; + case 43: return &var_BIT_43; + case 44: return &var_BIT_44; + case 45: return &var_BIT_45; + case 46: return &var_BIT_46; + case 47: return &var_BIT_47; + case 48: return &var_BIT_48; + case 49: return &var_BIT_49; + case 50: return &var_BIT_50; + case 51: return &var_BIT_51; + case 52: return &var_BIT_52; + case 53: return &var_BIT_53; + case 54: return &var_BIT_54; + case 55: return &var_BIT_55; + case 56: return &var_BIT_56; + case 57: return &var_BIT_57; + case 58: return &var_BIT_58; + case 59: return &var_BIT_59; + case 60: return &var_BIT_60; + case 61: return &var_BIT_61; + case 62: return &var_BIT_62; + case 63: return &var_BIT_63; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_LWORD_INTO_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_LWORD_INTO_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_LWORD_INTO_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + case 16: return &conn_BIT_16; + case 17: return &conn_BIT_17; + case 18: return &conn_BIT_18; + case 19: return &conn_BIT_19; + case 20: return &conn_BIT_20; + case 21: return &conn_BIT_21; + case 22: return &conn_BIT_22; + case 23: return &conn_BIT_23; + case 24: return &conn_BIT_24; + case 25: return &conn_BIT_25; + case 26: return &conn_BIT_26; + case 27: return &conn_BIT_27; + case 28: return &conn_BIT_28; + case 29: return &conn_BIT_29; + case 30: return &conn_BIT_30; + case 31: return &conn_BIT_31; + case 32: return &conn_BIT_32; + case 33: return &conn_BIT_33; + case 34: return &conn_BIT_34; + case 35: return &conn_BIT_35; + case 36: return &conn_BIT_36; + case 37: return &conn_BIT_37; + case 38: return &conn_BIT_38; + case 39: return &conn_BIT_39; + case 40: return &conn_BIT_40; + case 41: return &conn_BIT_41; + case 42: return &conn_BIT_42; + case 43: return &conn_BIT_43; + case 44: return &conn_BIT_44; + case 45: return &conn_BIT_45; + case 46: return &conn_BIT_46; + case 47: return &conn_BIT_47; + case 48: return &conn_BIT_48; + case 49: return &conn_BIT_49; + case 50: return &conn_BIT_50; + case 51: return &conn_BIT_51; + case 52: return &conn_BIT_52; + case 53: return &conn_BIT_53; + case 54: return &conn_BIT_54; + case 55: return &conn_BIT_55; + case 56: return &conn_BIT_56; + case 57: return &conn_BIT_57; + case 58: return &conn_BIT_58; + case 59: return &conn_BIT_59; + case 60: return &conn_BIT_60; + case 61: return &conn_BIT_61; + case 62: return &conn_BIT_62; + case 63: return &conn_BIT_63; + } + return nullptr; +} + +void FORTE_SPLIT_LWORD_INTO_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_LWORD_INTO_BOOLS(var_IN, var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15, var_BIT_16, var_BIT_17, var_BIT_18, var_BIT_19, var_BIT_20, var_BIT_21, var_BIT_22, var_BIT_23, var_BIT_24, var_BIT_25, var_BIT_26, var_BIT_27, var_BIT_28, var_BIT_29, var_BIT_30, var_BIT_31, var_BIT_32, var_BIT_33, var_BIT_34, var_BIT_35, var_BIT_36, var_BIT_37, var_BIT_38, var_BIT_39, var_BIT_40, var_BIT_41, var_BIT_42, var_BIT_43, var_BIT_44, var_BIT_45, var_BIT_46, var_BIT_47, var_BIT_48, var_BIT_49, var_BIT_50, var_BIT_51, var_BIT_52, var_BIT_53, var_BIT_54, var_BIT_55, var_BIT_56, var_BIT_57, var_BIT_58, var_BIT_59, var_BIT_60, var_BIT_61, var_BIT_62, var_BIT_63); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_LWORD_INTO_BOOLS(CIEC_LWORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15, CIEC_BOOL &st_lv_BIT_16, CIEC_BOOL &st_lv_BIT_17, CIEC_BOOL &st_lv_BIT_18, CIEC_BOOL &st_lv_BIT_19, CIEC_BOOL &st_lv_BIT_20, CIEC_BOOL &st_lv_BIT_21, CIEC_BOOL &st_lv_BIT_22, CIEC_BOOL &st_lv_BIT_23, CIEC_BOOL &st_lv_BIT_24, CIEC_BOOL &st_lv_BIT_25, CIEC_BOOL &st_lv_BIT_26, CIEC_BOOL &st_lv_BIT_27, CIEC_BOOL &st_lv_BIT_28, CIEC_BOOL &st_lv_BIT_29, CIEC_BOOL &st_lv_BIT_30, CIEC_BOOL &st_lv_BIT_31, CIEC_BOOL &st_lv_BIT_32, CIEC_BOOL &st_lv_BIT_33, CIEC_BOOL &st_lv_BIT_34, CIEC_BOOL &st_lv_BIT_35, CIEC_BOOL &st_lv_BIT_36, CIEC_BOOL &st_lv_BIT_37, CIEC_BOOL &st_lv_BIT_38, CIEC_BOOL &st_lv_BIT_39, CIEC_BOOL &st_lv_BIT_40, CIEC_BOOL &st_lv_BIT_41, CIEC_BOOL &st_lv_BIT_42, CIEC_BOOL &st_lv_BIT_43, CIEC_BOOL &st_lv_BIT_44, CIEC_BOOL &st_lv_BIT_45, CIEC_BOOL &st_lv_BIT_46, CIEC_BOOL &st_lv_BIT_47, CIEC_BOOL &st_lv_BIT_48, CIEC_BOOL &st_lv_BIT_49, CIEC_BOOL &st_lv_BIT_50, CIEC_BOOL &st_lv_BIT_51, CIEC_BOOL &st_lv_BIT_52, CIEC_BOOL &st_lv_BIT_53, CIEC_BOOL &st_lv_BIT_54, CIEC_BOOL &st_lv_BIT_55, CIEC_BOOL &st_lv_BIT_56, CIEC_BOOL &st_lv_BIT_57, CIEC_BOOL &st_lv_BIT_58, CIEC_BOOL &st_lv_BIT_59, CIEC_BOOL &st_lv_BIT_60, CIEC_BOOL &st_lv_BIT_61, CIEC_BOOL &st_lv_BIT_62, CIEC_BOOL &st_lv_BIT_63) { + st_lv_BIT_00 = 0_BOOL; + st_lv_BIT_01 = 0_BOOL; + st_lv_BIT_02 = 0_BOOL; + st_lv_BIT_03 = 0_BOOL; + st_lv_BIT_04 = 0_BOOL; + st_lv_BIT_05 = 0_BOOL; + st_lv_BIT_06 = 0_BOOL; + st_lv_BIT_07 = 0_BOOL; + st_lv_BIT_08 = 0_BOOL; + st_lv_BIT_09 = 0_BOOL; + st_lv_BIT_10 = 0_BOOL; + st_lv_BIT_11 = 0_BOOL; + st_lv_BIT_12 = 0_BOOL; + st_lv_BIT_13 = 0_BOOL; + st_lv_BIT_14 = 0_BOOL; + st_lv_BIT_15 = 0_BOOL; + st_lv_BIT_16 = 0_BOOL; + st_lv_BIT_17 = 0_BOOL; + st_lv_BIT_18 = 0_BOOL; + st_lv_BIT_19 = 0_BOOL; + st_lv_BIT_20 = 0_BOOL; + st_lv_BIT_21 = 0_BOOL; + st_lv_BIT_22 = 0_BOOL; + st_lv_BIT_23 = 0_BOOL; + st_lv_BIT_24 = 0_BOOL; + st_lv_BIT_25 = 0_BOOL; + st_lv_BIT_26 = 0_BOOL; + st_lv_BIT_27 = 0_BOOL; + st_lv_BIT_28 = 0_BOOL; + st_lv_BIT_29 = 0_BOOL; + st_lv_BIT_30 = 0_BOOL; + st_lv_BIT_31 = 0_BOOL; + st_lv_BIT_32 = 0_BOOL; + st_lv_BIT_33 = 0_BOOL; + st_lv_BIT_34 = 0_BOOL; + st_lv_BIT_35 = 0_BOOL; + st_lv_BIT_36 = 0_BOOL; + st_lv_BIT_37 = 0_BOOL; + st_lv_BIT_38 = 0_BOOL; + st_lv_BIT_39 = 0_BOOL; + st_lv_BIT_40 = 0_BOOL; + st_lv_BIT_41 = 0_BOOL; + st_lv_BIT_42 = 0_BOOL; + st_lv_BIT_43 = 0_BOOL; + st_lv_BIT_44 = 0_BOOL; + st_lv_BIT_45 = 0_BOOL; + st_lv_BIT_46 = 0_BOOL; + st_lv_BIT_47 = 0_BOOL; + st_lv_BIT_48 = 0_BOOL; + st_lv_BIT_49 = 0_BOOL; + st_lv_BIT_50 = 0_BOOL; + st_lv_BIT_51 = 0_BOOL; + st_lv_BIT_52 = 0_BOOL; + st_lv_BIT_53 = 0_BOOL; + st_lv_BIT_54 = 0_BOOL; + st_lv_BIT_55 = 0_BOOL; + st_lv_BIT_56 = 0_BOOL; + st_lv_BIT_57 = 0_BOOL; + st_lv_BIT_58 = 0_BOOL; + st_lv_BIT_59 = 0_BOOL; + st_lv_BIT_60 = 0_BOOL; + st_lv_BIT_61 = 0_BOOL; + st_lv_BIT_62 = 0_BOOL; + st_lv_BIT_63 = 0_BOOL; + + #line 75 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_00 = st_lv_IN.cpartial(0); + #line 76 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_01 = st_lv_IN.cpartial(1); + #line 77 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_02 = st_lv_IN.cpartial(2); + #line 78 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_03 = st_lv_IN.cpartial(3); + #line 79 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_04 = st_lv_IN.cpartial(4); + #line 80 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_05 = st_lv_IN.cpartial(5); + #line 81 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_06 = st_lv_IN.cpartial(6); + #line 82 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_07 = st_lv_IN.cpartial(7); + #line 83 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_08 = st_lv_IN.cpartial(8); + #line 84 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_09 = st_lv_IN.cpartial(9); + #line 85 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_10 = st_lv_IN.cpartial(10); + #line 86 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_11 = st_lv_IN.cpartial(11); + #line 87 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_12 = st_lv_IN.cpartial(12); + #line 88 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_13 = st_lv_IN.cpartial(13); + #line 89 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_14 = st_lv_IN.cpartial(14); + #line 90 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_15 = st_lv_IN.cpartial(15); + #line 91 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_16 = st_lv_IN.cpartial(16); + #line 92 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_17 = st_lv_IN.cpartial(17); + #line 93 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_18 = st_lv_IN.cpartial(18); + #line 94 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_19 = st_lv_IN.cpartial(19); + #line 95 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_20 = st_lv_IN.cpartial(20); + #line 96 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_21 = st_lv_IN.cpartial(21); + #line 97 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_22 = st_lv_IN.cpartial(22); + #line 98 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_23 = st_lv_IN.cpartial(23); + #line 99 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_24 = st_lv_IN.cpartial(24); + #line 100 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_25 = st_lv_IN.cpartial(25); + #line 101 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_26 = st_lv_IN.cpartial(26); + #line 102 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_27 = st_lv_IN.cpartial(27); + #line 103 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_28 = st_lv_IN.cpartial(28); + #line 104 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_29 = st_lv_IN.cpartial(29); + #line 105 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_30 = st_lv_IN.cpartial(30); + #line 106 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_31 = st_lv_IN.cpartial(31); + #line 107 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_32 = st_lv_IN.cpartial(32); + #line 108 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_33 = st_lv_IN.cpartial(33); + #line 109 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_34 = st_lv_IN.cpartial(34); + #line 110 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_35 = st_lv_IN.cpartial(35); + #line 111 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_36 = st_lv_IN.cpartial(36); + #line 112 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_37 = st_lv_IN.cpartial(37); + #line 113 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_38 = st_lv_IN.cpartial(38); + #line 114 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_39 = st_lv_IN.cpartial(39); + #line 115 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_40 = st_lv_IN.cpartial(40); + #line 116 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_41 = st_lv_IN.cpartial(41); + #line 117 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_42 = st_lv_IN.cpartial(42); + #line 118 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_43 = st_lv_IN.cpartial(43); + #line 119 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_44 = st_lv_IN.cpartial(44); + #line 120 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_45 = st_lv_IN.cpartial(45); + #line 121 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_46 = st_lv_IN.cpartial(46); + #line 122 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_47 = st_lv_IN.cpartial(47); + #line 123 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_48 = st_lv_IN.cpartial(48); + #line 124 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_49 = st_lv_IN.cpartial(49); + #line 125 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_50 = st_lv_IN.cpartial(50); + #line 126 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_51 = st_lv_IN.cpartial(51); + #line 127 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_52 = st_lv_IN.cpartial(52); + #line 128 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_53 = st_lv_IN.cpartial(53); + #line 129 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_54 = st_lv_IN.cpartial(54); + #line 130 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_55 = st_lv_IN.cpartial(55); + #line 131 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_56 = st_lv_IN.cpartial(56); + #line 132 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_57 = st_lv_IN.cpartial(57); + #line 133 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_58 = st_lv_IN.cpartial(58); + #line 134 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_59 = st_lv_IN.cpartial(59); + #line 135 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_60 = st_lv_IN.cpartial(60); + #line 136 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_61 = st_lv_IN.cpartial(61); + #line 137 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_62 = st_lv_IN.cpartial(62); + #line 138 "SPLIT_LWORD_INTO_BOOLS.fct" + st_lv_BIT_63 = st_lv_IN.cpartial(63); + +} + diff --git a/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.h b/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.h new file mode 100644 index 000000000..87c545347 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_LWORD_INTO_BOOLS_fct.h @@ -0,0 +1,342 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_LWORD_INTO_BOOLS + *** Description: this Function extracts the 64 BOOLS from a lword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_lword.h" +#include "forte_bool.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_LWORD_INTO_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_LWORD_INTO_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_LWORD_INTO_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_LWORD var_IN; + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + CIEC_BOOL var_BIT_16; + CIEC_BOOL var_BIT_17; + CIEC_BOOL var_BIT_18; + CIEC_BOOL var_BIT_19; + CIEC_BOOL var_BIT_20; + CIEC_BOOL var_BIT_21; + CIEC_BOOL var_BIT_22; + CIEC_BOOL var_BIT_23; + CIEC_BOOL var_BIT_24; + CIEC_BOOL var_BIT_25; + CIEC_BOOL var_BIT_26; + CIEC_BOOL var_BIT_27; + CIEC_BOOL var_BIT_28; + CIEC_BOOL var_BIT_29; + CIEC_BOOL var_BIT_30; + CIEC_BOOL var_BIT_31; + CIEC_BOOL var_BIT_32; + CIEC_BOOL var_BIT_33; + CIEC_BOOL var_BIT_34; + CIEC_BOOL var_BIT_35; + CIEC_BOOL var_BIT_36; + CIEC_BOOL var_BIT_37; + CIEC_BOOL var_BIT_38; + CIEC_BOOL var_BIT_39; + CIEC_BOOL var_BIT_40; + CIEC_BOOL var_BIT_41; + CIEC_BOOL var_BIT_42; + CIEC_BOOL var_BIT_43; + CIEC_BOOL var_BIT_44; + CIEC_BOOL var_BIT_45; + CIEC_BOOL var_BIT_46; + CIEC_BOOL var_BIT_47; + CIEC_BOOL var_BIT_48; + CIEC_BOOL var_BIT_49; + CIEC_BOOL var_BIT_50; + CIEC_BOOL var_BIT_51; + CIEC_BOOL var_BIT_52; + CIEC_BOOL var_BIT_53; + CIEC_BOOL var_BIT_54; + CIEC_BOOL var_BIT_55; + CIEC_BOOL var_BIT_56; + CIEC_BOOL var_BIT_57; + CIEC_BOOL var_BIT_58; + CIEC_BOOL var_BIT_59; + CIEC_BOOL var_BIT_60; + CIEC_BOOL var_BIT_61; + CIEC_BOOL var_BIT_62; + CIEC_BOOL var_BIT_63; + + CIEC_BOOL var_conn_BIT_00; + CIEC_BOOL var_conn_BIT_01; + CIEC_BOOL var_conn_BIT_02; + CIEC_BOOL var_conn_BIT_03; + CIEC_BOOL var_conn_BIT_04; + CIEC_BOOL var_conn_BIT_05; + CIEC_BOOL var_conn_BIT_06; + CIEC_BOOL var_conn_BIT_07; + CIEC_BOOL var_conn_BIT_08; + CIEC_BOOL var_conn_BIT_09; + CIEC_BOOL var_conn_BIT_10; + CIEC_BOOL var_conn_BIT_11; + CIEC_BOOL var_conn_BIT_12; + CIEC_BOOL var_conn_BIT_13; + CIEC_BOOL var_conn_BIT_14; + CIEC_BOOL var_conn_BIT_15; + CIEC_BOOL var_conn_BIT_16; + CIEC_BOOL var_conn_BIT_17; + CIEC_BOOL var_conn_BIT_18; + CIEC_BOOL var_conn_BIT_19; + CIEC_BOOL var_conn_BIT_20; + CIEC_BOOL var_conn_BIT_21; + CIEC_BOOL var_conn_BIT_22; + CIEC_BOOL var_conn_BIT_23; + CIEC_BOOL var_conn_BIT_24; + CIEC_BOOL var_conn_BIT_25; + CIEC_BOOL var_conn_BIT_26; + CIEC_BOOL var_conn_BIT_27; + CIEC_BOOL var_conn_BIT_28; + CIEC_BOOL var_conn_BIT_29; + CIEC_BOOL var_conn_BIT_30; + CIEC_BOOL var_conn_BIT_31; + CIEC_BOOL var_conn_BIT_32; + CIEC_BOOL var_conn_BIT_33; + CIEC_BOOL var_conn_BIT_34; + CIEC_BOOL var_conn_BIT_35; + CIEC_BOOL var_conn_BIT_36; + CIEC_BOOL var_conn_BIT_37; + CIEC_BOOL var_conn_BIT_38; + CIEC_BOOL var_conn_BIT_39; + CIEC_BOOL var_conn_BIT_40; + CIEC_BOOL var_conn_BIT_41; + CIEC_BOOL var_conn_BIT_42; + CIEC_BOOL var_conn_BIT_43; + CIEC_BOOL var_conn_BIT_44; + CIEC_BOOL var_conn_BIT_45; + CIEC_BOOL var_conn_BIT_46; + CIEC_BOOL var_conn_BIT_47; + CIEC_BOOL var_conn_BIT_48; + CIEC_BOOL var_conn_BIT_49; + CIEC_BOOL var_conn_BIT_50; + CIEC_BOOL var_conn_BIT_51; + CIEC_BOOL var_conn_BIT_52; + CIEC_BOOL var_conn_BIT_53; + CIEC_BOOL var_conn_BIT_54; + CIEC_BOOL var_conn_BIT_55; + CIEC_BOOL var_conn_BIT_56; + CIEC_BOOL var_conn_BIT_57; + CIEC_BOOL var_conn_BIT_58; + CIEC_BOOL var_conn_BIT_59; + CIEC_BOOL var_conn_BIT_60; + CIEC_BOOL var_conn_BIT_61; + CIEC_BOOL var_conn_BIT_62; + CIEC_BOOL var_conn_BIT_63; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_BIT_00; + CDataConnection conn_BIT_01; + CDataConnection conn_BIT_02; + CDataConnection conn_BIT_03; + CDataConnection conn_BIT_04; + CDataConnection conn_BIT_05; + CDataConnection conn_BIT_06; + CDataConnection conn_BIT_07; + CDataConnection conn_BIT_08; + CDataConnection conn_BIT_09; + CDataConnection conn_BIT_10; + CDataConnection conn_BIT_11; + CDataConnection conn_BIT_12; + CDataConnection conn_BIT_13; + CDataConnection conn_BIT_14; + CDataConnection conn_BIT_15; + CDataConnection conn_BIT_16; + CDataConnection conn_BIT_17; + CDataConnection conn_BIT_18; + CDataConnection conn_BIT_19; + CDataConnection conn_BIT_20; + CDataConnection conn_BIT_21; + CDataConnection conn_BIT_22; + CDataConnection conn_BIT_23; + CDataConnection conn_BIT_24; + CDataConnection conn_BIT_25; + CDataConnection conn_BIT_26; + CDataConnection conn_BIT_27; + CDataConnection conn_BIT_28; + CDataConnection conn_BIT_29; + CDataConnection conn_BIT_30; + CDataConnection conn_BIT_31; + CDataConnection conn_BIT_32; + CDataConnection conn_BIT_33; + CDataConnection conn_BIT_34; + CDataConnection conn_BIT_35; + CDataConnection conn_BIT_36; + CDataConnection conn_BIT_37; + CDataConnection conn_BIT_38; + CDataConnection conn_BIT_39; + CDataConnection conn_BIT_40; + CDataConnection conn_BIT_41; + CDataConnection conn_BIT_42; + CDataConnection conn_BIT_43; + CDataConnection conn_BIT_44; + CDataConnection conn_BIT_45; + CDataConnection conn_BIT_46; + CDataConnection conn_BIT_47; + CDataConnection conn_BIT_48; + CDataConnection conn_BIT_49; + CDataConnection conn_BIT_50; + CDataConnection conn_BIT_51; + CDataConnection conn_BIT_52; + CDataConnection conn_BIT_53; + CDataConnection conn_BIT_54; + CDataConnection conn_BIT_55; + CDataConnection conn_BIT_56; + CDataConnection conn_BIT_57; + CDataConnection conn_BIT_58; + CDataConnection conn_BIT_59; + CDataConnection conn_BIT_60; + CDataConnection conn_BIT_61; + CDataConnection conn_BIT_62; + CDataConnection conn_BIT_63; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_LWORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15, CIEC_BOOL &paBIT_16, CIEC_BOOL &paBIT_17, CIEC_BOOL &paBIT_18, CIEC_BOOL &paBIT_19, CIEC_BOOL &paBIT_20, CIEC_BOOL &paBIT_21, CIEC_BOOL &paBIT_22, CIEC_BOOL &paBIT_23, CIEC_BOOL &paBIT_24, CIEC_BOOL &paBIT_25, CIEC_BOOL &paBIT_26, CIEC_BOOL &paBIT_27, CIEC_BOOL &paBIT_28, CIEC_BOOL &paBIT_29, CIEC_BOOL &paBIT_30, CIEC_BOOL &paBIT_31, CIEC_BOOL &paBIT_32, CIEC_BOOL &paBIT_33, CIEC_BOOL &paBIT_34, CIEC_BOOL &paBIT_35, CIEC_BOOL &paBIT_36, CIEC_BOOL &paBIT_37, CIEC_BOOL &paBIT_38, CIEC_BOOL &paBIT_39, CIEC_BOOL &paBIT_40, CIEC_BOOL &paBIT_41, CIEC_BOOL &paBIT_42, CIEC_BOOL &paBIT_43, CIEC_BOOL &paBIT_44, CIEC_BOOL &paBIT_45, CIEC_BOOL &paBIT_46, CIEC_BOOL &paBIT_47, CIEC_BOOL &paBIT_48, CIEC_BOOL &paBIT_49, CIEC_BOOL &paBIT_50, CIEC_BOOL &paBIT_51, CIEC_BOOL &paBIT_52, CIEC_BOOL &paBIT_53, CIEC_BOOL &paBIT_54, CIEC_BOOL &paBIT_55, CIEC_BOOL &paBIT_56, CIEC_BOOL &paBIT_57, CIEC_BOOL &paBIT_58, CIEC_BOOL &paBIT_59, CIEC_BOOL &paBIT_60, CIEC_BOOL &paBIT_61, CIEC_BOOL &paBIT_62, CIEC_BOOL &paBIT_63) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paBIT_00 = var_BIT_00; + paBIT_01 = var_BIT_01; + paBIT_02 = var_BIT_02; + paBIT_03 = var_BIT_03; + paBIT_04 = var_BIT_04; + paBIT_05 = var_BIT_05; + paBIT_06 = var_BIT_06; + paBIT_07 = var_BIT_07; + paBIT_08 = var_BIT_08; + paBIT_09 = var_BIT_09; + paBIT_10 = var_BIT_10; + paBIT_11 = var_BIT_11; + paBIT_12 = var_BIT_12; + paBIT_13 = var_BIT_13; + paBIT_14 = var_BIT_14; + paBIT_15 = var_BIT_15; + paBIT_16 = var_BIT_16; + paBIT_17 = var_BIT_17; + paBIT_18 = var_BIT_18; + paBIT_19 = var_BIT_19; + paBIT_20 = var_BIT_20; + paBIT_21 = var_BIT_21; + paBIT_22 = var_BIT_22; + paBIT_23 = var_BIT_23; + paBIT_24 = var_BIT_24; + paBIT_25 = var_BIT_25; + paBIT_26 = var_BIT_26; + paBIT_27 = var_BIT_27; + paBIT_28 = var_BIT_28; + paBIT_29 = var_BIT_29; + paBIT_30 = var_BIT_30; + paBIT_31 = var_BIT_31; + paBIT_32 = var_BIT_32; + paBIT_33 = var_BIT_33; + paBIT_34 = var_BIT_34; + paBIT_35 = var_BIT_35; + paBIT_36 = var_BIT_36; + paBIT_37 = var_BIT_37; + paBIT_38 = var_BIT_38; + paBIT_39 = var_BIT_39; + paBIT_40 = var_BIT_40; + paBIT_41 = var_BIT_41; + paBIT_42 = var_BIT_42; + paBIT_43 = var_BIT_43; + paBIT_44 = var_BIT_44; + paBIT_45 = var_BIT_45; + paBIT_46 = var_BIT_46; + paBIT_47 = var_BIT_47; + paBIT_48 = var_BIT_48; + paBIT_49 = var_BIT_49; + paBIT_50 = var_BIT_50; + paBIT_51 = var_BIT_51; + paBIT_52 = var_BIT_52; + paBIT_53 = var_BIT_53; + paBIT_54 = var_BIT_54; + paBIT_55 = var_BIT_55; + paBIT_56 = var_BIT_56; + paBIT_57 = var_BIT_57; + paBIT_58 = var_BIT_58; + paBIT_59 = var_BIT_59; + paBIT_60 = var_BIT_60; + paBIT_61 = var_BIT_61; + paBIT_62 = var_BIT_62; + paBIT_63 = var_BIT_63; + } + + void operator()(const CIEC_LWORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15, CIEC_BOOL &paBIT_16, CIEC_BOOL &paBIT_17, CIEC_BOOL &paBIT_18, CIEC_BOOL &paBIT_19, CIEC_BOOL &paBIT_20, CIEC_BOOL &paBIT_21, CIEC_BOOL &paBIT_22, CIEC_BOOL &paBIT_23, CIEC_BOOL &paBIT_24, CIEC_BOOL &paBIT_25, CIEC_BOOL &paBIT_26, CIEC_BOOL &paBIT_27, CIEC_BOOL &paBIT_28, CIEC_BOOL &paBIT_29, CIEC_BOOL &paBIT_30, CIEC_BOOL &paBIT_31, CIEC_BOOL &paBIT_32, CIEC_BOOL &paBIT_33, CIEC_BOOL &paBIT_34, CIEC_BOOL &paBIT_35, CIEC_BOOL &paBIT_36, CIEC_BOOL &paBIT_37, CIEC_BOOL &paBIT_38, CIEC_BOOL &paBIT_39, CIEC_BOOL &paBIT_40, CIEC_BOOL &paBIT_41, CIEC_BOOL &paBIT_42, CIEC_BOOL &paBIT_43, CIEC_BOOL &paBIT_44, CIEC_BOOL &paBIT_45, CIEC_BOOL &paBIT_46, CIEC_BOOL &paBIT_47, CIEC_BOOL &paBIT_48, CIEC_BOOL &paBIT_49, CIEC_BOOL &paBIT_50, CIEC_BOOL &paBIT_51, CIEC_BOOL &paBIT_52, CIEC_BOOL &paBIT_53, CIEC_BOOL &paBIT_54, CIEC_BOOL &paBIT_55, CIEC_BOOL &paBIT_56, CIEC_BOOL &paBIT_57, CIEC_BOOL &paBIT_58, CIEC_BOOL &paBIT_59, CIEC_BOOL &paBIT_60, CIEC_BOOL &paBIT_61, CIEC_BOOL &paBIT_62, CIEC_BOOL &paBIT_63) { + evt_REQ(paIN, paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15, paBIT_16, paBIT_17, paBIT_18, paBIT_19, paBIT_20, paBIT_21, paBIT_22, paBIT_23, paBIT_24, paBIT_25, paBIT_26, paBIT_27, paBIT_28, paBIT_29, paBIT_30, paBIT_31, paBIT_32, paBIT_33, paBIT_34, paBIT_35, paBIT_36, paBIT_37, paBIT_38, paBIT_39, paBIT_40, paBIT_41, paBIT_42, paBIT_43, paBIT_44, paBIT_45, paBIT_46, paBIT_47, paBIT_48, paBIT_49, paBIT_50, paBIT_51, paBIT_52, paBIT_53, paBIT_54, paBIT_55, paBIT_56, paBIT_57, paBIT_58, paBIT_59, paBIT_60, paBIT_61, paBIT_62, paBIT_63); + } +}; + +void func_SPLIT_LWORD_INTO_BOOLS(CIEC_LWORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15, CIEC_BOOL &st_lv_BIT_16, CIEC_BOOL &st_lv_BIT_17, CIEC_BOOL &st_lv_BIT_18, CIEC_BOOL &st_lv_BIT_19, CIEC_BOOL &st_lv_BIT_20, CIEC_BOOL &st_lv_BIT_21, CIEC_BOOL &st_lv_BIT_22, CIEC_BOOL &st_lv_BIT_23, CIEC_BOOL &st_lv_BIT_24, CIEC_BOOL &st_lv_BIT_25, CIEC_BOOL &st_lv_BIT_26, CIEC_BOOL &st_lv_BIT_27, CIEC_BOOL &st_lv_BIT_28, CIEC_BOOL &st_lv_BIT_29, CIEC_BOOL &st_lv_BIT_30, CIEC_BOOL &st_lv_BIT_31, CIEC_BOOL &st_lv_BIT_32, CIEC_BOOL &st_lv_BIT_33, CIEC_BOOL &st_lv_BIT_34, CIEC_BOOL &st_lv_BIT_35, CIEC_BOOL &st_lv_BIT_36, CIEC_BOOL &st_lv_BIT_37, CIEC_BOOL &st_lv_BIT_38, CIEC_BOOL &st_lv_BIT_39, CIEC_BOOL &st_lv_BIT_40, CIEC_BOOL &st_lv_BIT_41, CIEC_BOOL &st_lv_BIT_42, CIEC_BOOL &st_lv_BIT_43, CIEC_BOOL &st_lv_BIT_44, CIEC_BOOL &st_lv_BIT_45, CIEC_BOOL &st_lv_BIT_46, CIEC_BOOL &st_lv_BIT_47, CIEC_BOOL &st_lv_BIT_48, CIEC_BOOL &st_lv_BIT_49, CIEC_BOOL &st_lv_BIT_50, CIEC_BOOL &st_lv_BIT_51, CIEC_BOOL &st_lv_BIT_52, CIEC_BOOL &st_lv_BIT_53, CIEC_BOOL &st_lv_BIT_54, CIEC_BOOL &st_lv_BIT_55, CIEC_BOOL &st_lv_BIT_56, CIEC_BOOL &st_lv_BIT_57, CIEC_BOOL &st_lv_BIT_58, CIEC_BOOL &st_lv_BIT_59, CIEC_BOOL &st_lv_BIT_60, CIEC_BOOL &st_lv_BIT_61, CIEC_BOOL &st_lv_BIT_62, CIEC_BOOL &st_lv_BIT_63); + + diff --git a/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.cpp b/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.cpp new file mode 100644 index 000000000..0f3da56eb --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.cpp @@ -0,0 +1,420 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_LWORD_INTO_QUARTERS + *** Description: this Function extracts the 32 QUARTER BYTE from a lword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_LWORD_INTO_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_LWORD_INTO_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "forte_lword.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_LWORD_INTO_QUARTERS, g_nStringIdSPLIT_LWORD_INTO_QUARTERS) + +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdLWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmDataOutputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07, g_nStringIdQUARTER_BYTE_08, g_nStringIdQUARTER_BYTE_09, g_nStringIdQUARTER_BYTE_10, g_nStringIdQUARTER_BYTE_11, g_nStringIdQUARTER_BYTE_12, g_nStringIdQUARTER_BYTE_13, g_nStringIdQUARTER_BYTE_14, g_nStringIdQUARTER_BYTE_15, g_nStringIdQUARTER_BYTE_16, g_nStringIdQUARTER_BYTE_17, g_nStringIdQUARTER_BYTE_18, g_nStringIdQUARTER_BYTE_19, g_nStringIdQUARTER_BYTE_20, g_nStringIdQUARTER_BYTE_21, g_nStringIdQUARTER_BYTE_22, g_nStringIdQUARTER_BYTE_23, g_nStringIdQUARTER_BYTE_24, g_nStringIdQUARTER_BYTE_25, g_nStringIdQUARTER_BYTE_26, g_nStringIdQUARTER_BYTE_27, g_nStringIdQUARTER_BYTE_28, g_nStringIdQUARTER_BYTE_29, g_nStringIdQUARTER_BYTE_30, g_nStringIdQUARTER_BYTE_31}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const TDataIOID FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_LWORD_INTO_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_LWORD_INTO_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 32, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_LWORD_INTO_QUARTERS::FORTE_SPLIT_LWORD_INTO_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QUARTER_BYTE_00(var_QUARTER_BYTE_00), + var_conn_QUARTER_BYTE_01(var_QUARTER_BYTE_01), + var_conn_QUARTER_BYTE_02(var_QUARTER_BYTE_02), + var_conn_QUARTER_BYTE_03(var_QUARTER_BYTE_03), + var_conn_QUARTER_BYTE_04(var_QUARTER_BYTE_04), + var_conn_QUARTER_BYTE_05(var_QUARTER_BYTE_05), + var_conn_QUARTER_BYTE_06(var_QUARTER_BYTE_06), + var_conn_QUARTER_BYTE_07(var_QUARTER_BYTE_07), + var_conn_QUARTER_BYTE_08(var_QUARTER_BYTE_08), + var_conn_QUARTER_BYTE_09(var_QUARTER_BYTE_09), + var_conn_QUARTER_BYTE_10(var_QUARTER_BYTE_10), + var_conn_QUARTER_BYTE_11(var_QUARTER_BYTE_11), + var_conn_QUARTER_BYTE_12(var_QUARTER_BYTE_12), + var_conn_QUARTER_BYTE_13(var_QUARTER_BYTE_13), + var_conn_QUARTER_BYTE_14(var_QUARTER_BYTE_14), + var_conn_QUARTER_BYTE_15(var_QUARTER_BYTE_15), + var_conn_QUARTER_BYTE_16(var_QUARTER_BYTE_16), + var_conn_QUARTER_BYTE_17(var_QUARTER_BYTE_17), + var_conn_QUARTER_BYTE_18(var_QUARTER_BYTE_18), + var_conn_QUARTER_BYTE_19(var_QUARTER_BYTE_19), + var_conn_QUARTER_BYTE_20(var_QUARTER_BYTE_20), + var_conn_QUARTER_BYTE_21(var_QUARTER_BYTE_21), + var_conn_QUARTER_BYTE_22(var_QUARTER_BYTE_22), + var_conn_QUARTER_BYTE_23(var_QUARTER_BYTE_23), + var_conn_QUARTER_BYTE_24(var_QUARTER_BYTE_24), + var_conn_QUARTER_BYTE_25(var_QUARTER_BYTE_25), + var_conn_QUARTER_BYTE_26(var_QUARTER_BYTE_26), + var_conn_QUARTER_BYTE_27(var_QUARTER_BYTE_27), + var_conn_QUARTER_BYTE_28(var_QUARTER_BYTE_28), + var_conn_QUARTER_BYTE_29(var_QUARTER_BYTE_29), + var_conn_QUARTER_BYTE_30(var_QUARTER_BYTE_30), + var_conn_QUARTER_BYTE_31(var_QUARTER_BYTE_31), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_QUARTER_BYTE_00(this, 0, &var_conn_QUARTER_BYTE_00), + conn_QUARTER_BYTE_01(this, 1, &var_conn_QUARTER_BYTE_01), + conn_QUARTER_BYTE_02(this, 2, &var_conn_QUARTER_BYTE_02), + conn_QUARTER_BYTE_03(this, 3, &var_conn_QUARTER_BYTE_03), + conn_QUARTER_BYTE_04(this, 4, &var_conn_QUARTER_BYTE_04), + conn_QUARTER_BYTE_05(this, 5, &var_conn_QUARTER_BYTE_05), + conn_QUARTER_BYTE_06(this, 6, &var_conn_QUARTER_BYTE_06), + conn_QUARTER_BYTE_07(this, 7, &var_conn_QUARTER_BYTE_07), + conn_QUARTER_BYTE_08(this, 8, &var_conn_QUARTER_BYTE_08), + conn_QUARTER_BYTE_09(this, 9, &var_conn_QUARTER_BYTE_09), + conn_QUARTER_BYTE_10(this, 10, &var_conn_QUARTER_BYTE_10), + conn_QUARTER_BYTE_11(this, 11, &var_conn_QUARTER_BYTE_11), + conn_QUARTER_BYTE_12(this, 12, &var_conn_QUARTER_BYTE_12), + conn_QUARTER_BYTE_13(this, 13, &var_conn_QUARTER_BYTE_13), + conn_QUARTER_BYTE_14(this, 14, &var_conn_QUARTER_BYTE_14), + conn_QUARTER_BYTE_15(this, 15, &var_conn_QUARTER_BYTE_15), + conn_QUARTER_BYTE_16(this, 16, &var_conn_QUARTER_BYTE_16), + conn_QUARTER_BYTE_17(this, 17, &var_conn_QUARTER_BYTE_17), + conn_QUARTER_BYTE_18(this, 18, &var_conn_QUARTER_BYTE_18), + conn_QUARTER_BYTE_19(this, 19, &var_conn_QUARTER_BYTE_19), + conn_QUARTER_BYTE_20(this, 20, &var_conn_QUARTER_BYTE_20), + conn_QUARTER_BYTE_21(this, 21, &var_conn_QUARTER_BYTE_21), + conn_QUARTER_BYTE_22(this, 22, &var_conn_QUARTER_BYTE_22), + conn_QUARTER_BYTE_23(this, 23, &var_conn_QUARTER_BYTE_23), + conn_QUARTER_BYTE_24(this, 24, &var_conn_QUARTER_BYTE_24), + conn_QUARTER_BYTE_25(this, 25, &var_conn_QUARTER_BYTE_25), + conn_QUARTER_BYTE_26(this, 26, &var_conn_QUARTER_BYTE_26), + conn_QUARTER_BYTE_27(this, 27, &var_conn_QUARTER_BYTE_27), + conn_QUARTER_BYTE_28(this, 28, &var_conn_QUARTER_BYTE_28), + conn_QUARTER_BYTE_29(this, 29, &var_conn_QUARTER_BYTE_29), + conn_QUARTER_BYTE_30(this, 30, &var_conn_QUARTER_BYTE_30), + conn_QUARTER_BYTE_31(this, 31, &var_conn_QUARTER_BYTE_31) { +} + +void FORTE_SPLIT_LWORD_INTO_QUARTERS::setInitialValues() { + var_IN = 0_LWORD; + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; + var_QUARTER_BYTE_08 = 0_BYTE; + var_QUARTER_BYTE_09 = 0_BYTE; + var_QUARTER_BYTE_10 = 0_BYTE; + var_QUARTER_BYTE_11 = 0_BYTE; + var_QUARTER_BYTE_12 = 0_BYTE; + var_QUARTER_BYTE_13 = 0_BYTE; + var_QUARTER_BYTE_14 = 0_BYTE; + var_QUARTER_BYTE_15 = 0_BYTE; + var_QUARTER_BYTE_16 = 0_BYTE; + var_QUARTER_BYTE_17 = 0_BYTE; + var_QUARTER_BYTE_18 = 0_BYTE; + var_QUARTER_BYTE_19 = 0_BYTE; + var_QUARTER_BYTE_20 = 0_BYTE; + var_QUARTER_BYTE_21 = 0_BYTE; + var_QUARTER_BYTE_22 = 0_BYTE; + var_QUARTER_BYTE_23 = 0_BYTE; + var_QUARTER_BYTE_24 = 0_BYTE; + var_QUARTER_BYTE_25 = 0_BYTE; + var_QUARTER_BYTE_26 = 0_BYTE; + var_QUARTER_BYTE_27 = 0_BYTE; + var_QUARTER_BYTE_28 = 0_BYTE; + var_QUARTER_BYTE_29 = 0_BYTE; + var_QUARTER_BYTE_30 = 0_BYTE; + var_QUARTER_BYTE_31 = 0_BYTE; +} + +void FORTE_SPLIT_LWORD_INTO_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_LWORD_INTO_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + writeData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + writeData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + writeData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + writeData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + writeData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + writeData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + writeData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + writeData(8, var_QUARTER_BYTE_08, conn_QUARTER_BYTE_08); + writeData(9, var_QUARTER_BYTE_09, conn_QUARTER_BYTE_09); + writeData(10, var_QUARTER_BYTE_10, conn_QUARTER_BYTE_10); + writeData(11, var_QUARTER_BYTE_11, conn_QUARTER_BYTE_11); + writeData(12, var_QUARTER_BYTE_12, conn_QUARTER_BYTE_12); + writeData(13, var_QUARTER_BYTE_13, conn_QUARTER_BYTE_13); + writeData(14, var_QUARTER_BYTE_14, conn_QUARTER_BYTE_14); + writeData(15, var_QUARTER_BYTE_15, conn_QUARTER_BYTE_15); + writeData(16, var_QUARTER_BYTE_16, conn_QUARTER_BYTE_16); + writeData(17, var_QUARTER_BYTE_17, conn_QUARTER_BYTE_17); + writeData(18, var_QUARTER_BYTE_18, conn_QUARTER_BYTE_18); + writeData(19, var_QUARTER_BYTE_19, conn_QUARTER_BYTE_19); + writeData(20, var_QUARTER_BYTE_20, conn_QUARTER_BYTE_20); + writeData(21, var_QUARTER_BYTE_21, conn_QUARTER_BYTE_21); + writeData(22, var_QUARTER_BYTE_22, conn_QUARTER_BYTE_22); + writeData(23, var_QUARTER_BYTE_23, conn_QUARTER_BYTE_23); + writeData(24, var_QUARTER_BYTE_24, conn_QUARTER_BYTE_24); + writeData(25, var_QUARTER_BYTE_25, conn_QUARTER_BYTE_25); + writeData(26, var_QUARTER_BYTE_26, conn_QUARTER_BYTE_26); + writeData(27, var_QUARTER_BYTE_27, conn_QUARTER_BYTE_27); + writeData(28, var_QUARTER_BYTE_28, conn_QUARTER_BYTE_28); + writeData(29, var_QUARTER_BYTE_29, conn_QUARTER_BYTE_29); + writeData(30, var_QUARTER_BYTE_30, conn_QUARTER_BYTE_30); + writeData(31, var_QUARTER_BYTE_31, conn_QUARTER_BYTE_31); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_LWORD_INTO_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_LWORD_INTO_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + case 8: return &var_QUARTER_BYTE_08; + case 9: return &var_QUARTER_BYTE_09; + case 10: return &var_QUARTER_BYTE_10; + case 11: return &var_QUARTER_BYTE_11; + case 12: return &var_QUARTER_BYTE_12; + case 13: return &var_QUARTER_BYTE_13; + case 14: return &var_QUARTER_BYTE_14; + case 15: return &var_QUARTER_BYTE_15; + case 16: return &var_QUARTER_BYTE_16; + case 17: return &var_QUARTER_BYTE_17; + case 18: return &var_QUARTER_BYTE_18; + case 19: return &var_QUARTER_BYTE_19; + case 20: return &var_QUARTER_BYTE_20; + case 21: return &var_QUARTER_BYTE_21; + case 22: return &var_QUARTER_BYTE_22; + case 23: return &var_QUARTER_BYTE_23; + case 24: return &var_QUARTER_BYTE_24; + case 25: return &var_QUARTER_BYTE_25; + case 26: return &var_QUARTER_BYTE_26; + case 27: return &var_QUARTER_BYTE_27; + case 28: return &var_QUARTER_BYTE_28; + case 29: return &var_QUARTER_BYTE_29; + case 30: return &var_QUARTER_BYTE_30; + case 31: return &var_QUARTER_BYTE_31; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_LWORD_INTO_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_LWORD_INTO_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_LWORD_INTO_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + case 8: return &conn_QUARTER_BYTE_08; + case 9: return &conn_QUARTER_BYTE_09; + case 10: return &conn_QUARTER_BYTE_10; + case 11: return &conn_QUARTER_BYTE_11; + case 12: return &conn_QUARTER_BYTE_12; + case 13: return &conn_QUARTER_BYTE_13; + case 14: return &conn_QUARTER_BYTE_14; + case 15: return &conn_QUARTER_BYTE_15; + case 16: return &conn_QUARTER_BYTE_16; + case 17: return &conn_QUARTER_BYTE_17; + case 18: return &conn_QUARTER_BYTE_18; + case 19: return &conn_QUARTER_BYTE_19; + case 20: return &conn_QUARTER_BYTE_20; + case 21: return &conn_QUARTER_BYTE_21; + case 22: return &conn_QUARTER_BYTE_22; + case 23: return &conn_QUARTER_BYTE_23; + case 24: return &conn_QUARTER_BYTE_24; + case 25: return &conn_QUARTER_BYTE_25; + case 26: return &conn_QUARTER_BYTE_26; + case 27: return &conn_QUARTER_BYTE_27; + case 28: return &conn_QUARTER_BYTE_28; + case 29: return &conn_QUARTER_BYTE_29; + case 30: return &conn_QUARTER_BYTE_30; + case 31: return &conn_QUARTER_BYTE_31; + } + return nullptr; +} + +void FORTE_SPLIT_LWORD_INTO_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_LWORD_INTO_QUARTERS(var_IN, var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07, var_QUARTER_BYTE_08, var_QUARTER_BYTE_09, var_QUARTER_BYTE_10, var_QUARTER_BYTE_11, var_QUARTER_BYTE_12, var_QUARTER_BYTE_13, var_QUARTER_BYTE_14, var_QUARTER_BYTE_15, var_QUARTER_BYTE_16, var_QUARTER_BYTE_17, var_QUARTER_BYTE_18, var_QUARTER_BYTE_19, var_QUARTER_BYTE_20, var_QUARTER_BYTE_21, var_QUARTER_BYTE_22, var_QUARTER_BYTE_23, var_QUARTER_BYTE_24, var_QUARTER_BYTE_25, var_QUARTER_BYTE_26, var_QUARTER_BYTE_27, var_QUARTER_BYTE_28, var_QUARTER_BYTE_29, var_QUARTER_BYTE_30, var_QUARTER_BYTE_31); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_LWORD_INTO_QUARTERS(CIEC_LWORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07, CIEC_BYTE &st_lv_QUARTER_BYTE_08, CIEC_BYTE &st_lv_QUARTER_BYTE_09, CIEC_BYTE &st_lv_QUARTER_BYTE_10, CIEC_BYTE &st_lv_QUARTER_BYTE_11, CIEC_BYTE &st_lv_QUARTER_BYTE_12, CIEC_BYTE &st_lv_QUARTER_BYTE_13, CIEC_BYTE &st_lv_QUARTER_BYTE_14, CIEC_BYTE &st_lv_QUARTER_BYTE_15, CIEC_BYTE &st_lv_QUARTER_BYTE_16, CIEC_BYTE &st_lv_QUARTER_BYTE_17, CIEC_BYTE &st_lv_QUARTER_BYTE_18, CIEC_BYTE &st_lv_QUARTER_BYTE_19, CIEC_BYTE &st_lv_QUARTER_BYTE_20, CIEC_BYTE &st_lv_QUARTER_BYTE_21, CIEC_BYTE &st_lv_QUARTER_BYTE_22, CIEC_BYTE &st_lv_QUARTER_BYTE_23, CIEC_BYTE &st_lv_QUARTER_BYTE_24, CIEC_BYTE &st_lv_QUARTER_BYTE_25, CIEC_BYTE &st_lv_QUARTER_BYTE_26, CIEC_BYTE &st_lv_QUARTER_BYTE_27, CIEC_BYTE &st_lv_QUARTER_BYTE_28, CIEC_BYTE &st_lv_QUARTER_BYTE_29, CIEC_BYTE &st_lv_QUARTER_BYTE_30, CIEC_BYTE &st_lv_QUARTER_BYTE_31) { + st_lv_QUARTER_BYTE_00 = 0_BYTE; + st_lv_QUARTER_BYTE_01 = 0_BYTE; + st_lv_QUARTER_BYTE_02 = 0_BYTE; + st_lv_QUARTER_BYTE_03 = 0_BYTE; + st_lv_QUARTER_BYTE_04 = 0_BYTE; + st_lv_QUARTER_BYTE_05 = 0_BYTE; + st_lv_QUARTER_BYTE_06 = 0_BYTE; + st_lv_QUARTER_BYTE_07 = 0_BYTE; + st_lv_QUARTER_BYTE_08 = 0_BYTE; + st_lv_QUARTER_BYTE_09 = 0_BYTE; + st_lv_QUARTER_BYTE_10 = 0_BYTE; + st_lv_QUARTER_BYTE_11 = 0_BYTE; + st_lv_QUARTER_BYTE_12 = 0_BYTE; + st_lv_QUARTER_BYTE_13 = 0_BYTE; + st_lv_QUARTER_BYTE_14 = 0_BYTE; + st_lv_QUARTER_BYTE_15 = 0_BYTE; + st_lv_QUARTER_BYTE_16 = 0_BYTE; + st_lv_QUARTER_BYTE_17 = 0_BYTE; + st_lv_QUARTER_BYTE_18 = 0_BYTE; + st_lv_QUARTER_BYTE_19 = 0_BYTE; + st_lv_QUARTER_BYTE_20 = 0_BYTE; + st_lv_QUARTER_BYTE_21 = 0_BYTE; + st_lv_QUARTER_BYTE_22 = 0_BYTE; + st_lv_QUARTER_BYTE_23 = 0_BYTE; + st_lv_QUARTER_BYTE_24 = 0_BYTE; + st_lv_QUARTER_BYTE_25 = 0_BYTE; + st_lv_QUARTER_BYTE_26 = 0_BYTE; + st_lv_QUARTER_BYTE_27 = 0_BYTE; + st_lv_QUARTER_BYTE_28 = 0_BYTE; + st_lv_QUARTER_BYTE_29 = 0_BYTE; + st_lv_QUARTER_BYTE_30 = 0_BYTE; + st_lv_QUARTER_BYTE_31 = 0_BYTE; + + #line 43 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_00 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_00), st_global_SHIFT_QUARTER_00)); + #line 44 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_01 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_01), st_global_SHIFT_QUARTER_01)); + #line 45 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_02 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_02), st_global_SHIFT_QUARTER_02)); + #line 46 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_03 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_03), st_global_SHIFT_QUARTER_03)); + #line 47 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_04 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_04), st_global_SHIFT_QUARTER_04)); + #line 48 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_05 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_05), st_global_SHIFT_QUARTER_05)); + #line 49 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_06 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_06), st_global_SHIFT_QUARTER_06)); + #line 50 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_07 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_07), st_global_SHIFT_QUARTER_07)); + #line 51 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_08 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_08), st_global_SHIFT_QUARTER_08)); + #line 52 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_09 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_09), st_global_SHIFT_QUARTER_09)); + #line 53 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_10 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_10), st_global_SHIFT_QUARTER_10)); + #line 54 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_11 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_11), st_global_SHIFT_QUARTER_11)); + #line 55 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_12 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_12), st_global_SHIFT_QUARTER_12)); + #line 56 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_13 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_13), st_global_SHIFT_QUARTER_13)); + #line 57 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_14 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_14), st_global_SHIFT_QUARTER_14)); + #line 58 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_15 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_15), st_global_SHIFT_QUARTER_15)); + #line 59 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_16 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_16), st_global_SHIFT_QUARTER_16)); + #line 60 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_17 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_17), st_global_SHIFT_QUARTER_17)); + #line 61 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_18 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_18), st_global_SHIFT_QUARTER_18)); + #line 62 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_19 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_19), st_global_SHIFT_QUARTER_19)); + #line 63 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_20 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_20), st_global_SHIFT_QUARTER_20)); + #line 64 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_21 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_21), st_global_SHIFT_QUARTER_21)); + #line 65 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_22 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_22), st_global_SHIFT_QUARTER_22)); + #line 66 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_23 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_23), st_global_SHIFT_QUARTER_23)); + #line 67 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_24 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_24), st_global_SHIFT_QUARTER_24)); + #line 68 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_25 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_25), st_global_SHIFT_QUARTER_25)); + #line 69 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_26 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_26), st_global_SHIFT_QUARTER_26)); + #line 70 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_27 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_27), st_global_SHIFT_QUARTER_27)); + #line 71 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_28 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_28), st_global_SHIFT_QUARTER_28)); + #line 72 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_29 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_29), st_global_SHIFT_QUARTER_29)); + #line 73 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_30 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_30), st_global_SHIFT_QUARTER_30)); + #line 74 "SPLIT_LWORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_31 = func_LWORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_LWORD_QUARTER_31), st_global_SHIFT_QUARTER_31)); + +} + diff --git a/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.h b/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.h new file mode 100644 index 000000000..d2eb2dd8b --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_LWORD_INTO_QUARTERS_fct.h @@ -0,0 +1,214 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_LWORD_INTO_QUARTERS + *** Description: this Function extracts the 32 QUARTER BYTE from a lword + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_lword.h" +#include "forte_byte.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_LWORD_INTO_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_LWORD_INTO_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_LWORD_INTO_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_LWORD var_IN; + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + CIEC_BYTE var_QUARTER_BYTE_08; + CIEC_BYTE var_QUARTER_BYTE_09; + CIEC_BYTE var_QUARTER_BYTE_10; + CIEC_BYTE var_QUARTER_BYTE_11; + CIEC_BYTE var_QUARTER_BYTE_12; + CIEC_BYTE var_QUARTER_BYTE_13; + CIEC_BYTE var_QUARTER_BYTE_14; + CIEC_BYTE var_QUARTER_BYTE_15; + CIEC_BYTE var_QUARTER_BYTE_16; + CIEC_BYTE var_QUARTER_BYTE_17; + CIEC_BYTE var_QUARTER_BYTE_18; + CIEC_BYTE var_QUARTER_BYTE_19; + CIEC_BYTE var_QUARTER_BYTE_20; + CIEC_BYTE var_QUARTER_BYTE_21; + CIEC_BYTE var_QUARTER_BYTE_22; + CIEC_BYTE var_QUARTER_BYTE_23; + CIEC_BYTE var_QUARTER_BYTE_24; + CIEC_BYTE var_QUARTER_BYTE_25; + CIEC_BYTE var_QUARTER_BYTE_26; + CIEC_BYTE var_QUARTER_BYTE_27; + CIEC_BYTE var_QUARTER_BYTE_28; + CIEC_BYTE var_QUARTER_BYTE_29; + CIEC_BYTE var_QUARTER_BYTE_30; + CIEC_BYTE var_QUARTER_BYTE_31; + + CIEC_BYTE var_conn_QUARTER_BYTE_00; + CIEC_BYTE var_conn_QUARTER_BYTE_01; + CIEC_BYTE var_conn_QUARTER_BYTE_02; + CIEC_BYTE var_conn_QUARTER_BYTE_03; + CIEC_BYTE var_conn_QUARTER_BYTE_04; + CIEC_BYTE var_conn_QUARTER_BYTE_05; + CIEC_BYTE var_conn_QUARTER_BYTE_06; + CIEC_BYTE var_conn_QUARTER_BYTE_07; + CIEC_BYTE var_conn_QUARTER_BYTE_08; + CIEC_BYTE var_conn_QUARTER_BYTE_09; + CIEC_BYTE var_conn_QUARTER_BYTE_10; + CIEC_BYTE var_conn_QUARTER_BYTE_11; + CIEC_BYTE var_conn_QUARTER_BYTE_12; + CIEC_BYTE var_conn_QUARTER_BYTE_13; + CIEC_BYTE var_conn_QUARTER_BYTE_14; + CIEC_BYTE var_conn_QUARTER_BYTE_15; + CIEC_BYTE var_conn_QUARTER_BYTE_16; + CIEC_BYTE var_conn_QUARTER_BYTE_17; + CIEC_BYTE var_conn_QUARTER_BYTE_18; + CIEC_BYTE var_conn_QUARTER_BYTE_19; + CIEC_BYTE var_conn_QUARTER_BYTE_20; + CIEC_BYTE var_conn_QUARTER_BYTE_21; + CIEC_BYTE var_conn_QUARTER_BYTE_22; + CIEC_BYTE var_conn_QUARTER_BYTE_23; + CIEC_BYTE var_conn_QUARTER_BYTE_24; + CIEC_BYTE var_conn_QUARTER_BYTE_25; + CIEC_BYTE var_conn_QUARTER_BYTE_26; + CIEC_BYTE var_conn_QUARTER_BYTE_27; + CIEC_BYTE var_conn_QUARTER_BYTE_28; + CIEC_BYTE var_conn_QUARTER_BYTE_29; + CIEC_BYTE var_conn_QUARTER_BYTE_30; + CIEC_BYTE var_conn_QUARTER_BYTE_31; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_QUARTER_BYTE_00; + CDataConnection conn_QUARTER_BYTE_01; + CDataConnection conn_QUARTER_BYTE_02; + CDataConnection conn_QUARTER_BYTE_03; + CDataConnection conn_QUARTER_BYTE_04; + CDataConnection conn_QUARTER_BYTE_05; + CDataConnection conn_QUARTER_BYTE_06; + CDataConnection conn_QUARTER_BYTE_07; + CDataConnection conn_QUARTER_BYTE_08; + CDataConnection conn_QUARTER_BYTE_09; + CDataConnection conn_QUARTER_BYTE_10; + CDataConnection conn_QUARTER_BYTE_11; + CDataConnection conn_QUARTER_BYTE_12; + CDataConnection conn_QUARTER_BYTE_13; + CDataConnection conn_QUARTER_BYTE_14; + CDataConnection conn_QUARTER_BYTE_15; + CDataConnection conn_QUARTER_BYTE_16; + CDataConnection conn_QUARTER_BYTE_17; + CDataConnection conn_QUARTER_BYTE_18; + CDataConnection conn_QUARTER_BYTE_19; + CDataConnection conn_QUARTER_BYTE_20; + CDataConnection conn_QUARTER_BYTE_21; + CDataConnection conn_QUARTER_BYTE_22; + CDataConnection conn_QUARTER_BYTE_23; + CDataConnection conn_QUARTER_BYTE_24; + CDataConnection conn_QUARTER_BYTE_25; + CDataConnection conn_QUARTER_BYTE_26; + CDataConnection conn_QUARTER_BYTE_27; + CDataConnection conn_QUARTER_BYTE_28; + CDataConnection conn_QUARTER_BYTE_29; + CDataConnection conn_QUARTER_BYTE_30; + CDataConnection conn_QUARTER_BYTE_31; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_LWORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07, CIEC_BYTE &paQUARTER_BYTE_08, CIEC_BYTE &paQUARTER_BYTE_09, CIEC_BYTE &paQUARTER_BYTE_10, CIEC_BYTE &paQUARTER_BYTE_11, CIEC_BYTE &paQUARTER_BYTE_12, CIEC_BYTE &paQUARTER_BYTE_13, CIEC_BYTE &paQUARTER_BYTE_14, CIEC_BYTE &paQUARTER_BYTE_15, CIEC_BYTE &paQUARTER_BYTE_16, CIEC_BYTE &paQUARTER_BYTE_17, CIEC_BYTE &paQUARTER_BYTE_18, CIEC_BYTE &paQUARTER_BYTE_19, CIEC_BYTE &paQUARTER_BYTE_20, CIEC_BYTE &paQUARTER_BYTE_21, CIEC_BYTE &paQUARTER_BYTE_22, CIEC_BYTE &paQUARTER_BYTE_23, CIEC_BYTE &paQUARTER_BYTE_24, CIEC_BYTE &paQUARTER_BYTE_25, CIEC_BYTE &paQUARTER_BYTE_26, CIEC_BYTE &paQUARTER_BYTE_27, CIEC_BYTE &paQUARTER_BYTE_28, CIEC_BYTE &paQUARTER_BYTE_29, CIEC_BYTE &paQUARTER_BYTE_30, CIEC_BYTE &paQUARTER_BYTE_31) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paQUARTER_BYTE_00 = var_QUARTER_BYTE_00; + paQUARTER_BYTE_01 = var_QUARTER_BYTE_01; + paQUARTER_BYTE_02 = var_QUARTER_BYTE_02; + paQUARTER_BYTE_03 = var_QUARTER_BYTE_03; + paQUARTER_BYTE_04 = var_QUARTER_BYTE_04; + paQUARTER_BYTE_05 = var_QUARTER_BYTE_05; + paQUARTER_BYTE_06 = var_QUARTER_BYTE_06; + paQUARTER_BYTE_07 = var_QUARTER_BYTE_07; + paQUARTER_BYTE_08 = var_QUARTER_BYTE_08; + paQUARTER_BYTE_09 = var_QUARTER_BYTE_09; + paQUARTER_BYTE_10 = var_QUARTER_BYTE_10; + paQUARTER_BYTE_11 = var_QUARTER_BYTE_11; + paQUARTER_BYTE_12 = var_QUARTER_BYTE_12; + paQUARTER_BYTE_13 = var_QUARTER_BYTE_13; + paQUARTER_BYTE_14 = var_QUARTER_BYTE_14; + paQUARTER_BYTE_15 = var_QUARTER_BYTE_15; + paQUARTER_BYTE_16 = var_QUARTER_BYTE_16; + paQUARTER_BYTE_17 = var_QUARTER_BYTE_17; + paQUARTER_BYTE_18 = var_QUARTER_BYTE_18; + paQUARTER_BYTE_19 = var_QUARTER_BYTE_19; + paQUARTER_BYTE_20 = var_QUARTER_BYTE_20; + paQUARTER_BYTE_21 = var_QUARTER_BYTE_21; + paQUARTER_BYTE_22 = var_QUARTER_BYTE_22; + paQUARTER_BYTE_23 = var_QUARTER_BYTE_23; + paQUARTER_BYTE_24 = var_QUARTER_BYTE_24; + paQUARTER_BYTE_25 = var_QUARTER_BYTE_25; + paQUARTER_BYTE_26 = var_QUARTER_BYTE_26; + paQUARTER_BYTE_27 = var_QUARTER_BYTE_27; + paQUARTER_BYTE_28 = var_QUARTER_BYTE_28; + paQUARTER_BYTE_29 = var_QUARTER_BYTE_29; + paQUARTER_BYTE_30 = var_QUARTER_BYTE_30; + paQUARTER_BYTE_31 = var_QUARTER_BYTE_31; + } + + void operator()(const CIEC_LWORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07, CIEC_BYTE &paQUARTER_BYTE_08, CIEC_BYTE &paQUARTER_BYTE_09, CIEC_BYTE &paQUARTER_BYTE_10, CIEC_BYTE &paQUARTER_BYTE_11, CIEC_BYTE &paQUARTER_BYTE_12, CIEC_BYTE &paQUARTER_BYTE_13, CIEC_BYTE &paQUARTER_BYTE_14, CIEC_BYTE &paQUARTER_BYTE_15, CIEC_BYTE &paQUARTER_BYTE_16, CIEC_BYTE &paQUARTER_BYTE_17, CIEC_BYTE &paQUARTER_BYTE_18, CIEC_BYTE &paQUARTER_BYTE_19, CIEC_BYTE &paQUARTER_BYTE_20, CIEC_BYTE &paQUARTER_BYTE_21, CIEC_BYTE &paQUARTER_BYTE_22, CIEC_BYTE &paQUARTER_BYTE_23, CIEC_BYTE &paQUARTER_BYTE_24, CIEC_BYTE &paQUARTER_BYTE_25, CIEC_BYTE &paQUARTER_BYTE_26, CIEC_BYTE &paQUARTER_BYTE_27, CIEC_BYTE &paQUARTER_BYTE_28, CIEC_BYTE &paQUARTER_BYTE_29, CIEC_BYTE &paQUARTER_BYTE_30, CIEC_BYTE &paQUARTER_BYTE_31) { + evt_REQ(paIN, paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07, paQUARTER_BYTE_08, paQUARTER_BYTE_09, paQUARTER_BYTE_10, paQUARTER_BYTE_11, paQUARTER_BYTE_12, paQUARTER_BYTE_13, paQUARTER_BYTE_14, paQUARTER_BYTE_15, paQUARTER_BYTE_16, paQUARTER_BYTE_17, paQUARTER_BYTE_18, paQUARTER_BYTE_19, paQUARTER_BYTE_20, paQUARTER_BYTE_21, paQUARTER_BYTE_22, paQUARTER_BYTE_23, paQUARTER_BYTE_24, paQUARTER_BYTE_25, paQUARTER_BYTE_26, paQUARTER_BYTE_27, paQUARTER_BYTE_28, paQUARTER_BYTE_29, paQUARTER_BYTE_30, paQUARTER_BYTE_31); + } +}; + +void func_SPLIT_LWORD_INTO_QUARTERS(CIEC_LWORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07, CIEC_BYTE &st_lv_QUARTER_BYTE_08, CIEC_BYTE &st_lv_QUARTER_BYTE_09, CIEC_BYTE &st_lv_QUARTER_BYTE_10, CIEC_BYTE &st_lv_QUARTER_BYTE_11, CIEC_BYTE &st_lv_QUARTER_BYTE_12, CIEC_BYTE &st_lv_QUARTER_BYTE_13, CIEC_BYTE &st_lv_QUARTER_BYTE_14, CIEC_BYTE &st_lv_QUARTER_BYTE_15, CIEC_BYTE &st_lv_QUARTER_BYTE_16, CIEC_BYTE &st_lv_QUARTER_BYTE_17, CIEC_BYTE &st_lv_QUARTER_BYTE_18, CIEC_BYTE &st_lv_QUARTER_BYTE_19, CIEC_BYTE &st_lv_QUARTER_BYTE_20, CIEC_BYTE &st_lv_QUARTER_BYTE_21, CIEC_BYTE &st_lv_QUARTER_BYTE_22, CIEC_BYTE &st_lv_QUARTER_BYTE_23, CIEC_BYTE &st_lv_QUARTER_BYTE_24, CIEC_BYTE &st_lv_QUARTER_BYTE_25, CIEC_BYTE &st_lv_QUARTER_BYTE_26, CIEC_BYTE &st_lv_QUARTER_BYTE_27, CIEC_BYTE &st_lv_QUARTER_BYTE_28, CIEC_BYTE &st_lv_QUARTER_BYTE_29, CIEC_BYTE &st_lv_QUARTER_BYTE_30, CIEC_BYTE &st_lv_QUARTER_BYTE_31); + + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.cpp b/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.cpp new file mode 100644 index 000000000..2f1c2ba26 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.cpp @@ -0,0 +1,273 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_BOOLS + *** Description: this Function extracts the 16 BOOLS from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_WORD_INTO_BOOLS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_WORD_INTO_BOOLS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_bool.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_BOOLS, g_nStringIdSPLIT_WORD_INTO_BOOLS) + +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmDataInputTypeIds[] = {g_nStringIdWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmDataOutputNames[] = {g_nStringIdBIT_00, g_nStringIdBIT_01, g_nStringIdBIT_02, g_nStringIdBIT_03, g_nStringIdBIT_04, g_nStringIdBIT_05, g_nStringIdBIT_06, g_nStringIdBIT_07, g_nStringIdBIT_08, g_nStringIdBIT_09, g_nStringIdBIT_10, g_nStringIdBIT_11, g_nStringIdBIT_12, g_nStringIdBIT_13, g_nStringIdBIT_14, g_nStringIdBIT_15}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdBOOL}; +const TDataIOID FORTE_SPLIT_WORD_INTO_BOOLS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_BOOLS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_WORD_INTO_BOOLS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_BOOLS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BOOLS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_WORD_INTO_BOOLS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 16, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_WORD_INTO_BOOLS::FORTE_SPLIT_WORD_INTO_BOOLS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_BIT_00(var_BIT_00), + var_conn_BIT_01(var_BIT_01), + var_conn_BIT_02(var_BIT_02), + var_conn_BIT_03(var_BIT_03), + var_conn_BIT_04(var_BIT_04), + var_conn_BIT_05(var_BIT_05), + var_conn_BIT_06(var_BIT_06), + var_conn_BIT_07(var_BIT_07), + var_conn_BIT_08(var_BIT_08), + var_conn_BIT_09(var_BIT_09), + var_conn_BIT_10(var_BIT_10), + var_conn_BIT_11(var_BIT_11), + var_conn_BIT_12(var_BIT_12), + var_conn_BIT_13(var_BIT_13), + var_conn_BIT_14(var_BIT_14), + var_conn_BIT_15(var_BIT_15), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_BIT_00(this, 0, &var_conn_BIT_00), + conn_BIT_01(this, 1, &var_conn_BIT_01), + conn_BIT_02(this, 2, &var_conn_BIT_02), + conn_BIT_03(this, 3, &var_conn_BIT_03), + conn_BIT_04(this, 4, &var_conn_BIT_04), + conn_BIT_05(this, 5, &var_conn_BIT_05), + conn_BIT_06(this, 6, &var_conn_BIT_06), + conn_BIT_07(this, 7, &var_conn_BIT_07), + conn_BIT_08(this, 8, &var_conn_BIT_08), + conn_BIT_09(this, 9, &var_conn_BIT_09), + conn_BIT_10(this, 10, &var_conn_BIT_10), + conn_BIT_11(this, 11, &var_conn_BIT_11), + conn_BIT_12(this, 12, &var_conn_BIT_12), + conn_BIT_13(this, 13, &var_conn_BIT_13), + conn_BIT_14(this, 14, &var_conn_BIT_14), + conn_BIT_15(this, 15, &var_conn_BIT_15) { +} + +void FORTE_SPLIT_WORD_INTO_BOOLS::setInitialValues() { + var_IN = 0_WORD; + var_BIT_00 = 0_BOOL; + var_BIT_01 = 0_BOOL; + var_BIT_02 = 0_BOOL; + var_BIT_03 = 0_BOOL; + var_BIT_04 = 0_BOOL; + var_BIT_05 = 0_BOOL; + var_BIT_06 = 0_BOOL; + var_BIT_07 = 0_BOOL; + var_BIT_08 = 0_BOOL; + var_BIT_09 = 0_BOOL; + var_BIT_10 = 0_BOOL; + var_BIT_11 = 0_BOOL; + var_BIT_12 = 0_BOOL; + var_BIT_13 = 0_BOOL; + var_BIT_14 = 0_BOOL; + var_BIT_15 = 0_BOOL; +} + +void FORTE_SPLIT_WORD_INTO_BOOLS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_WORD_INTO_BOOLS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_BIT_00, conn_BIT_00); + writeData(1, var_BIT_01, conn_BIT_01); + writeData(2, var_BIT_02, conn_BIT_02); + writeData(3, var_BIT_03, conn_BIT_03); + writeData(4, var_BIT_04, conn_BIT_04); + writeData(5, var_BIT_05, conn_BIT_05); + writeData(6, var_BIT_06, conn_BIT_06); + writeData(7, var_BIT_07, conn_BIT_07); + writeData(8, var_BIT_08, conn_BIT_08); + writeData(9, var_BIT_09, conn_BIT_09); + writeData(10, var_BIT_10, conn_BIT_10); + writeData(11, var_BIT_11, conn_BIT_11); + writeData(12, var_BIT_12, conn_BIT_12); + writeData(13, var_BIT_13, conn_BIT_13); + writeData(14, var_BIT_14, conn_BIT_14); + writeData(15, var_BIT_15, conn_BIT_15); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_BOOLS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_BOOLS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BIT_00; + case 1: return &var_BIT_01; + case 2: return &var_BIT_02; + case 3: return &var_BIT_03; + case 4: return &var_BIT_04; + case 5: return &var_BIT_05; + case 6: return &var_BIT_06; + case 7: return &var_BIT_07; + case 8: return &var_BIT_08; + case 9: return &var_BIT_09; + case 10: return &var_BIT_10; + case 11: return &var_BIT_11; + case 12: return &var_BIT_12; + case 13: return &var_BIT_13; + case 14: return &var_BIT_14; + case 15: return &var_BIT_15; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_WORD_INTO_BOOLS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_WORD_INTO_BOOLS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_WORD_INTO_BOOLS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BIT_00; + case 1: return &conn_BIT_01; + case 2: return &conn_BIT_02; + case 3: return &conn_BIT_03; + case 4: return &conn_BIT_04; + case 5: return &conn_BIT_05; + case 6: return &conn_BIT_06; + case 7: return &conn_BIT_07; + case 8: return &conn_BIT_08; + case 9: return &conn_BIT_09; + case 10: return &conn_BIT_10; + case 11: return &conn_BIT_11; + case 12: return &conn_BIT_12; + case 13: return &conn_BIT_13; + case 14: return &conn_BIT_14; + case 15: return &conn_BIT_15; + } + return nullptr; +} + +void FORTE_SPLIT_WORD_INTO_BOOLS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_WORD_INTO_BOOLS(var_IN, var_BIT_00, var_BIT_01, var_BIT_02, var_BIT_03, var_BIT_04, var_BIT_05, var_BIT_06, var_BIT_07, var_BIT_08, var_BIT_09, var_BIT_10, var_BIT_11, var_BIT_12, var_BIT_13, var_BIT_14, var_BIT_15); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_WORD_INTO_BOOLS(CIEC_WORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15) { + st_lv_BIT_00 = 0_BOOL; + st_lv_BIT_01 = 0_BOOL; + st_lv_BIT_02 = 0_BOOL; + st_lv_BIT_03 = 0_BOOL; + st_lv_BIT_04 = 0_BOOL; + st_lv_BIT_05 = 0_BOOL; + st_lv_BIT_06 = 0_BOOL; + st_lv_BIT_07 = 0_BOOL; + st_lv_BIT_08 = 0_BOOL; + st_lv_BIT_09 = 0_BOOL; + st_lv_BIT_10 = 0_BOOL; + st_lv_BIT_11 = 0_BOOL; + st_lv_BIT_12 = 0_BOOL; + st_lv_BIT_13 = 0_BOOL; + st_lv_BIT_14 = 0_BOOL; + st_lv_BIT_15 = 0_BOOL; + + #line 27 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_00 = st_lv_IN.cpartial(0); + #line 28 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_01 = st_lv_IN.cpartial(1); + #line 29 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_02 = st_lv_IN.cpartial(2); + #line 30 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_03 = st_lv_IN.cpartial(3); + #line 31 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_04 = st_lv_IN.cpartial(4); + #line 32 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_05 = st_lv_IN.cpartial(5); + #line 33 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_06 = st_lv_IN.cpartial(6); + #line 34 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_07 = st_lv_IN.cpartial(7); + #line 35 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_08 = st_lv_IN.cpartial(8); + #line 36 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_09 = st_lv_IN.cpartial(9); + #line 37 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_10 = st_lv_IN.cpartial(10); + #line 38 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_11 = st_lv_IN.cpartial(11); + #line 39 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_12 = st_lv_IN.cpartial(12); + #line 40 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_13 = st_lv_IN.cpartial(13); + #line 41 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_14 = st_lv_IN.cpartial(14); + #line 42 "SPLIT_WORD_INTO_BOOLS.fct" + st_lv_BIT_15 = st_lv_IN.cpartial(15); + +} + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.h b/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.h new file mode 100644 index 000000000..fbcc82350 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_BOOLS_fct.h @@ -0,0 +1,150 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_BOOLS + *** Description: this Function extracts the 16 BOOLS from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_bool.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_WORD_INTO_BOOLS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_BOOLS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_WORD_INTO_BOOLS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_WORD var_IN; + + CIEC_BOOL var_BIT_00; + CIEC_BOOL var_BIT_01; + CIEC_BOOL var_BIT_02; + CIEC_BOOL var_BIT_03; + CIEC_BOOL var_BIT_04; + CIEC_BOOL var_BIT_05; + CIEC_BOOL var_BIT_06; + CIEC_BOOL var_BIT_07; + CIEC_BOOL var_BIT_08; + CIEC_BOOL var_BIT_09; + CIEC_BOOL var_BIT_10; + CIEC_BOOL var_BIT_11; + CIEC_BOOL var_BIT_12; + CIEC_BOOL var_BIT_13; + CIEC_BOOL var_BIT_14; + CIEC_BOOL var_BIT_15; + + CIEC_BOOL var_conn_BIT_00; + CIEC_BOOL var_conn_BIT_01; + CIEC_BOOL var_conn_BIT_02; + CIEC_BOOL var_conn_BIT_03; + CIEC_BOOL var_conn_BIT_04; + CIEC_BOOL var_conn_BIT_05; + CIEC_BOOL var_conn_BIT_06; + CIEC_BOOL var_conn_BIT_07; + CIEC_BOOL var_conn_BIT_08; + CIEC_BOOL var_conn_BIT_09; + CIEC_BOOL var_conn_BIT_10; + CIEC_BOOL var_conn_BIT_11; + CIEC_BOOL var_conn_BIT_12; + CIEC_BOOL var_conn_BIT_13; + CIEC_BOOL var_conn_BIT_14; + CIEC_BOOL var_conn_BIT_15; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_BIT_00; + CDataConnection conn_BIT_01; + CDataConnection conn_BIT_02; + CDataConnection conn_BIT_03; + CDataConnection conn_BIT_04; + CDataConnection conn_BIT_05; + CDataConnection conn_BIT_06; + CDataConnection conn_BIT_07; + CDataConnection conn_BIT_08; + CDataConnection conn_BIT_09; + CDataConnection conn_BIT_10; + CDataConnection conn_BIT_11; + CDataConnection conn_BIT_12; + CDataConnection conn_BIT_13; + CDataConnection conn_BIT_14; + CDataConnection conn_BIT_15; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_WORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paBIT_00 = var_BIT_00; + paBIT_01 = var_BIT_01; + paBIT_02 = var_BIT_02; + paBIT_03 = var_BIT_03; + paBIT_04 = var_BIT_04; + paBIT_05 = var_BIT_05; + paBIT_06 = var_BIT_06; + paBIT_07 = var_BIT_07; + paBIT_08 = var_BIT_08; + paBIT_09 = var_BIT_09; + paBIT_10 = var_BIT_10; + paBIT_11 = var_BIT_11; + paBIT_12 = var_BIT_12; + paBIT_13 = var_BIT_13; + paBIT_14 = var_BIT_14; + paBIT_15 = var_BIT_15; + } + + void operator()(const CIEC_WORD &paIN, CIEC_BOOL &paBIT_00, CIEC_BOOL &paBIT_01, CIEC_BOOL &paBIT_02, CIEC_BOOL &paBIT_03, CIEC_BOOL &paBIT_04, CIEC_BOOL &paBIT_05, CIEC_BOOL &paBIT_06, CIEC_BOOL &paBIT_07, CIEC_BOOL &paBIT_08, CIEC_BOOL &paBIT_09, CIEC_BOOL &paBIT_10, CIEC_BOOL &paBIT_11, CIEC_BOOL &paBIT_12, CIEC_BOOL &paBIT_13, CIEC_BOOL &paBIT_14, CIEC_BOOL &paBIT_15) { + evt_REQ(paIN, paBIT_00, paBIT_01, paBIT_02, paBIT_03, paBIT_04, paBIT_05, paBIT_06, paBIT_07, paBIT_08, paBIT_09, paBIT_10, paBIT_11, paBIT_12, paBIT_13, paBIT_14, paBIT_15); + } +}; + +void func_SPLIT_WORD_INTO_BOOLS(CIEC_WORD st_lv_IN, CIEC_BOOL &st_lv_BIT_00, CIEC_BOOL &st_lv_BIT_01, CIEC_BOOL &st_lv_BIT_02, CIEC_BOOL &st_lv_BIT_03, CIEC_BOOL &st_lv_BIT_04, CIEC_BOOL &st_lv_BIT_05, CIEC_BOOL &st_lv_BIT_06, CIEC_BOOL &st_lv_BIT_07, CIEC_BOOL &st_lv_BIT_08, CIEC_BOOL &st_lv_BIT_09, CIEC_BOOL &st_lv_BIT_10, CIEC_BOOL &st_lv_BIT_11, CIEC_BOOL &st_lv_BIT_12, CIEC_BOOL &st_lv_BIT_13, CIEC_BOOL &st_lv_BIT_14, CIEC_BOOL &st_lv_BIT_15); + + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.cpp b/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.cpp new file mode 100644 index 000000000..128763baf --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.cpp @@ -0,0 +1,147 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_BYTES + *** Description: this Function extracts the 2 BYTE from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_WORD_INTO_BYTES_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_WORD_INTO_BYTES_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_BYTES, g_nStringIdSPLIT_WORD_INTO_BYTES) + +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmDataInputTypeIds[] = {g_nStringIdWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmDataOutputNames[] = {g_nStringIdBYTE_00, g_nStringIdBYTE_01}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmDataOutputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE}; +const TDataIOID FORTE_SPLIT_WORD_INTO_BYTES::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_BYTES::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_WORD_INTO_BYTES::scmEOWith[] = {0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_BYTES::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_BYTES::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_WORD_INTO_BYTES::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_WORD_INTO_BYTES::FORTE_SPLIT_WORD_INTO_BYTES(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_BYTE_00(var_BYTE_00), + var_conn_BYTE_01(var_BYTE_01), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_BYTE_00(this, 0, &var_conn_BYTE_00), + conn_BYTE_01(this, 1, &var_conn_BYTE_01) { +} + +void FORTE_SPLIT_WORD_INTO_BYTES::setInitialValues() { + var_IN = 0_WORD; + var_BYTE_00 = 0_BYTE; + var_BYTE_01 = 0_BYTE; +} + +void FORTE_SPLIT_WORD_INTO_BYTES::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_WORD_INTO_BYTES::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_BYTE_00, conn_BYTE_00); + writeData(1, var_BYTE_01, conn_BYTE_01); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_BYTES::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_BYTES::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_BYTE_00; + case 1: return &var_BYTE_01; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_WORD_INTO_BYTES::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_WORD_INTO_BYTES::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_WORD_INTO_BYTES::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_BYTE_00; + case 1: return &conn_BYTE_01; + } + return nullptr; +} + +void FORTE_SPLIT_WORD_INTO_BYTES::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_WORD_INTO_BYTES(var_IN, var_BYTE_00, var_BYTE_01); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_WORD_INTO_BYTES(CIEC_WORD st_lv_IN, CIEC_BYTE &st_lv_BYTE_00, CIEC_BYTE &st_lv_BYTE_01) { + st_lv_BYTE_00 = 0_BYTE; + st_lv_BYTE_01 = 0_BYTE; + + #line 13 "SPLIT_WORD_INTO_BYTES.fct" + st_lv_BYTE_00 = st_lv_IN.cpartial(0); + #line 14 "SPLIT_WORD_INTO_BYTES.fct" + st_lv_BYTE_01 = st_lv_IN.cpartial(1); + +} + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.h b/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.h new file mode 100644 index 000000000..d0b4e90e5 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_BYTES_fct.h @@ -0,0 +1,94 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_BYTES + *** Description: this Function extracts the 2 BYTE from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_WORD_INTO_BYTES final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_BYTES) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_WORD_INTO_BYTES(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_WORD var_IN; + + CIEC_BYTE var_BYTE_00; + CIEC_BYTE var_BYTE_01; + + CIEC_BYTE var_conn_BYTE_00; + CIEC_BYTE var_conn_BYTE_01; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_BYTE_00; + CDataConnection conn_BYTE_01; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_WORD &paIN, CIEC_BYTE &paBYTE_00, CIEC_BYTE &paBYTE_01) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paBYTE_00 = var_BYTE_00; + paBYTE_01 = var_BYTE_01; + } + + void operator()(const CIEC_WORD &paIN, CIEC_BYTE &paBYTE_00, CIEC_BYTE &paBYTE_01) { + evt_REQ(paIN, paBYTE_00, paBYTE_01); + } +}; + +void func_SPLIT_WORD_INTO_BYTES(CIEC_WORD st_lv_IN, CIEC_BYTE &st_lv_BYTE_00, CIEC_BYTE &st_lv_BYTE_01); + + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.cpp b/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.cpp new file mode 100644 index 000000000..4286c97e4 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.cpp @@ -0,0 +1,204 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_QUARTERS + *** Description: this Function extracts the 8 QUARTER BYTE from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#include "SPLIT_WORD_INTO_QUARTERS_fct.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "SPLIT_WORD_INTO_QUARTERS_fct_gen.cpp" +#endif + +#include "criticalregion.h" +#include "resource.h" +#include "forte_byte.h" +#include "forte_any_int_variant.h" +#include "forte_any_bit_variant.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" +#include "quarterconst_gcf.h" + +DEFINE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_QUARTERS, g_nStringIdSPLIT_WORD_INTO_QUARTERS) + +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmDataInputNames[] = {g_nStringIdIN}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmDataInputTypeIds[] = {g_nStringIdWORD}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmDataOutputNames[] = {g_nStringIdQUARTER_BYTE_00, g_nStringIdQUARTER_BYTE_01, g_nStringIdQUARTER_BYTE_02, g_nStringIdQUARTER_BYTE_03, g_nStringIdQUARTER_BYTE_04, g_nStringIdQUARTER_BYTE_05, g_nStringIdQUARTER_BYTE_06, g_nStringIdQUARTER_BYTE_07}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmDataOutputTypeIds[] = {g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE, g_nStringIdBYTE}; +const TDataIOID FORTE_SPLIT_WORD_INTO_QUARTERS::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_QUARTERS::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmEventInputNames[] = {g_nStringIdREQ}; +const TDataIOID FORTE_SPLIT_WORD_INTO_QUARTERS::scmEOWith[] = {0, 1, 2, 3, 4, 5, 6, 7, scmWithListDelimiter}; +const TForteInt16 FORTE_SPLIT_WORD_INTO_QUARTERS::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_SPLIT_WORD_INTO_QUARTERS::scmEventOutputNames[] = {g_nStringIdCNF}; +const SFBInterfaceSpec FORTE_SPLIT_WORD_INTO_QUARTERS::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 8, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +FORTE_SPLIT_WORD_INTO_QUARTERS::FORTE_SPLIT_WORD_INTO_QUARTERS(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + CFunctionBlock(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QUARTER_BYTE_00(var_QUARTER_BYTE_00), + var_conn_QUARTER_BYTE_01(var_QUARTER_BYTE_01), + var_conn_QUARTER_BYTE_02(var_QUARTER_BYTE_02), + var_conn_QUARTER_BYTE_03(var_QUARTER_BYTE_03), + var_conn_QUARTER_BYTE_04(var_QUARTER_BYTE_04), + var_conn_QUARTER_BYTE_05(var_QUARTER_BYTE_05), + var_conn_QUARTER_BYTE_06(var_QUARTER_BYTE_06), + var_conn_QUARTER_BYTE_07(var_QUARTER_BYTE_07), + conn_CNF(this, 0), + conn_IN(nullptr), + conn_QUARTER_BYTE_00(this, 0, &var_conn_QUARTER_BYTE_00), + conn_QUARTER_BYTE_01(this, 1, &var_conn_QUARTER_BYTE_01), + conn_QUARTER_BYTE_02(this, 2, &var_conn_QUARTER_BYTE_02), + conn_QUARTER_BYTE_03(this, 3, &var_conn_QUARTER_BYTE_03), + conn_QUARTER_BYTE_04(this, 4, &var_conn_QUARTER_BYTE_04), + conn_QUARTER_BYTE_05(this, 5, &var_conn_QUARTER_BYTE_05), + conn_QUARTER_BYTE_06(this, 6, &var_conn_QUARTER_BYTE_06), + conn_QUARTER_BYTE_07(this, 7, &var_conn_QUARTER_BYTE_07) { +} + +void FORTE_SPLIT_WORD_INTO_QUARTERS::setInitialValues() { + var_IN = 0_WORD; + var_QUARTER_BYTE_00 = 0_BYTE; + var_QUARTER_BYTE_01 = 0_BYTE; + var_QUARTER_BYTE_02 = 0_BYTE; + var_QUARTER_BYTE_03 = 0_BYTE; + var_QUARTER_BYTE_04 = 0_BYTE; + var_QUARTER_BYTE_05 = 0_BYTE; + var_QUARTER_BYTE_06 = 0_BYTE; + var_QUARTER_BYTE_07 = 0_BYTE; +} + +void FORTE_SPLIT_WORD_INTO_QUARTERS::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventREQID: { + readData(0, var_IN, conn_IN); + break; + } + default: + break; + } +} + +void FORTE_SPLIT_WORD_INTO_QUARTERS::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventCNFID: { + writeData(0, var_QUARTER_BYTE_00, conn_QUARTER_BYTE_00); + writeData(1, var_QUARTER_BYTE_01, conn_QUARTER_BYTE_01); + writeData(2, var_QUARTER_BYTE_02, conn_QUARTER_BYTE_02); + writeData(3, var_QUARTER_BYTE_03, conn_QUARTER_BYTE_03); + writeData(4, var_QUARTER_BYTE_04, conn_QUARTER_BYTE_04); + writeData(5, var_QUARTER_BYTE_05, conn_QUARTER_BYTE_05); + writeData(6, var_QUARTER_BYTE_06, conn_QUARTER_BYTE_06); + writeData(7, var_QUARTER_BYTE_07, conn_QUARTER_BYTE_07); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_QUARTERS::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_IN; + } + return nullptr; +} + +CIEC_ANY *FORTE_SPLIT_WORD_INTO_QUARTERS::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QUARTER_BYTE_00; + case 1: return &var_QUARTER_BYTE_01; + case 2: return &var_QUARTER_BYTE_02; + case 3: return &var_QUARTER_BYTE_03; + case 4: return &var_QUARTER_BYTE_04; + case 5: return &var_QUARTER_BYTE_05; + case 6: return &var_QUARTER_BYTE_06; + case 7: return &var_QUARTER_BYTE_07; + } + return nullptr; +} + +CEventConnection *FORTE_SPLIT_WORD_INTO_QUARTERS::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_CNF; + } + return nullptr; +} + +CDataConnection **FORTE_SPLIT_WORD_INTO_QUARTERS::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_IN; + } + return nullptr; +} + +CDataConnection *FORTE_SPLIT_WORD_INTO_QUARTERS::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QUARTER_BYTE_00; + case 1: return &conn_QUARTER_BYTE_01; + case 2: return &conn_QUARTER_BYTE_02; + case 3: return &conn_QUARTER_BYTE_03; + case 4: return &conn_QUARTER_BYTE_04; + case 5: return &conn_QUARTER_BYTE_05; + case 6: return &conn_QUARTER_BYTE_06; + case 7: return &conn_QUARTER_BYTE_07; + } + return nullptr; +} + +void FORTE_SPLIT_WORD_INTO_QUARTERS::executeEvent(const TEventID, CEventChainExecutionThread *const paECET) { + func_SPLIT_WORD_INTO_QUARTERS(var_IN, var_QUARTER_BYTE_00, var_QUARTER_BYTE_01, var_QUARTER_BYTE_02, var_QUARTER_BYTE_03, var_QUARTER_BYTE_04, var_QUARTER_BYTE_05, var_QUARTER_BYTE_06, var_QUARTER_BYTE_07); + sendOutputEvent(scmEventCNFID, paECET); +} + +void func_SPLIT_WORD_INTO_QUARTERS(CIEC_WORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07) { + st_lv_QUARTER_BYTE_00 = 0_BYTE; + st_lv_QUARTER_BYTE_01 = 0_BYTE; + st_lv_QUARTER_BYTE_02 = 0_BYTE; + st_lv_QUARTER_BYTE_03 = 0_BYTE; + st_lv_QUARTER_BYTE_04 = 0_BYTE; + st_lv_QUARTER_BYTE_05 = 0_BYTE; + st_lv_QUARTER_BYTE_06 = 0_BYTE; + st_lv_QUARTER_BYTE_07 = 0_BYTE; + + #line 19 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_00 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_00), st_global_SHIFT_QUARTER_00)); + #line 20 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_01 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_01), st_global_SHIFT_QUARTER_01)); + #line 21 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_02 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_02), st_global_SHIFT_QUARTER_02)); + #line 22 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_03 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_03), st_global_SHIFT_QUARTER_03)); + #line 23 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_04 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_04), st_global_SHIFT_QUARTER_04)); + #line 24 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_05 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_05), st_global_SHIFT_QUARTER_05)); + #line 25 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_06 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_06), st_global_SHIFT_QUARTER_06)); + #line 26 "SPLIT_WORD_INTO_QUARTERS.fct" + st_lv_QUARTER_BYTE_07 = func_WORD_TO_BYTE(func_SHR(func_AND(st_lv_IN, st_global_WORD_QUARTER_07), st_global_SHIFT_QUARTER_07)); + +} + diff --git a/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.h b/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.h new file mode 100644 index 000000000..2a76737e0 --- /dev/null +++ b/src/modules/utils/splitting/SPLIT_WORD_INTO_QUARTERS_fct.h @@ -0,0 +1,118 @@ +/************************************************************************* + *** Copyright (c) 2024 HR Agrartechnik 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 + *** + *** FORTE Library Element + *** + *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x NG! + *** + *** Name: SPLIT_WORD_INTO_QUARTERS + *** Description: this Function extracts the 8 QUARTER BYTE from a word + *** Version: + *** 1.0: 2024-02-22/Franz Höpfinger - HR Agrartechnik - initial Implementation + *** 1.1: 2024-07-24/Moritz Ortmeier - HR Agrartechnik - rename Function and change Output Variables + *************************************************************************/ + +#pragma once + +#include "funcbloc.h" +#include "forte_byte.h" +#include "forte_word.h" +#include "iec61131_functions.h" +#include "forte_array_common.h" +#include "forte_array.h" +#include "forte_array_fixed.h" +#include "forte_array_variable.h" + +class FORTE_SPLIT_WORD_INTO_QUARTERS final : public CFunctionBlock { + DECLARE_FIRMWARE_FB(FORTE_SPLIT_WORD_INTO_QUARTERS) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventREQID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventCNFID = 0; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + public: + FORTE_SPLIT_WORD_INTO_QUARTERS(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + CIEC_WORD var_IN; + + CIEC_BYTE var_QUARTER_BYTE_00; + CIEC_BYTE var_QUARTER_BYTE_01; + CIEC_BYTE var_QUARTER_BYTE_02; + CIEC_BYTE var_QUARTER_BYTE_03; + CIEC_BYTE var_QUARTER_BYTE_04; + CIEC_BYTE var_QUARTER_BYTE_05; + CIEC_BYTE var_QUARTER_BYTE_06; + CIEC_BYTE var_QUARTER_BYTE_07; + + CIEC_BYTE var_conn_QUARTER_BYTE_00; + CIEC_BYTE var_conn_QUARTER_BYTE_01; + CIEC_BYTE var_conn_QUARTER_BYTE_02; + CIEC_BYTE var_conn_QUARTER_BYTE_03; + CIEC_BYTE var_conn_QUARTER_BYTE_04; + CIEC_BYTE var_conn_QUARTER_BYTE_05; + CIEC_BYTE var_conn_QUARTER_BYTE_06; + CIEC_BYTE var_conn_QUARTER_BYTE_07; + + CEventConnection conn_CNF; + + CDataConnection *conn_IN; + + CDataConnection conn_QUARTER_BYTE_00; + CDataConnection conn_QUARTER_BYTE_01; + CDataConnection conn_QUARTER_BYTE_02; + CDataConnection conn_QUARTER_BYTE_03; + CDataConnection conn_QUARTER_BYTE_04; + CDataConnection conn_QUARTER_BYTE_05; + CDataConnection conn_QUARTER_BYTE_06; + CDataConnection conn_QUARTER_BYTE_07; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_REQ(const CIEC_WORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07) { + var_IN = paIN; + executeEvent(scmEventREQID, nullptr); + paQUARTER_BYTE_00 = var_QUARTER_BYTE_00; + paQUARTER_BYTE_01 = var_QUARTER_BYTE_01; + paQUARTER_BYTE_02 = var_QUARTER_BYTE_02; + paQUARTER_BYTE_03 = var_QUARTER_BYTE_03; + paQUARTER_BYTE_04 = var_QUARTER_BYTE_04; + paQUARTER_BYTE_05 = var_QUARTER_BYTE_05; + paQUARTER_BYTE_06 = var_QUARTER_BYTE_06; + paQUARTER_BYTE_07 = var_QUARTER_BYTE_07; + } + + void operator()(const CIEC_WORD &paIN, CIEC_BYTE &paQUARTER_BYTE_00, CIEC_BYTE &paQUARTER_BYTE_01, CIEC_BYTE &paQUARTER_BYTE_02, CIEC_BYTE &paQUARTER_BYTE_03, CIEC_BYTE &paQUARTER_BYTE_04, CIEC_BYTE &paQUARTER_BYTE_05, CIEC_BYTE &paQUARTER_BYTE_06, CIEC_BYTE &paQUARTER_BYTE_07) { + evt_REQ(paIN, paQUARTER_BYTE_00, paQUARTER_BYTE_01, paQUARTER_BYTE_02, paQUARTER_BYTE_03, paQUARTER_BYTE_04, paQUARTER_BYTE_05, paQUARTER_BYTE_06, paQUARTER_BYTE_07); + } +}; + +void func_SPLIT_WORD_INTO_QUARTERS(CIEC_WORD st_lv_IN, CIEC_BYTE &st_lv_QUARTER_BYTE_00, CIEC_BYTE &st_lv_QUARTER_BYTE_01, CIEC_BYTE &st_lv_QUARTER_BYTE_02, CIEC_BYTE &st_lv_QUARTER_BYTE_03, CIEC_BYTE &st_lv_QUARTER_BYTE_04, CIEC_BYTE &st_lv_QUARTER_BYTE_05, CIEC_BYTE &st_lv_QUARTER_BYTE_06, CIEC_BYTE &st_lv_QUARTER_BYTE_07); + + diff --git a/src/modules/wagokbus/CMakeLists.txt b/src/modules/wagokbus/CMakeLists.txt index d502f5cea..b39817285 100644 --- a/src/modules/wagokbus/CMakeLists.txt +++ b/src/modules/wagokbus/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2016 fortiss GmbH +# Copyright (c) 2016, 2024 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. @@ -8,7 +8,7 @@ # # Contributors: # Milan Vathoopan, Alois Zoitl - initial API and implementation and/or initial documentation -# * Jose Cabral - Add modular IOs +# Jose Cabral - Add modular IOs # *******************************************************************************/ ############################################################################# # WAGO KBUS SIFBs @@ -19,14 +19,11 @@ forte_add_module(WagoKbus OFF "Wago Kbus interface") if(FORTE_MODULE_WagoKbus) # 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(processinterface) - forte_set_process_interface("Wago Kbus" IX QX IW QW) - forte_add_handler(WagoPFCProcessInterface::CKBusHandler processinterface) + 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) + message("Building Modular Wago IOs") endif(FORTE_IO) SET(FORTE_WAGO_INCLUDE_DIR "" CACHE STRING "Path where the include for wago is found") @@ -37,9 +34,8 @@ if(FORTE_MODULE_WagoKbus) 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") + forte_add_link_library(dal libloader pthread ffi dbus-glib-1 glib-2.0) + forte_add_link_library(typelabel oslinux dbuskbuscommon) #TODO: Further dependencies are to be checked and added later diff --git a/src/modules/wagokbus/modular/CMakeLists.txt b/src/modules/wagokbus/modular/CMakeLists.txt deleted file mode 100644 index b72070e30..000000000 --- a/src/modules/wagokbus/modular/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -#******************************************************************************* -# 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 deleted file mode 100644 index c458a45ee..000000000 --- a/src/modules/wagokbus/modular/types/Wago1405_6.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {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::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; - -const CStringDictionary::TStringId FORTE_Wago1405_6::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; - -const TForteInt16 FORTE_Wago1405_6::scmEIWithIndexes[] = {0}; -const TDataIOID FORTE_Wago1405_6::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; -const CStringDictionary::TStringId FORTE_Wago1405_6::scmEventInputNames[] = {g_nStringIdMAP}; - -const TDataIOID FORTE_Wago1405_6::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; -const TForteInt16 FORTE_Wago1405_6::scmEOWithIndexes[] = {0, 2, -1}; -const CStringDictionary::TStringId FORTE_Wago1405_6::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; - -const SAdapterInstanceDef FORTE_Wago1405_6::scmAdapterInstances[] = { -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }, -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }}; - -const SFBInterfaceSpec FORTE_Wago1405_6::scmFBInterfaceSpec = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 17, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, - 2,scmAdapterInstances}; diff --git a/src/modules/wagokbus/modular/types/Wago1405_6.h b/src/modules/wagokbus/modular/types/Wago1405_6.h deleted file mode 100644 index cb140bdbb..000000000 --- a/src/modules/wagokbus/modular/types/Wago1405_6.h +++ /dev/null @@ -1,139 +0,0 @@ -/************************************************************************* - *** 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 -#include -#include -#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){ - }; - - ~FORTE_Wago1405_6() override = default; - - protected: - - INIT_HANLDLES(16, 0, 0, 0) - - private: - static const CStringDictionary::TStringId scmDataInputNames[]; - static const CStringDictionary::TStringId scmDataInputTypeIds[]; - CIEC_BOOL &QI() { - return *static_cast(getDI(0)); - }; - - CIEC_WSTRING &DigitalInput_1() { - return *static_cast(getDI(1)); - }; - - CIEC_WSTRING &DigitalInput_2() { - return *static_cast(getDI(2)); - }; - - CIEC_WSTRING &DigitalInput_3() { - return *static_cast(getDI(3)); - }; - - CIEC_WSTRING &DigitalInput_4() { - return *static_cast(getDI(4)); - }; - - CIEC_WSTRING &DigitalInput_5() { - return *static_cast(getDI(5)); - }; - - CIEC_WSTRING &DigitalInput_6() { - return *static_cast(getDI(6)); - }; - - CIEC_WSTRING &DigitalInput_7() { - return *static_cast(getDI(7)); - }; - - CIEC_WSTRING &DigitalInput_8() { - return *static_cast(getDI(8)); - }; - - CIEC_WSTRING &DigitalInput_9() { - return *static_cast(getDI(9)); - }; - - CIEC_WSTRING &DigitalInput_10() { - return *static_cast(getDI(10)); - }; - - CIEC_WSTRING &DigitalInput_11() { - return *static_cast(getDI(11)); - }; - - CIEC_WSTRING &DigitalInput_12() { - return *static_cast(getDI(12)); - }; - - CIEC_WSTRING &DigitalInput_13() { - return *static_cast(getDI(13)); - }; - - CIEC_WSTRING &DigitalInput_14() { - return *static_cast(getDI(14)); - }; - - CIEC_WSTRING &DigitalInput_15() { - return *static_cast(getDI(15)); - }; - - CIEC_WSTRING &DigitalInput_16() { - return *static_cast(getDI(16)); - }; - - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - CIEC_BOOL &QO() { - return *static_cast(getDO(0)); - }; - - CIEC_WSTRING &STATUS() { - return *static_cast(getDO(1)); - }; - - static const TForteInt16 scmEIWithIndexes[]; - static const TDataIOID scmEIWith[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TForteInt16 scmEOWithIndexes[]; - static const TDataIOID scmEOWith[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SAdapterInstanceDef scmAdapterInstances[]; - - FORTE_WagoBusAdapter& BusAdapterOut() { - return (*static_cast(mAdapters[0])); - }; - static const int scmBusAdapterOutAdpNum = 0; - FORTE_WagoBusAdapter& BusAdapterIn() { - return (*static_cast(mAdapters[1])); - }; - static const int scmBusAdapterInAdpNum = 1; - static const SFBInterfaceSpec scmFBInterfaceSpec; - - -}; - -#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 deleted file mode 100644 index a13c5907d..000000000 --- a/src/modules/wagokbus/modular/types/Wago1504_5.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {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::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; - -const CStringDictionary::TStringId FORTE_Wago1504_5::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; - -const TForteInt16 FORTE_Wago1504_5::scmEIWithIndexes[] = {0}; -const TDataIOID FORTE_Wago1504_5::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; -const CStringDictionary::TStringId FORTE_Wago1504_5::scmEventInputNames[] = {g_nStringIdMAP}; - -const TDataIOID FORTE_Wago1504_5::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; -const TForteInt16 FORTE_Wago1504_5::scmEOWithIndexes[] = {0, 2, -1}; -const CStringDictionary::TStringId FORTE_Wago1504_5::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; - -const SAdapterInstanceDef FORTE_Wago1504_5::scmAdapterInstances[] = { -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }, -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }}; - -const SFBInterfaceSpec FORTE_Wago1504_5::scmFBInterfaceSpec = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 17, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, - 2,scmAdapterInstances}; - diff --git a/src/modules/wagokbus/modular/types/Wago1504_5.h b/src/modules/wagokbus/modular/types/Wago1504_5.h deleted file mode 100644 index b2e2ce786..000000000 --- a/src/modules/wagokbus/modular/types/Wago1504_5.h +++ /dev/null @@ -1,139 +0,0 @@ -/************************************************************************* - *** 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 -#include -#include -#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){ - }; - - ~FORTE_Wago1504_5() override = default; - - protected: - - INIT_HANLDLES(0, 16, 0, 0) - - private: - static const CStringDictionary::TStringId scmDataInputNames[]; - static const CStringDictionary::TStringId scmDataInputTypeIds[]; - CIEC_BOOL &QI(){ - return *static_cast(getDI(0)); - }; - - CIEC_WSTRING &DigitalOutput_1(){ - return *static_cast(getDI(1)); - }; - - CIEC_WSTRING &DigitalOutput_2(){ - return *static_cast(getDI(2)); - }; - - CIEC_WSTRING &DigitalOutput_3(){ - return *static_cast(getDI(3)); - }; - - CIEC_WSTRING &DigitalOutput_4(){ - return *static_cast(getDI(4)); - }; - - CIEC_WSTRING &DigitalOutput_5(){ - return *static_cast(getDI(5)); - }; - - CIEC_WSTRING &DigitalOutput_6(){ - return *static_cast(getDI(6)); - }; - - CIEC_WSTRING &DigitalOutput_7(){ - return *static_cast(getDI(7)); - }; - - CIEC_WSTRING &DigitalOutput_8(){ - return *static_cast(getDI(8)); - }; - - CIEC_WSTRING &DigitalOutput_9(){ - return *static_cast(getDI(9)); - }; - - CIEC_WSTRING &DigitalOutput_10(){ - return *static_cast(getDI(10)); - }; - - CIEC_WSTRING &DigitalOutput_11(){ - return *static_cast(getDI(11)); - }; - - CIEC_WSTRING &DigitalOutput_12(){ - return *static_cast(getDI(12)); - }; - - CIEC_WSTRING &DigitalOutput_13(){ - return *static_cast(getDI(13)); - }; - - CIEC_WSTRING &DigitalOutput_14(){ - return *static_cast(getDI(14)); - }; - - CIEC_WSTRING &DigitalOutput_15(){ - return *static_cast(getDI(15)); - }; - - CIEC_WSTRING &DigitalOutput_16(){ - return *static_cast(getDI(16)); - }; - - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - CIEC_BOOL &QO(){ - return *static_cast(getDO(0)); - }; - - CIEC_WSTRING &STATUS(){ - return *static_cast(getDO(1)); - }; - - static const TForteInt16 scmEIWithIndexes[]; - static const TDataIOID scmEIWith[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TForteInt16 scmEOWithIndexes[]; - static const TDataIOID scmEOWith[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SAdapterInstanceDef scmAdapterInstances[]; - - FORTE_WagoBusAdapter& BusAdapterOut(){ - return (*static_cast(mAdapters[0])); - }; - static const int scmBusAdapterOutAdpNum = 0; - FORTE_WagoBusAdapter& BusAdapterIn(){ - return (*static_cast(mAdapters[1])); - }; - static const int scmBusAdapterInAdpNum = 1; - static const SFBInterfaceSpec scmFBInterfaceSpec; - - -}; - -#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 deleted file mode 100644 index bdbddc40e..000000000 --- a/src/modules/wagokbus/modular/types/Wago1506.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {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::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; - -const CStringDictionary::TStringId FORTE_Wago1506::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; - -const TForteInt16 FORTE_Wago1506::scmEIWithIndexes[] = {0}; -const TDataIOID FORTE_Wago1506::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; -const CStringDictionary::TStringId FORTE_Wago1506::scmEventInputNames[] = {g_nStringIdMAP}; - -const TDataIOID FORTE_Wago1506::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; -const TForteInt16 FORTE_Wago1506::scmEOWithIndexes[] = {0, 2, -1}; -const CStringDictionary::TStringId FORTE_Wago1506::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; - -const SAdapterInstanceDef FORTE_Wago1506::scmAdapterInstances[] = { -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }, -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }}; - -const SFBInterfaceSpec FORTE_Wago1506::scmFBInterfaceSpec = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 17, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, - 2,scmAdapterInstances}; diff --git a/src/modules/wagokbus/modular/types/Wago1506.h b/src/modules/wagokbus/modular/types/Wago1506.h deleted file mode 100644 index 1f844de02..000000000 --- a/src/modules/wagokbus/modular/types/Wago1506.h +++ /dev/null @@ -1,139 +0,0 @@ -/************************************************************************* - *** 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 -#include -#include -#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){ - }; - - ~FORTE_Wago1506() override = default; - - protected: - - INIT_HANLDLES(8, 8, 0, 0) - - private: - static const CStringDictionary::TStringId scmDataInputNames[]; - static const CStringDictionary::TStringId scmDataInputTypeIds[]; - CIEC_BOOL &QI() { - return *static_cast(getDI(0)); - }; - - CIEC_WSTRING &DigitalInput_1() { - return *static_cast(getDI(1)); - }; - - CIEC_WSTRING &DigitalInput_2() { - return *static_cast(getDI(2)); - }; - - CIEC_WSTRING &DigitalInput_3() { - return *static_cast(getDI(3)); - }; - - CIEC_WSTRING &DigitalInput_4() { - return *static_cast(getDI(4)); - }; - - CIEC_WSTRING &DigitalInput_5() { - return *static_cast(getDI(5)); - }; - - CIEC_WSTRING &DigitalInput_6() { - return *static_cast(getDI(6)); - }; - - CIEC_WSTRING &DigitalInput_7() { - return *static_cast(getDI(7)); - }; - - CIEC_WSTRING &DigitalInput_8() { - return *static_cast(getDI(8)); - }; - - CIEC_WSTRING &DigitalOutput_1() { - return *static_cast(getDI(9)); - }; - - CIEC_WSTRING &DigitalOutput_2() { - return *static_cast(getDI(10)); - }; - - CIEC_WSTRING &DigitalOutput_3() { - return *static_cast(getDI(11)); - }; - - CIEC_WSTRING &DigitalOutput_4() { - return *static_cast(getDI(12)); - }; - - CIEC_WSTRING &DigitalOutput_5() { - return *static_cast(getDI(13)); - }; - - CIEC_WSTRING &DigitalOutput_6() { - return *static_cast(getDI(14)); - }; - - CIEC_WSTRING &DigitalOutput_7() { - return *static_cast(getDI(15)); - }; - - CIEC_WSTRING &DigitalOutput_8() { - return *static_cast(getDI(16)); - }; - - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - CIEC_BOOL &QO() { - return *static_cast(getDO(0)); - }; - - CIEC_WSTRING &STATUS() { - return *static_cast(getDO(1)); - }; - - static const TForteInt16 scmEIWithIndexes[]; - static const TDataIOID scmEIWith[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TForteInt16 scmEOWithIndexes[]; - static const TDataIOID scmEOWith[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SAdapterInstanceDef scmAdapterInstances[]; - - FORTE_WagoBusAdapter& BusAdapterOut() { - return (*static_cast(mAdapters[0])); - }; - static const int scmBusAdapterOutAdpNum = 0; - FORTE_WagoBusAdapter& BusAdapterIn() { - return (*static_cast(mAdapters[1])); - }; - static const int scmBusAdapterInAdpNum = 1; - static const SFBInterfaceSpec scmFBInterfaceSpec; - - -}; - -#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 deleted file mode 100644 index d619fa356..000000000 --- a/src/modules/wagokbus/modular/types/Wago459.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdAnalogInput_1, g_nStringIdAnalogInput_2, g_nStringIdAnalogInput_3, g_nStringIdAnalogInput_4}; - -const CStringDictionary::TStringId FORTE_Wago459::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING, g_nStringIdWSTRING}; - -const CStringDictionary::TStringId FORTE_Wago459::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; - -const CStringDictionary::TStringId FORTE_Wago459::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; - -const TForteInt16 FORTE_Wago459::scmEIWithIndexes[] = {0}; -const TDataIOID FORTE_Wago459::scmEIWith[] = {1, 2, 3, 4, 0, scmWithListDelimiter}; -const CStringDictionary::TStringId FORTE_Wago459::scmEventInputNames[] = {g_nStringIdMAP}; - -const TDataIOID FORTE_Wago459::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; -const TForteInt16 FORTE_Wago459::scmEOWithIndexes[] = {0, 2, -1}; -const CStringDictionary::TStringId FORTE_Wago459::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; - -const SAdapterInstanceDef FORTE_Wago459::scmAdapterInstances[] = { -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }, -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false }}; - -const SFBInterfaceSpec FORTE_Wago459::scmFBInterfaceSpec = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 5, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, - 2,scmAdapterInstances}; diff --git a/src/modules/wagokbus/modular/types/Wago459.h b/src/modules/wagokbus/modular/types/Wago459.h deleted file mode 100644 index 4f3defb9c..000000000 --- a/src/modules/wagokbus/modular/types/Wago459.h +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************* - *** 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 -#include -#include -#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){ - }; - - ~FORTE_Wago459() override = default; - - protected: - - INIT_HANLDLES(0, 0, 4, 0) - - private: - static const CStringDictionary::TStringId scmDataInputNames[]; - static const CStringDictionary::TStringId scmDataInputTypeIds[]; - CIEC_BOOL &QI(){ - return *static_cast(getDI(0)); - }; - - CIEC_WSTRING &AnalogInput_1(){ - return *static_cast(getDI(1)); - }; - - CIEC_WSTRING &AnalogInput_2(){ - return *static_cast(getDI(2)); - }; - - CIEC_WSTRING &AnalogInput_3(){ - return *static_cast(getDI(3)); - }; - - CIEC_WSTRING &AnalogInput_4(){ - return *static_cast(getDI(4)); - }; - - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - CIEC_BOOL &QO(){ - return *static_cast(getDO(0)); - }; - - CIEC_WSTRING &STATUS(){ - return *static_cast(getDO(1)); - }; - - static const TForteInt16 scmEIWithIndexes[]; - static const TDataIOID scmEIWith[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TForteInt16 scmEOWithIndexes[]; - static const TDataIOID scmEOWith[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SAdapterInstanceDef scmAdapterInstances[]; - - FORTE_WagoBusAdapter& BusAdapterOut(){ - return (*static_cast(mAdapters[0])); - }; - static const int scmBusAdapterOutAdpNum = 0; - FORTE_WagoBusAdapter& BusAdapterIn(){ - return (*static_cast(mAdapters[1])); - }; - static const int scmBusAdapterInAdpNum = 1; - static const SFBInterfaceSpec scmFBInterfaceSpec; - - -}; - -#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 deleted file mode 100644 index 3a3229994..000000000 --- a/src/modules/wagokbus/modular/types/WagoBusAdapter.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {g_nStringIdQO}; - -const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataInputTypeIds[] = {g_nStringIdBOOL}; - -const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataOutputNames[] = {g_nStringIdQI, g_nStringIdMasterId, g_nStringIdIndex}; - -const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdUINT, g_nStringIdUINT}; - -const TDataIOID FORTE_WagoBusAdapter::scmEIWith[] = {0, scmWithListDelimiter}; -const TForteInt16 FORTE_WagoBusAdapter::scmEIWithIndexes[] = {0, -1}; -const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmEventInputNames[] = {g_nStringIdINITO}; - -const TDataIOID FORTE_WagoBusAdapter::scmEOWith[] = {2, 1, 0, scmWithListDelimiter}; -const TForteInt16 FORTE_WagoBusAdapter::scmEOWithIndexes[] = {0, -1}; -const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmEventOutputNames[] = {g_nStringIdINIT}; - -const SFBInterfaceSpec FORTE_WagoBusAdapter::scmFBInterfaceSpecSocket = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 1, scmDataInputNames, scmDataInputTypeIds, - 3, scmDataOutputNames, scmDataOutputTypeIds, - 0, 0 -}; - -const SFBInterfaceSpec FORTE_WagoBusAdapter::scmFBInterfaceSpecPlug = { - 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, 3, scmDataOutputNames, scmDataOutputTypeIds, - 1, scmDataInputNames, scmDataInputTypeIds, - 0, 0 -}; - -const TForteUInt8 FORTE_WagoBusAdapter::scmSlaveConfigurationIO[] = { }; -const TForteUInt8 FORTE_WagoBusAdapter::scmSlaveConfigurationIONum = 0; - - - diff --git a/src/modules/wagokbus/modular/types/WagoMaster.cpp b/src/modules/wagokbus/modular/types/WagoMaster.cpp deleted file mode 100644 index 48daaeeb7..000000000 --- a/src/modules/wagokbus/modular/types/WagoMaster.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/************************************************************************* - *** 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::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdUpdateInterval}; - -const CStringDictionary::TStringId FORTE_WagoMaster::scmDataInputTypeIds[] = { g_nStringIdBOOL, g_nStringIdUINT }; - -const CStringDictionary::TStringId FORTE_WagoMaster::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; - -const CStringDictionary::TStringId FORTE_WagoMaster::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; - -const TForteInt16 FORTE_WagoMaster::scmEIWithIndexes[] = {0}; -const TDataIOID FORTE_WagoMaster::scmEIWith[] = {0, 1, scmWithListDelimiter}; -const CStringDictionary::TStringId FORTE_WagoMaster::scmEventInputNames[] = {g_nStringIdINIT}; - -const TDataIOID FORTE_WagoMaster::scmEOWith[] = {0, 1, scmWithListDelimiter, 1, 0, scmWithListDelimiter}; -const TForteInt16 FORTE_WagoMaster::scmEOWithIndexes[] = {0, 3, -1}; -const CStringDictionary::TStringId FORTE_WagoMaster::scmEventOutputNames[] = {g_nStringIdINITO, g_nStringIdIND}; - -const SAdapterInstanceDef FORTE_WagoMaster::scmAdapterInstances[] = { -{g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true }}; - -const SFBInterfaceSpec FORTE_WagoMaster::scmFBInterfaceSpec = { - 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, - 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, 2, scmDataInputNames, scmDataInputTypeIds, - 2, scmDataOutputNames, scmDataOutputTypeIds, - 1,scmAdapterInstances}; - -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 deleted file mode 100644 index a7288273c..000000000 --- a/src/modules/wagokbus/modular/types/WagoMaster.h +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************* - *** 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){ - }; - - ~FORTE_WagoMaster() override = default; - - CIEC_BOOL &QO(){ - return *static_cast(getDO(0)); - }; - - CIEC_WSTRING &STATUS(){ - return *static_cast(getDO(1)); - }; - - CIEC_BOOL &QI(){ - return *static_cast(getDI(0)); - }; - - CIEC_BOOL &UpdateInterval(){ - return *static_cast(getDI(1)); - }; - - FORTE_WagoBusAdapter& BusAdapterOut(){ - return (*static_cast(mAdapters[0])); - }; - - private: - static const CStringDictionary::TStringId scmDataInputNames[]; - static const CStringDictionary::TStringId scmDataInputTypeIds[]; - static const CStringDictionary::TStringId scmDataOutputNames[]; - static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - - static const TEventID scmEventINITID = 0; - static const TForteInt16 scmEIWithIndexes[]; - static const TDataIOID scmEIWith[]; - static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TEventID scmEventINITOID = 0; - static const TEventID scmEventINDID = 1; - static const TForteInt16 scmEOWithIndexes[]; - static const TDataIOID scmEOWith[]; - static const CStringDictionary::TStringId scmEventOutputNames[]; - - static const SAdapterInstanceDef scmAdapterInstances[]; - - static const int scmBusAdapterOutAdpNum = 0; - static const SFBInterfaceSpec scmFBInterfaceSpec; - - - 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 deleted file mode 100644 index 8ec71a156..000000000 --- a/src/modules/wagokbus/modular/types/wagoSlaveBase.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************* - *** 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, forte::core::CFBContainer &paContainer, const SFBInterfaceSpec* paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId) : - forte::core::io::IOConfigFBMultiSlave(scmSlaveConfigurationIO, scmSlaveConfigurationIONum, paType, paContainer, paInterfaceSpec, paInstanceNameId) { -} - -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(getDI(offset + i)), - forte::core::io::IOMapper::In, mIndex, CIEC_ANY::e_BOOL, static_cast(i)); - initHandle(desc); - } - - offset += paNumberOfBoolInputs; - - for(size_t i = 0; i < paNumberOfBoolOutputs; i++) { - WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast(getDI(offset + i)), - forte::core::io::IOMapper::Out, mIndex, CIEC_ANY::e_BOOL, static_cast(i)); - initHandle(desc); - } - - offset += paNumberOfBoolOutputs; - - for(size_t i = 0; i < paNumberOfAnalogInputs; i++) { - WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast(getDI(offset + i)), - forte::core::io::IOMapper::In, mIndex, CIEC_ANY::e_WORD, static_cast(i)); - initHandle(desc); - } - - offset += paNumberOfAnalogInputs; - - for(size_t i = 0; i < paNumberOfAnalogOutputs; i++) { - WagoDeviceController::WagoHandleDescriptor desc = WagoDeviceController::WagoHandleDescriptor(*static_cast(getDI(offset + i)), - forte::core::io::IOMapper::Out, mIndex, CIEC_ANY::e_WORD, static_cast(i)); - initHandle(desc); - } -} diff --git a/src/modules/wagokbus/processinterface.cpp b/src/modules/wagokbus/processinterface.cpp deleted file mode 100644 index 89db6f509..000000000 --- a/src/modules/wagokbus/processinterface.cpp +++ /dev/null @@ -1,311 +0,0 @@ -/******************************************************************************* - * 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 - * Milan Vathoopan - Extended functionality with anlog input and output blocks - *******************************************************************************/ -#include "processinterface.h" -#include -#include -#include - -DEFINE_HANDLER(WagoPFCProcessInterface::CKBusHandler) - -WagoPFCProcessInterface::WagoPFCProcessInterface(forte::core::CFBContainer &paContainer, const SFBInterfaceSpec& paInterfaceSpec, - const CStringDictionary::TStringId paInstanceNameId) : - CProcessInterfaceBase(paContainer, paInterfaceSpec, paInstanceNameId), mSlot(0), mChannel(0), mTerminalInfo(0), mInitialized(false) { -} - -WagoPFCProcessInterface::~WagoPFCProcessInterface() { - deinitialise(); -} - -bool WagoPFCProcessInterface::initialise(bool paInput, CEventChainExecutionThread *const paECET) { - mInitialized = false; - std::vector paramsList(generateParameterList()); - char *pBuffer; - - if(!paramsList.empty()) { - mSlot = strtol(paramsList[0].c_str(), &pBuffer, 10); - mChannel = strtol(paramsList[1].c_str(), &pBuffer, 10); - } - - if((getExtEvHandler(*this).isIdValid(static_cast(mSlot)))) { - mTerminalInfo = getExtEvHandler(*this).getTerminalInfo(static_cast(mSlot)); - if(0 != mTerminalInfo) { - if((paInput) && (getDO(2)->getDataTypeID() == CIEC_ANY::e_BOOL)) { - getExtEvHandler(*this).registerKBusReadFB(this); - } - - QO() = QI(); - - if(!getExtEvHandler(*this).isAlive()) { - getExtEvHandler(*this).start(); - } - - mInitialized = true; - setEventChainExecutor(paECET); - } - } - return mInitialized; -} - -bool WagoPFCProcessInterface::deinitialise() { - getExtEvHandler(*this).unregisterKBusReadFB(this); - return true; -} - -bool WagoPFCProcessInterface::readPin() { - return true; -} - -bool WagoPFCProcessInterface::writePin() { - getExtEvHandler(*this).writeOutputDataBitToKBus(mTerminalInfo, mChannel, OUT_X()); - return true; -} - -bool WagoPFCProcessInterface::readWord() { - TForteWord inDataWord(0); - getExtEvHandler(*this).readInputDataWordfromKBus(mTerminalInfo, mChannel, &inDataWord); - IN_W() = inDataWord; - return true; -} - -bool WagoPFCProcessInterface::writeWord() { - getExtEvHandler(*this).writeOutputDataWordToKBus(mTerminalInfo, mChannel, OUT_W()); - return true; -} - -bool WagoPFCProcessInterface::checkInputData() { - bool retVal = false; - bool inDataBool(false); - getExtEvHandler(*this).readInputDataBitfromKBus(mTerminalInfo, mChannel, &inDataBool); - 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 - tDeviceInfo deviceList[10]; // the list of devices given by the ADI - size_t nrDevicesFound; // number of devices found - mAppDevInterface = adi_GetApplicationInterface(); - mAppDevInterface->Init(); - mAppDevInterface->ScanDevices(); - mAppDevInterface->GetDeviceList(sizeof(deviceList), deviceList, &nrDevicesFound); - - // find kbus device - 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 we are here the initialization could not be finished clean up and close everything - closeKBusInterface(); -} - -WagoPFCProcessInterface::CKBusHandler::~CKBusHandler() { - closeKBusInterface(); -} - -bool WagoPFCProcessInterface::CKBusHandler::isKBusRunning() { - return ((isAlive()) && (mKBusDeviceId != scmInvalidDeviceId)); -} - -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, nullptr)) { - 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(); - } - - return bRetVal; -} - -bool WagoPFCProcessInterface::CKBusHandler::isIdValid(TForteUInt8 paSlot) { - return (paSlot <= mTerminalCount); -} - -tldkc_KbusInfo_TerminalInfo *WagoPFCProcessInterface::CKBusHandler::getTerminalInfo(TForteUInt8 paSlot) { - tldkc_KbusInfo_TerminalInfo *pstRetVal = 0; - if(paSlot <= mTerminalCount) { - pstRetVal = &(mTerminalDescription[paSlot]); - } - return pstRetVal; -} - -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(); - } - } else { - DEVLOG_ERROR("CKBusHandler: Set application state to 'Running' failed\n"); - } - closeKBusInterface(); -} - -bool WagoPFCProcessInterface::CKBusHandler::triggerKBusCycle() { - bool bRetVal = false; - uint32_t unPushRetVal = 0; - - if(DAL_SUCCESS == mAppDevInterface->CallDeviceSpecificFunction("libpackbus_Push", &unPushRetVal)) { - if(DAL_SUCCESS == unPushRetVal) { - mAppDevInterface->WatchdogTrigger(); - bRetVal = true; - } else { - DEVLOG_ERROR("CKBusHandler: Function 'libpackbus_Push' failed\n"); - } - } else { - DEVLOG_ERROR("CKBusHandler: CallDeviceSpecificFunction for 'libpackbus_Push' failed\n"); - } - return bRetVal; -} - -std::vector WagoPFCProcessInterface::generateParameterList() { - std::stringstream streamBuf(std::string(PARAMS().getValue())); - std::vector retVal; - std::string segment; - - while(std::getline(streamBuf, segment, '.')) { //seperate the PARAMS input by '.' for easier processing - retVal.push_back(segment); - } - return retVal; -} - -void WagoPFCProcessInterface::CKBusHandler::updateReadData() { - //long pa_Value = strtol(mIndata, nullptr, 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()) { - // If data has changed, give the indication event - startNewEventChain(*itRunner); - } - } - - mAppDevInterface->ReadEnd(mKBusDeviceId, mTaskId); /* unlock PD-In data */ - mReadFBListSync.unlock(); -} - -void WagoPFCProcessInterface::CKBusHandler::registerKBusReadFB(WagoPFCProcessInterface *paFB) { - mReadFBListSync.lock(); - mReadFBList.pushBack(paFB); - mReadFBListSync.unlock(); -} - -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) { - mReadFBList.popFront(); - } else { - mReadFBList.eraseAfter(itRefNode); - } - break; - } - - itRefNode = itRunner; - ++itRunner; - } - - mReadFBListSync.unlock(); -} - -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) { - mAppDevInterface->ReadBool(mKBusDeviceId, mTaskId, ((paTerminal->OffsetInput_bits) + paChannel), paInDataBool); -} - -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->ReadEnd(mKBusDeviceId, mTaskId); /* unlock PD-In data */ - *paInDataWord = static_cast((static_cast(InData[1]) << 8) + (static_cast(InData[0]))); -} - -void WagoPFCProcessInterface::CKBusHandler::writeOutputDataWordToKBus(tldkc_KbusInfo_TerminalInfo *paTerminal, TForteUInt32 paChannel, - TForteWord paOutDataWord) { - TForteByte outData[2]; - outData[0] = static_cast(paOutDataWord & 0x00FF); - outData[1] = static_cast(paOutDataWord >> 8); - mAppDevInterface->WriteStart(mKBusDeviceId, mTaskId); - mAppDevInterface->WriteBytes(mKBusDeviceId, mTaskId, ((paTerminal->OffsetOutput_bits) + (paChannel * 2)), 2, outData); - mAppDevInterface->WriteEnd(mKBusDeviceId, mTaskId); -} - -void WagoPFCProcessInterface::CKBusHandler::closeKBusInterface() { - if(0 != mAppDevInterface) { - mAppDevInterface->CloseDevice(mKBusDeviceId); // close kbus device - mAppDevInterface->Exit(); // disconnect ADI-Interface - mKBusDeviceId = scmInvalidDeviceId; - mAppDevInterface = 0; - } -} - -void WagoPFCProcessInterface::CKBusHandler::enableHandler() { -} - -void WagoPFCProcessInterface::CKBusHandler::disableHandler() { -} - -void WagoPFCProcessInterface::CKBusHandler::setPriority(int) { -} - -int WagoPFCProcessInterface::CKBusHandler::getPriority() const { - return 0; -} diff --git a/src/modules/wagokbus/processinterface.h b/src/modules/wagokbus/processinterface.h deleted file mode 100644 index be916ecee..000000000 --- a/src/modules/wagokbus/processinterface.h +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * 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 - * Milan Vathoopan - Extended functionality with anlog input and output blocks - *******************************************************************************/ -#ifndef PROCESSINTERFACE_H_ -#define PROCESSINTERFACE_H_ - -#include <../../stdfblib/io/processinterfacebase.h> -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define OS_MUST_BE_ARRAY - -extern "C" { -#include -#include -#include -} - -class WagoPFCProcessInterface : public CProcessInterfaceBase { - public: - // wago PFC process interface declaration - WagoPFCProcessInterface(forte::core::CFBContainer &paContainer, const SFBInterfaceSpec& paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId); - ~WagoPFCProcessInterface() override; - - // cppcheck-suppress noConstructor - class CKBusHandler : public CExternalEventHandler, public CThread { - DECLARE_HANDLER(CKBusHandler) - - public: - //!KBus interface handling is up and running correctly - bool isKBusRunning(); - //bool onKBusCylce(WagoPFCProcessInterface &paKBusHandler); 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); - void run() override; - /*!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() override; - void disableHandler() override; - void setPriority(int paPriority) override; - int getPriority() const override; - - private: - // Private methods - void updateReadData(); - void closeKBusInterface(); - bool triggerKBusCycle(); - bool loadTerminalInformation(); - - //Valid device ids are always greater than 0 - typedef CSinglyLinkedList TReadFBContainer; - - static const tDeviceId scmInvalidDeviceId = -1; - - TReadFBContainer mReadFBList; - CSyncObject mReadFBListSync; - - //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]; - }; - - protected: - // Protected member variables - TForteUInt32 mSlot; - TForteUInt32 mChannel; - tldkc_KbusInfo_TerminalInfo *mTerminalInfo; - - // Wago PFCprocess interface protected methods - bool initialise(bool paInput, CEventChainExecutionThread *const paECET); - bool deinitialise(); - bool readPin(); - bool writePin(); - bool readWord(); - bool writeWord(); - - private: - // Private data of WagoPFCProcessinterface - bool mInitialized; - bool checkInputData(); - std::vector generateParameterList(); - -}; - -//tell the IX and QX FB that this is the process interface to be used -typedef WagoPFCProcessInterface CProcessInterface; - -#endif /* PROCESSINTERFACE_H_ */ diff --git a/src/modules/wagokbus/types/Wago1405_6.cpp b/src/modules/wagokbus/types/Wago1405_6.cpp new file mode 100644 index 000000000..de0129551 --- /dev/null +++ b/src/modules/wagokbus/types/Wago1405_6.cpp @@ -0,0 +1,200 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING}; +const CStringDictionary::TStringId FORTE_Wago1405_6::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; +const CStringDictionary::TStringId FORTE_Wago1405_6::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; +const TDataIOID FORTE_Wago1405_6::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1405_6::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_Wago1405_6::scmEventInputNames[] = {g_nStringIdMAP}; +const TDataIOID FORTE_Wago1405_6::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1405_6::scmEOWithIndexes[] = {0, 2}; +const CStringDictionary::TStringId FORTE_Wago1405_6::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; +const SAdapterInstanceDef FORTE_Wago1405_6::scmAdapterInstances[] = { + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true}, + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false} +}; +const SFBInterfaceSpec FORTE_Wago1405_6::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 17, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 2, scmAdapterInstances +}; + +FORTE_Wago1405_6::FORTE_Wago1405_6(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + WagoSlaveBase(36865, paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QO(var_QO), + var_conn_STATUS(var_STATUS), + conn_MAPO(this, 0), + conn_IND(this, 1), + conn_QI(nullptr), + conn_DigitalInput_1(nullptr), + conn_DigitalInput_2(nullptr), + conn_DigitalInput_3(nullptr), + conn_DigitalInput_4(nullptr), + conn_DigitalInput_5(nullptr), + conn_DigitalInput_6(nullptr), + conn_DigitalInput_7(nullptr), + conn_DigitalInput_8(nullptr), + conn_DigitalInput_9(nullptr), + conn_DigitalInput_10(nullptr), + conn_DigitalInput_11(nullptr), + conn_DigitalInput_12(nullptr), + conn_DigitalInput_13(nullptr), + conn_DigitalInput_14(nullptr), + conn_DigitalInput_15(nullptr), + conn_DigitalInput_16(nullptr), + conn_QO(this, 0, &var_conn_QO), + conn_STATUS(this, 1, &var_conn_STATUS) { +}; + +void FORTE_Wago1405_6::setInitialValues() { + var_QI = 0_BOOL; + var_DigitalInput_1 = ""_STRING; + var_DigitalInput_2 = ""_STRING; + var_DigitalInput_3 = ""_STRING; + var_DigitalInput_4 = ""_STRING; + var_DigitalInput_5 = ""_STRING; + var_DigitalInput_6 = ""_STRING; + var_DigitalInput_7 = ""_STRING; + var_DigitalInput_8 = ""_STRING; + var_DigitalInput_9 = ""_STRING; + var_DigitalInput_10 = ""_STRING; + var_DigitalInput_11 = ""_STRING; + var_DigitalInput_12 = ""_STRING; + var_DigitalInput_13 = ""_STRING; + var_DigitalInput_14 = ""_STRING; + var_DigitalInput_15 = ""_STRING; + var_DigitalInput_16 = ""_STRING; + var_QO = 0_BOOL; + var_STATUS = u""_WSTRING; +} + +void FORTE_Wago1405_6::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPID: { + readData(1, var_DigitalInput_1, conn_DigitalInput_1); + readData(2, var_DigitalInput_2, conn_DigitalInput_2); + readData(5, var_DigitalInput_5, conn_DigitalInput_5); + readData(3, var_DigitalInput_3, conn_DigitalInput_3); + readData(4, var_DigitalInput_4, conn_DigitalInput_4); + readData(6, var_DigitalInput_6, conn_DigitalInput_6); + readData(7, var_DigitalInput_7, conn_DigitalInput_7); + readData(8, var_DigitalInput_8, conn_DigitalInput_8); + readData(9, var_DigitalInput_9, conn_DigitalInput_9); + readData(10, var_DigitalInput_10, conn_DigitalInput_10); + readData(11, var_DigitalInput_11, conn_DigitalInput_11); + readData(12, var_DigitalInput_12, conn_DigitalInput_12); + readData(13, var_DigitalInput_13, conn_DigitalInput_13); + readData(14, var_DigitalInput_14, conn_DigitalInput_14); + readData(15, var_DigitalInput_15, conn_DigitalInput_15); + readData(16, var_DigitalInput_16, conn_DigitalInput_16); + readData(0, var_QI, conn_QI); + break; + } + default: + break; + } +} + +void FORTE_Wago1405_6::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPOID: { + writeData(0, var_QO, conn_QO); + break; + } + case scmEventINDID: { + writeData(0, var_QO, conn_QO); + writeData(1, var_STATUS, conn_STATUS); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_Wago1405_6::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QI; + case 1: return &var_DigitalInput_1; + case 2: return &var_DigitalInput_2; + case 3: return &var_DigitalInput_3; + case 4: return &var_DigitalInput_4; + case 5: return &var_DigitalInput_5; + case 6: return &var_DigitalInput_6; + case 7: return &var_DigitalInput_7; + case 8: return &var_DigitalInput_8; + case 9: return &var_DigitalInput_9; + case 10: return &var_DigitalInput_10; + case 11: return &var_DigitalInput_11; + case 12: return &var_DigitalInput_12; + case 13: return &var_DigitalInput_13; + case 14: return &var_DigitalInput_14; + case 15: return &var_DigitalInput_15; + case 16: return &var_DigitalInput_16; + } + return nullptr; +} + +CIEC_ANY *FORTE_Wago1405_6::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QO; + case 1: return &var_STATUS; + } + return nullptr; +} + +CEventConnection *FORTE_Wago1405_6::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_MAPO; + case 1: return &conn_IND; + } + return nullptr; +} + +CDataConnection **FORTE_Wago1405_6::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QI; + case 1: return &conn_DigitalInput_1; + case 2: return &conn_DigitalInput_2; + case 3: return &conn_DigitalInput_3; + case 4: return &conn_DigitalInput_4; + case 5: return &conn_DigitalInput_5; + case 6: return &conn_DigitalInput_6; + case 7: return &conn_DigitalInput_7; + case 8: return &conn_DigitalInput_8; + case 9: return &conn_DigitalInput_9; + case 10: return &conn_DigitalInput_10; + case 11: return &conn_DigitalInput_11; + case 12: return &conn_DigitalInput_12; + case 13: return &conn_DigitalInput_13; + case 14: return &conn_DigitalInput_14; + case 15: return &conn_DigitalInput_15; + case 16: return &conn_DigitalInput_16; + } + return nullptr; +} + +CDataConnection *FORTE_Wago1405_6::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QO; + case 1: return &conn_STATUS; + } + return nullptr; +} diff --git a/src/modules/wagokbus/types/Wago1405_6.h b/src/modules/wagokbus/types/Wago1405_6.h new file mode 100644 index 000000000..d3a7b0c51 --- /dev/null +++ b/src/modules/wagokbus/types/Wago1405_6.h @@ -0,0 +1,142 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include "WagoBusAdapter.h" +#include "wagoSlaveBase.h" + +class FORTE_Wago1405_6: public WagoSlaveBase{ + DECLARE_FIRMWARE_FB(FORTE_Wago1405_6) + + public: + FORTE_Wago1405_6(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~FORTE_Wago1405_6() override = default; + + CIEC_BOOL var_QI; + CIEC_STRING var_DigitalInput_1; + CIEC_STRING var_DigitalInput_2; + CIEC_STRING var_DigitalInput_3; + CIEC_STRING var_DigitalInput_4; + CIEC_STRING var_DigitalInput_5; + CIEC_STRING var_DigitalInput_6; + CIEC_STRING var_DigitalInput_7; + CIEC_STRING var_DigitalInput_8; + CIEC_STRING var_DigitalInput_9; + CIEC_STRING var_DigitalInput_10; + CIEC_STRING var_DigitalInput_11; + CIEC_STRING var_DigitalInput_12; + CIEC_STRING var_DigitalInput_13; + CIEC_STRING var_DigitalInput_14; + CIEC_STRING var_DigitalInput_15; + CIEC_STRING var_DigitalInput_16; + + CIEC_BOOL var_QO; + CIEC_WSTRING var_STATUS; + + CIEC_BOOL var_conn_QO; + CIEC_WSTRING var_conn_STATUS; + + CEventConnection conn_MAPO; + CEventConnection conn_IND; + + CDataConnection *conn_QI; + CDataConnection *conn_DigitalInput_1; + CDataConnection *conn_DigitalInput_2; + CDataConnection *conn_DigitalInput_3; + CDataConnection *conn_DigitalInput_4; + CDataConnection *conn_DigitalInput_5; + CDataConnection *conn_DigitalInput_6; + CDataConnection *conn_DigitalInput_7; + CDataConnection *conn_DigitalInput_8; + CDataConnection *conn_DigitalInput_9; + CDataConnection *conn_DigitalInput_10; + CDataConnection *conn_DigitalInput_11; + CDataConnection *conn_DigitalInput_12; + CDataConnection *conn_DigitalInput_13; + CDataConnection *conn_DigitalInput_14; + CDataConnection *conn_DigitalInput_15; + CDataConnection *conn_DigitalInput_16; + + CDataConnection conn_QO; + CDataConnection conn_STATUS; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + FORTE_WagoBusAdapter &var_BusAdapterIn() { + return *static_cast(mAdapters[0]); + }; + + FORTE_WagoBusAdapter &var_BusAdapterOut() { + return *static_cast(mAdapters[1]); + }; + + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_MAP(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalInput_1, const CIEC_STRING &paDigitalInput_2, const CIEC_STRING &paDigitalInput_3, const CIEC_STRING &paDigitalInput_4, const CIEC_STRING &paDigitalInput_5, const CIEC_STRING &paDigitalInput_6, const CIEC_STRING &paDigitalInput_7, const CIEC_STRING &paDigitalInput_8, const CIEC_STRING &paDigitalInput_9, const CIEC_STRING &paDigitalInput_10, const CIEC_STRING &paDigitalInput_11, const CIEC_STRING &paDigitalInput_12, const CIEC_STRING &paDigitalInput_13, const CIEC_STRING &paDigitalInput_14, const CIEC_STRING &paDigitalInput_15, const CIEC_STRING &paDigitalInput_16, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + var_QI = paQI; + var_DigitalInput_1 = paDigitalInput_1; + var_DigitalInput_2 = paDigitalInput_2; + var_DigitalInput_3 = paDigitalInput_3; + var_DigitalInput_4 = paDigitalInput_4; + var_DigitalInput_5 = paDigitalInput_5; + var_DigitalInput_6 = paDigitalInput_6; + var_DigitalInput_7 = paDigitalInput_7; + var_DigitalInput_8 = paDigitalInput_8; + var_DigitalInput_9 = paDigitalInput_9; + var_DigitalInput_10 = paDigitalInput_10; + var_DigitalInput_11 = paDigitalInput_11; + var_DigitalInput_12 = paDigitalInput_12; + var_DigitalInput_13 = paDigitalInput_13; + var_DigitalInput_14 = paDigitalInput_14; + var_DigitalInput_15 = paDigitalInput_15; + var_DigitalInput_16 = paDigitalInput_16; + executeEvent(scmEventMAPID, nullptr); + paQO = var_QO; + paSTATUS = var_STATUS; + } + + void operator()(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalInput_1, const CIEC_STRING &paDigitalInput_2, const CIEC_STRING &paDigitalInput_3, const CIEC_STRING &paDigitalInput_4, const CIEC_STRING &paDigitalInput_5, const CIEC_STRING &paDigitalInput_6, const CIEC_STRING &paDigitalInput_7, const CIEC_STRING &paDigitalInput_8, const CIEC_STRING &paDigitalInput_9, const CIEC_STRING &paDigitalInput_10, const CIEC_STRING &paDigitalInput_11, const CIEC_STRING &paDigitalInput_12, const CIEC_STRING &paDigitalInput_13, const CIEC_STRING &paDigitalInput_14, const CIEC_STRING &paDigitalInput_15, const CIEC_STRING &paDigitalInput_16, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + evt_MAP(paQI, paDigitalInput_1, paDigitalInput_2, paDigitalInput_3, paDigitalInput_4, paDigitalInput_5, paDigitalInput_6, paDigitalInput_7, paDigitalInput_8, paDigitalInput_9, paDigitalInput_10, paDigitalInput_11, paDigitalInput_12, paDigitalInput_13, paDigitalInput_14, paDigitalInput_15, paDigitalInput_16, paQO, paSTATUS); + } + + protected: + + INIT_HANDLES(16, 0, 0, 0) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventMAPID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventMAPOID = 0; + static const TEventID scmEventINDID = 1; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + static const int scmBusAdapterInAdpNum = 0; + static const int scmBusAdapterOutAdpNum = 1; + static const SAdapterInstanceDef scmAdapterInstances[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; +}; diff --git a/src/modules/wagokbus/types/Wago1504_5.cpp b/src/modules/wagokbus/types/Wago1504_5.cpp new file mode 100644 index 000000000..a95b99197 --- /dev/null +++ b/src/modules/wagokbus/types/Wago1504_5.cpp @@ -0,0 +1,200 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING}; +const CStringDictionary::TStringId FORTE_Wago1504_5::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; +const CStringDictionary::TStringId FORTE_Wago1504_5::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; +const TDataIOID FORTE_Wago1504_5::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1504_5::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_Wago1504_5::scmEventInputNames[] = {g_nStringIdMAP}; +const TDataIOID FORTE_Wago1504_5::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1504_5::scmEOWithIndexes[] = {0, 2}; +const CStringDictionary::TStringId FORTE_Wago1504_5::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; +const SAdapterInstanceDef FORTE_Wago1504_5::scmAdapterInstances[] = { + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true}, + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false} +}; +const SFBInterfaceSpec FORTE_Wago1504_5::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 17, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 2, scmAdapterInstances +}; + +FORTE_Wago1504_5::FORTE_Wago1504_5(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + WagoSlaveBase(36866, paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QO(var_QO), + var_conn_STATUS(var_STATUS), + conn_MAPO(this, 0), + conn_IND(this, 1), + conn_QI(nullptr), + conn_DigitalOutput_1(nullptr), + conn_DigitalOutput_2(nullptr), + conn_DigitalOutput_3(nullptr), + conn_DigitalOutput_4(nullptr), + conn_DigitalOutput_5(nullptr), + conn_DigitalOutput_6(nullptr), + conn_DigitalOutput_7(nullptr), + conn_DigitalOutput_8(nullptr), + conn_DigitalOutput_9(nullptr), + conn_DigitalOutput_10(nullptr), + conn_DigitalOutput_11(nullptr), + conn_DigitalOutput_12(nullptr), + conn_DigitalOutput_13(nullptr), + conn_DigitalOutput_14(nullptr), + conn_DigitalOutput_15(nullptr), + conn_DigitalOutput_16(nullptr), + conn_QO(this, 0, &var_conn_QO), + conn_STATUS(this, 1, &var_conn_STATUS) { +}; + +void FORTE_Wago1504_5::setInitialValues() { + var_QI = 0_BOOL; + var_DigitalOutput_1 = ""_STRING; + var_DigitalOutput_2 = ""_STRING; + var_DigitalOutput_3 = ""_STRING; + var_DigitalOutput_4 = ""_STRING; + var_DigitalOutput_5 = ""_STRING; + var_DigitalOutput_6 = ""_STRING; + var_DigitalOutput_7 = ""_STRING; + var_DigitalOutput_8 = ""_STRING; + var_DigitalOutput_9 = ""_STRING; + var_DigitalOutput_10 = ""_STRING; + var_DigitalOutput_11 = ""_STRING; + var_DigitalOutput_12 = ""_STRING; + var_DigitalOutput_13 = ""_STRING; + var_DigitalOutput_14 = ""_STRING; + var_DigitalOutput_15 = ""_STRING; + var_DigitalOutput_16 = ""_STRING; + var_QO = 0_BOOL; + var_STATUS = u""_WSTRING; +} + +void FORTE_Wago1504_5::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPID: { + readData(1, var_DigitalOutput_1, conn_DigitalOutput_1); + readData(2, var_DigitalOutput_2, conn_DigitalOutput_2); + readData(5, var_DigitalOutput_5, conn_DigitalOutput_5); + readData(3, var_DigitalOutput_3, conn_DigitalOutput_3); + readData(4, var_DigitalOutput_4, conn_DigitalOutput_4); + readData(6, var_DigitalOutput_6, conn_DigitalOutput_6); + readData(7, var_DigitalOutput_7, conn_DigitalOutput_7); + readData(8, var_DigitalOutput_8, conn_DigitalOutput_8); + readData(9, var_DigitalOutput_9, conn_DigitalOutput_9); + readData(10, var_DigitalOutput_10, conn_DigitalOutput_10); + readData(11, var_DigitalOutput_11, conn_DigitalOutput_11); + readData(12, var_DigitalOutput_12, conn_DigitalOutput_12); + readData(13, var_DigitalOutput_13, conn_DigitalOutput_13); + readData(14, var_DigitalOutput_14, conn_DigitalOutput_14); + readData(15, var_DigitalOutput_15, conn_DigitalOutput_15); + readData(16, var_DigitalOutput_16, conn_DigitalOutput_16); + readData(0, var_QI, conn_QI); + break; + } + default: + break; + } +} + +void FORTE_Wago1504_5::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPOID: { + writeData(0, var_QO, conn_QO); + break; + } + case scmEventINDID: { + writeData(0, var_QO, conn_QO); + writeData(1, var_STATUS, conn_STATUS); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_Wago1504_5::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QI; + case 1: return &var_DigitalOutput_1; + case 2: return &var_DigitalOutput_2; + case 3: return &var_DigitalOutput_3; + case 4: return &var_DigitalOutput_4; + case 5: return &var_DigitalOutput_5; + case 6: return &var_DigitalOutput_6; + case 7: return &var_DigitalOutput_7; + case 8: return &var_DigitalOutput_8; + case 9: return &var_DigitalOutput_9; + case 10: return &var_DigitalOutput_10; + case 11: return &var_DigitalOutput_11; + case 12: return &var_DigitalOutput_12; + case 13: return &var_DigitalOutput_13; + case 14: return &var_DigitalOutput_14; + case 15: return &var_DigitalOutput_15; + case 16: return &var_DigitalOutput_16; + } + return nullptr; +} + +CIEC_ANY *FORTE_Wago1504_5::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QO; + case 1: return &var_STATUS; + } + return nullptr; +} + +CEventConnection *FORTE_Wago1504_5::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_MAPO; + case 1: return &conn_IND; + } + return nullptr; +} + +CDataConnection **FORTE_Wago1504_5::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QI; + case 1: return &conn_DigitalOutput_1; + case 2: return &conn_DigitalOutput_2; + case 3: return &conn_DigitalOutput_3; + case 4: return &conn_DigitalOutput_4; + case 5: return &conn_DigitalOutput_5; + case 6: return &conn_DigitalOutput_6; + case 7: return &conn_DigitalOutput_7; + case 8: return &conn_DigitalOutput_8; + case 9: return &conn_DigitalOutput_9; + case 10: return &conn_DigitalOutput_10; + case 11: return &conn_DigitalOutput_11; + case 12: return &conn_DigitalOutput_12; + case 13: return &conn_DigitalOutput_13; + case 14: return &conn_DigitalOutput_14; + case 15: return &conn_DigitalOutput_15; + case 16: return &conn_DigitalOutput_16; + } + return nullptr; +} + +CDataConnection *FORTE_Wago1504_5::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QO; + case 1: return &conn_STATUS; + } + return nullptr; +} diff --git a/src/modules/wagokbus/types/Wago1504_5.h b/src/modules/wagokbus/types/Wago1504_5.h new file mode 100644 index 000000000..8c875f64b --- /dev/null +++ b/src/modules/wagokbus/types/Wago1504_5.h @@ -0,0 +1,142 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include "WagoBusAdapter.h" +#include "wagoSlaveBase.h" + +class FORTE_Wago1504_5: public WagoSlaveBase{ + DECLARE_FIRMWARE_FB(FORTE_Wago1504_5) + + public: + FORTE_Wago1504_5(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~FORTE_Wago1504_5() override = default; + + CIEC_BOOL var_QI; + CIEC_STRING var_DigitalOutput_1; + CIEC_STRING var_DigitalOutput_2; + CIEC_STRING var_DigitalOutput_3; + CIEC_STRING var_DigitalOutput_4; + CIEC_STRING var_DigitalOutput_5; + CIEC_STRING var_DigitalOutput_6; + CIEC_STRING var_DigitalOutput_7; + CIEC_STRING var_DigitalOutput_8; + CIEC_STRING var_DigitalOutput_9; + CIEC_STRING var_DigitalOutput_10; + CIEC_STRING var_DigitalOutput_11; + CIEC_STRING var_DigitalOutput_12; + CIEC_STRING var_DigitalOutput_13; + CIEC_STRING var_DigitalOutput_14; + CIEC_STRING var_DigitalOutput_15; + CIEC_STRING var_DigitalOutput_16; + + CIEC_BOOL var_QO; + CIEC_WSTRING var_STATUS; + + CIEC_BOOL var_conn_QO; + CIEC_WSTRING var_conn_STATUS; + + CEventConnection conn_MAPO; + CEventConnection conn_IND; + + CDataConnection *conn_QI; + CDataConnection *conn_DigitalOutput_1; + CDataConnection *conn_DigitalOutput_2; + CDataConnection *conn_DigitalOutput_3; + CDataConnection *conn_DigitalOutput_4; + CDataConnection *conn_DigitalOutput_5; + CDataConnection *conn_DigitalOutput_6; + CDataConnection *conn_DigitalOutput_7; + CDataConnection *conn_DigitalOutput_8; + CDataConnection *conn_DigitalOutput_9; + CDataConnection *conn_DigitalOutput_10; + CDataConnection *conn_DigitalOutput_11; + CDataConnection *conn_DigitalOutput_12; + CDataConnection *conn_DigitalOutput_13; + CDataConnection *conn_DigitalOutput_14; + CDataConnection *conn_DigitalOutput_15; + CDataConnection *conn_DigitalOutput_16; + + CDataConnection conn_QO; + CDataConnection conn_STATUS; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + FORTE_WagoBusAdapter &var_BusAdapterIn() { + return *static_cast(mAdapters[0]); + }; + + FORTE_WagoBusAdapter &var_BusAdapterOut() { + return *static_cast(mAdapters[1]); + }; + + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_MAP(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalOutput_1, const CIEC_STRING &paDigitalOutput_2, const CIEC_STRING &paDigitalOutput_3, const CIEC_STRING &paDigitalOutput_4, const CIEC_STRING &paDigitalOutput_5, const CIEC_STRING &paDigitalOutput_6, const CIEC_STRING &paDigitalOutput_7, const CIEC_STRING &paDigitalOutput_8, const CIEC_STRING &paDigitalOutput_9, const CIEC_STRING &paDigitalOutput_10, const CIEC_STRING &paDigitalOutput_11, const CIEC_STRING &paDigitalOutput_12, const CIEC_STRING &paDigitalOutput_13, const CIEC_STRING &paDigitalOutput_14, const CIEC_STRING &paDigitalOutput_15, const CIEC_STRING &paDigitalOutput_16, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + var_QI = paQI; + var_DigitalOutput_1 = paDigitalOutput_1; + var_DigitalOutput_2 = paDigitalOutput_2; + var_DigitalOutput_3 = paDigitalOutput_3; + var_DigitalOutput_4 = paDigitalOutput_4; + var_DigitalOutput_5 = paDigitalOutput_5; + var_DigitalOutput_6 = paDigitalOutput_6; + var_DigitalOutput_7 = paDigitalOutput_7; + var_DigitalOutput_8 = paDigitalOutput_8; + var_DigitalOutput_9 = paDigitalOutput_9; + var_DigitalOutput_10 = paDigitalOutput_10; + var_DigitalOutput_11 = paDigitalOutput_11; + var_DigitalOutput_12 = paDigitalOutput_12; + var_DigitalOutput_13 = paDigitalOutput_13; + var_DigitalOutput_14 = paDigitalOutput_14; + var_DigitalOutput_15 = paDigitalOutput_15; + var_DigitalOutput_16 = paDigitalOutput_16; + executeEvent(scmEventMAPID, nullptr); + paQO = var_QO; + paSTATUS = var_STATUS; + } + + void operator()(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalOutput_1, const CIEC_STRING &paDigitalOutput_2, const CIEC_STRING &paDigitalOutput_3, const CIEC_STRING &paDigitalOutput_4, const CIEC_STRING &paDigitalOutput_5, const CIEC_STRING &paDigitalOutput_6, const CIEC_STRING &paDigitalOutput_7, const CIEC_STRING &paDigitalOutput_8, const CIEC_STRING &paDigitalOutput_9, const CIEC_STRING &paDigitalOutput_10, const CIEC_STRING &paDigitalOutput_11, const CIEC_STRING &paDigitalOutput_12, const CIEC_STRING &paDigitalOutput_13, const CIEC_STRING &paDigitalOutput_14, const CIEC_STRING &paDigitalOutput_15, const CIEC_STRING &paDigitalOutput_16, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + evt_MAP(paQI, paDigitalOutput_1, paDigitalOutput_2, paDigitalOutput_3, paDigitalOutput_4, paDigitalOutput_5, paDigitalOutput_6, paDigitalOutput_7, paDigitalOutput_8, paDigitalOutput_9, paDigitalOutput_10, paDigitalOutput_11, paDigitalOutput_12, paDigitalOutput_13, paDigitalOutput_14, paDigitalOutput_15, paDigitalOutput_16, paQO, paSTATUS); + } + + protected: + + INIT_HANDLES(0, 16, 0, 0) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventMAPID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventMAPOID = 0; + static const TEventID scmEventINDID = 1; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + static const int scmBusAdapterInAdpNum = 0; + static const int scmBusAdapterOutAdpNum = 1; + static const SAdapterInstanceDef scmAdapterInstances[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; +}; diff --git a/src/modules/wagokbus/types/Wago1506.cpp b/src/modules/wagokbus/types/Wago1506.cpp new file mode 100644 index 000000000..884bd5491 --- /dev/null +++ b/src/modules/wagokbus/types/Wago1506.cpp @@ -0,0 +1,200 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#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::scmDataInputNames[] = {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::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING}; +const CStringDictionary::TStringId FORTE_Wago1506::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; +const CStringDictionary::TStringId FORTE_Wago1506::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; +const TDataIOID FORTE_Wago1506::scmEIWith[] = {1, 2, 5, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1506::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_Wago1506::scmEventInputNames[] = {g_nStringIdMAP}; +const TDataIOID FORTE_Wago1506::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago1506::scmEOWithIndexes[] = {0, 2}; +const CStringDictionary::TStringId FORTE_Wago1506::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; +const SAdapterInstanceDef FORTE_Wago1506::scmAdapterInstances[] = { + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true}, + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false} +}; +const SFBInterfaceSpec FORTE_Wago1506::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 17, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 2, scmAdapterInstances +}; + +FORTE_Wago1506::FORTE_Wago1506(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + WagoSlaveBase(34831, paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QO(var_QO), + var_conn_STATUS(var_STATUS), + conn_MAPO(this, 0), + conn_IND(this, 1), + conn_QI(nullptr), + conn_DigitalInput_1(nullptr), + conn_DigitalInput_2(nullptr), + conn_DigitalInput_3(nullptr), + conn_DigitalInput_4(nullptr), + conn_DigitalInput_5(nullptr), + conn_DigitalInput_6(nullptr), + conn_DigitalInput_7(nullptr), + conn_DigitalInput_8(nullptr), + conn_DigitalOutput_1(nullptr), + conn_DigitalOutput_2(nullptr), + conn_DigitalOutput_3(nullptr), + conn_DigitalOutput_4(nullptr), + conn_DigitalOutput_5(nullptr), + conn_DigitalOutput_6(nullptr), + conn_DigitalOutput_7(nullptr), + conn_DigitalOutput_8(nullptr), + conn_QO(this, 0, &var_conn_QO), + conn_STATUS(this, 1, &var_conn_STATUS) { +}; + +void FORTE_Wago1506::setInitialValues() { + var_QI = 0_BOOL; + var_DigitalInput_1 = ""_STRING; + var_DigitalInput_2 = ""_STRING; + var_DigitalInput_3 = ""_STRING; + var_DigitalInput_4 = ""_STRING; + var_DigitalInput_5 = ""_STRING; + var_DigitalInput_6 = ""_STRING; + var_DigitalInput_7 = ""_STRING; + var_DigitalInput_8 = ""_STRING; + var_DigitalOutput_1 = ""_STRING; + var_DigitalOutput_2 = ""_STRING; + var_DigitalOutput_3 = ""_STRING; + var_DigitalOutput_4 = ""_STRING; + var_DigitalOutput_5 = ""_STRING; + var_DigitalOutput_6 = ""_STRING; + var_DigitalOutput_7 = ""_STRING; + var_DigitalOutput_8 = ""_STRING; + var_QO = 0_BOOL; + var_STATUS = u""_WSTRING; +} + +void FORTE_Wago1506::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPID: { + readData(1, var_DigitalInput_1, conn_DigitalInput_1); + readData(2, var_DigitalInput_2, conn_DigitalInput_2); + readData(5, var_DigitalInput_5, conn_DigitalInput_5); + readData(3, var_DigitalInput_3, conn_DigitalInput_3); + readData(4, var_DigitalInput_4, conn_DigitalInput_4); + readData(6, var_DigitalInput_6, conn_DigitalInput_6); + readData(7, var_DigitalInput_7, conn_DigitalInput_7); + readData(8, var_DigitalInput_8, conn_DigitalInput_8); + readData(9, var_DigitalOutput_1, conn_DigitalOutput_1); + readData(10, var_DigitalOutput_2, conn_DigitalOutput_2); + readData(11, var_DigitalOutput_3, conn_DigitalOutput_3); + readData(12, var_DigitalOutput_4, conn_DigitalOutput_4); + readData(13, var_DigitalOutput_5, conn_DigitalOutput_5); + readData(14, var_DigitalOutput_6, conn_DigitalOutput_6); + readData(15, var_DigitalOutput_7, conn_DigitalOutput_7); + readData(16, var_DigitalOutput_8, conn_DigitalOutput_8); + readData(0, var_QI, conn_QI); + break; + } + default: + break; + } +} + +void FORTE_Wago1506::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPOID: { + writeData(0, var_QO, conn_QO); + break; + } + case scmEventINDID: { + writeData(0, var_QO, conn_QO); + writeData(1, var_STATUS, conn_STATUS); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_Wago1506::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QI; + case 1: return &var_DigitalInput_1; + case 2: return &var_DigitalInput_2; + case 3: return &var_DigitalInput_3; + case 4: return &var_DigitalInput_4; + case 5: return &var_DigitalInput_5; + case 6: return &var_DigitalInput_6; + case 7: return &var_DigitalInput_7; + case 8: return &var_DigitalInput_8; + case 9: return &var_DigitalOutput_1; + case 10: return &var_DigitalOutput_2; + case 11: return &var_DigitalOutput_3; + case 12: return &var_DigitalOutput_4; + case 13: return &var_DigitalOutput_5; + case 14: return &var_DigitalOutput_6; + case 15: return &var_DigitalOutput_7; + case 16: return &var_DigitalOutput_8; + } + return nullptr; +} + +CIEC_ANY *FORTE_Wago1506::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QO; + case 1: return &var_STATUS; + } + return nullptr; +} + +CEventConnection *FORTE_Wago1506::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_MAPO; + case 1: return &conn_IND; + } + return nullptr; +} + +CDataConnection **FORTE_Wago1506::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QI; + case 1: return &conn_DigitalInput_1; + case 2: return &conn_DigitalInput_2; + case 3: return &conn_DigitalInput_3; + case 4: return &conn_DigitalInput_4; + case 5: return &conn_DigitalInput_5; + case 6: return &conn_DigitalInput_6; + case 7: return &conn_DigitalInput_7; + case 8: return &conn_DigitalInput_8; + case 9: return &conn_DigitalOutput_1; + case 10: return &conn_DigitalOutput_2; + case 11: return &conn_DigitalOutput_3; + case 12: return &conn_DigitalOutput_4; + case 13: return &conn_DigitalOutput_5; + case 14: return &conn_DigitalOutput_6; + case 15: return &conn_DigitalOutput_7; + case 16: return &conn_DigitalOutput_8; + } + return nullptr; +} + +CDataConnection *FORTE_Wago1506::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QO; + case 1: return &conn_STATUS; + } + return nullptr; +} diff --git a/src/modules/wagokbus/types/Wago1506.h b/src/modules/wagokbus/types/Wago1506.h new file mode 100644 index 000000000..9c59d9711 --- /dev/null +++ b/src/modules/wagokbus/types/Wago1506.h @@ -0,0 +1,142 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include "WagoBusAdapter.h" +#include "wagoSlaveBase.h" + +class FORTE_Wago1506: public WagoSlaveBase { + DECLARE_FIRMWARE_FB(FORTE_Wago1506) + + public: + FORTE_Wago1506(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~FORTE_Wago1506() override = default; + + CIEC_BOOL var_QI; + CIEC_STRING var_DigitalInput_1; + CIEC_STRING var_DigitalInput_2; + CIEC_STRING var_DigitalInput_3; + CIEC_STRING var_DigitalInput_4; + CIEC_STRING var_DigitalInput_5; + CIEC_STRING var_DigitalInput_6; + CIEC_STRING var_DigitalInput_7; + CIEC_STRING var_DigitalInput_8; + CIEC_STRING var_DigitalOutput_1; + CIEC_STRING var_DigitalOutput_2; + CIEC_STRING var_DigitalOutput_3; + CIEC_STRING var_DigitalOutput_4; + CIEC_STRING var_DigitalOutput_5; + CIEC_STRING var_DigitalOutput_6; + CIEC_STRING var_DigitalOutput_7; + CIEC_STRING var_DigitalOutput_8; + + CIEC_BOOL var_QO; + CIEC_WSTRING var_STATUS; + + CIEC_BOOL var_conn_QO; + CIEC_WSTRING var_conn_STATUS; + + CEventConnection conn_MAPO; + CEventConnection conn_IND; + + CDataConnection *conn_QI; + CDataConnection *conn_DigitalInput_1; + CDataConnection *conn_DigitalInput_2; + CDataConnection *conn_DigitalInput_3; + CDataConnection *conn_DigitalInput_4; + CDataConnection *conn_DigitalInput_5; + CDataConnection *conn_DigitalInput_6; + CDataConnection *conn_DigitalInput_7; + CDataConnection *conn_DigitalInput_8; + CDataConnection *conn_DigitalOutput_1; + CDataConnection *conn_DigitalOutput_2; + CDataConnection *conn_DigitalOutput_3; + CDataConnection *conn_DigitalOutput_4; + CDataConnection *conn_DigitalOutput_5; + CDataConnection *conn_DigitalOutput_6; + CDataConnection *conn_DigitalOutput_7; + CDataConnection *conn_DigitalOutput_8; + + CDataConnection conn_QO; + CDataConnection conn_STATUS; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + FORTE_WagoBusAdapter &var_BusAdapterIn() { + return *static_cast(mAdapters[0]); + }; + + FORTE_WagoBusAdapter &var_BusAdapterOut() { + return *static_cast(mAdapters[1]); + }; + + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_MAP(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalInput_1, const CIEC_STRING &paDigitalInput_2, const CIEC_STRING &paDigitalInput_3, const CIEC_STRING &paDigitalInput_4, const CIEC_STRING &paDigitalInput_5, const CIEC_STRING &paDigitalInput_6, const CIEC_STRING &paDigitalInput_7, const CIEC_STRING &paDigitalInput_8, const CIEC_STRING &paDigitalOutput_1, const CIEC_STRING &paDigitalOutput_2, const CIEC_STRING &paDigitalOutput_3, const CIEC_STRING &paDigitalOutput_4, const CIEC_STRING &paDigitalOutput_5, const CIEC_STRING &paDigitalOutput_6, const CIEC_STRING &paDigitalOutput_7, const CIEC_STRING &paDigitalOutput_8, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + var_QI = paQI; + var_DigitalInput_1 = paDigitalInput_1; + var_DigitalInput_2 = paDigitalInput_2; + var_DigitalInput_3 = paDigitalInput_3; + var_DigitalInput_4 = paDigitalInput_4; + var_DigitalInput_5 = paDigitalInput_5; + var_DigitalInput_6 = paDigitalInput_6; + var_DigitalInput_7 = paDigitalInput_7; + var_DigitalInput_8 = paDigitalInput_8; + var_DigitalOutput_1 = paDigitalOutput_1; + var_DigitalOutput_2 = paDigitalOutput_2; + var_DigitalOutput_3 = paDigitalOutput_3; + var_DigitalOutput_4 = paDigitalOutput_4; + var_DigitalOutput_5 = paDigitalOutput_5; + var_DigitalOutput_6 = paDigitalOutput_6; + var_DigitalOutput_7 = paDigitalOutput_7; + var_DigitalOutput_8 = paDigitalOutput_8; + executeEvent(scmEventMAPID, nullptr); + paQO = var_QO; + paSTATUS = var_STATUS; + } + + void operator()(const CIEC_BOOL &paQI, const CIEC_STRING &paDigitalInput_1, const CIEC_STRING &paDigitalInput_2, const CIEC_STRING &paDigitalInput_3, const CIEC_STRING &paDigitalInput_4, const CIEC_STRING &paDigitalInput_5, const CIEC_STRING &paDigitalInput_6, const CIEC_STRING &paDigitalInput_7, const CIEC_STRING &paDigitalInput_8, const CIEC_STRING &paDigitalOutput_1, const CIEC_STRING &paDigitalOutput_2, const CIEC_STRING &paDigitalOutput_3, const CIEC_STRING &paDigitalOutput_4, const CIEC_STRING &paDigitalOutput_5, const CIEC_STRING &paDigitalOutput_6, const CIEC_STRING &paDigitalOutput_7, const CIEC_STRING &paDigitalOutput_8, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + evt_MAP(paQI, paDigitalInput_1, paDigitalInput_2, paDigitalInput_3, paDigitalInput_4, paDigitalInput_5, paDigitalInput_6, paDigitalInput_7, paDigitalInput_8, paDigitalOutput_1, paDigitalOutput_2, paDigitalOutput_3, paDigitalOutput_4, paDigitalOutput_5, paDigitalOutput_6, paDigitalOutput_7, paDigitalOutput_8, paQO, paSTATUS); + } + + protected: + + INIT_HANDLES(8, 8, 0, 0) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventMAPID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventMAPOID = 0; + static const TEventID scmEventINDID = 1; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + static const int scmBusAdapterInAdpNum = 0; + static const int scmBusAdapterOutAdpNum = 1; + static const SAdapterInstanceDef scmAdapterInstances[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; +}; diff --git a/src/modules/wagokbus/types/Wago459.cpp b/src/modules/wagokbus/types/Wago459.cpp new file mode 100644 index 000000000..a22b7f0c8 --- /dev/null +++ b/src/modules/wagokbus/types/Wago459.cpp @@ -0,0 +1,140 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#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::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdAnalogInput_1, g_nStringIdAnalogInput_2, g_nStringIdAnalogInput_3, g_nStringIdAnalogInput_4}; +const CStringDictionary::TStringId FORTE_Wago459::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING, g_nStringIdSTRING}; +const CStringDictionary::TStringId FORTE_Wago459::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; +const CStringDictionary::TStringId FORTE_Wago459::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; +const TDataIOID FORTE_Wago459::scmEIWith[] = {1, 2, 3, 4, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago459::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_Wago459::scmEventInputNames[] = {g_nStringIdMAP}; +const TDataIOID FORTE_Wago459::scmEOWith[] = {0, scmWithListDelimiter, 0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_Wago459::scmEOWithIndexes[] = {0, 2}; +const CStringDictionary::TStringId FORTE_Wago459::scmEventOutputNames[] = {g_nStringIdMAPO, g_nStringIdIND}; +const SAdapterInstanceDef FORTE_Wago459::scmAdapterInstances[] = { + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true}, + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterIn, false} +}; +const SFBInterfaceSpec FORTE_Wago459::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 5, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 2, scmAdapterInstances +}; + +FORTE_Wago459::FORTE_Wago459(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + WagoSlaveBase(459, paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_conn_QO(var_QO), + var_conn_STATUS(var_STATUS), + conn_MAPO(this, 0), + conn_IND(this, 1), + conn_QI(nullptr), + conn_AnalogInput_1(nullptr), + conn_AnalogInput_2(nullptr), + conn_AnalogInput_3(nullptr), + conn_AnalogInput_4(nullptr), + conn_QO(this, 0, &var_conn_QO), + conn_STATUS(this, 1, &var_conn_STATUS) { +}; + +void FORTE_Wago459::setInitialValues() { + var_QI = 0_BOOL; + var_AnalogInput_1 = ""_STRING; + var_AnalogInput_2 = ""_STRING; + var_AnalogInput_3 = ""_STRING; + var_AnalogInput_4 = ""_STRING; + var_QO = 0_BOOL; + var_STATUS = u""_WSTRING; +} + +void FORTE_Wago459::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPID: { + readData(1, var_AnalogInput_1, conn_AnalogInput_1); + readData(2, var_AnalogInput_2, conn_AnalogInput_2); + readData(3, var_AnalogInput_3, conn_AnalogInput_3); + readData(4, var_AnalogInput_4, conn_AnalogInput_4); + readData(0, var_QI, conn_QI); + break; + } + default: + break; + } +} + +void FORTE_Wago459::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventMAPOID: { + writeData(0, var_QO, conn_QO); + break; + } + case scmEventINDID: { + writeData(0, var_QO, conn_QO); + writeData(1, var_STATUS, conn_STATUS); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_Wago459::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QI; + case 1: return &var_AnalogInput_1; + case 2: return &var_AnalogInput_2; + case 3: return &var_AnalogInput_3; + case 4: return &var_AnalogInput_4; + } + return nullptr; +} + +CIEC_ANY *FORTE_Wago459::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QO; + case 1: return &var_STATUS; + } + return nullptr; +} + +CEventConnection *FORTE_Wago459::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_MAPO; + case 1: return &conn_IND; + } + return nullptr; +} + +CDataConnection **FORTE_Wago459::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QI; + case 1: return &conn_AnalogInput_1; + case 2: return &conn_AnalogInput_2; + case 3: return &conn_AnalogInput_3; + case 4: return &conn_AnalogInput_4; + } + return nullptr; +} + +CDataConnection *FORTE_Wago459::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QO; + case 1: return &conn_STATUS; + } + return nullptr; +} diff --git a/src/modules/wagokbus/types/Wago459.h b/src/modules/wagokbus/types/Wago459.h new file mode 100644 index 000000000..a59665edb --- /dev/null +++ b/src/modules/wagokbus/types/Wago459.h @@ -0,0 +1,106 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include "WagoBusAdapter.h" +#include "wagoSlaveBase.h" + +class FORTE_Wago459: public WagoSlaveBase{ + DECLARE_FIRMWARE_FB(FORTE_Wago459) + + public: + FORTE_Wago459(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~FORTE_Wago459() override = default; + + CIEC_BOOL var_QI; + CIEC_STRING var_AnalogInput_1; + CIEC_STRING var_AnalogInput_2; + CIEC_STRING var_AnalogInput_3; + CIEC_STRING var_AnalogInput_4; + + CIEC_BOOL var_QO; + CIEC_WSTRING var_STATUS; + + CIEC_BOOL var_conn_QO; + CIEC_WSTRING var_conn_STATUS; + + CEventConnection conn_MAPO; + CEventConnection conn_IND; + + CDataConnection *conn_QI; + CDataConnection *conn_AnalogInput_1; + CDataConnection *conn_AnalogInput_2; + CDataConnection *conn_AnalogInput_3; + CDataConnection *conn_AnalogInput_4; + + CDataConnection conn_QO; + CDataConnection conn_STATUS; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + FORTE_WagoBusAdapter &var_BusAdapterIn() { + return *static_cast(mAdapters[0]); + }; + + FORTE_WagoBusAdapter &var_BusAdapterOut() { + return *static_cast(mAdapters[1]); + }; + + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_MAP(const CIEC_BOOL &paQI, const CIEC_STRING &paAnalogInput_1, const CIEC_STRING &paAnalogInput_2, const CIEC_STRING &paAnalogInput_3, const CIEC_STRING &paAnalogInput_4, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + var_QI = paQI; + var_AnalogInput_1 = paAnalogInput_1; + var_AnalogInput_2 = paAnalogInput_2; + var_AnalogInput_3 = paAnalogInput_3; + var_AnalogInput_4 = paAnalogInput_4; + executeEvent(scmEventMAPID, nullptr); + paQO = var_QO; + paSTATUS = var_STATUS; + } + + void operator()(const CIEC_BOOL &paQI, const CIEC_STRING &paAnalogInput_1, const CIEC_STRING &paAnalogInput_2, const CIEC_STRING &paAnalogInput_3, const CIEC_STRING &paAnalogInput_4, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + evt_MAP(paQI, paAnalogInput_1, paAnalogInput_2, paAnalogInput_3, paAnalogInput_4, paQO, paSTATUS); + } + + protected: + + INIT_HANDLES(0, 0, 4, 0) + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventMAPID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventMAPOID = 0; + static const TEventID scmEventINDID = 1; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + static const int scmBusAdapterInAdpNum = 0; + static const int scmBusAdapterOutAdpNum = 1; + static const SAdapterInstanceDef scmAdapterInstances[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; +}; diff --git a/src/modules/wagokbus/types/WagoBusAdapter.cpp b/src/modules/wagokbus/types/WagoBusAdapter.cpp new file mode 100644 index 000000000..26f5eccd7 --- /dev/null +++ b/src/modules/wagokbus/types/WagoBusAdapter.cpp @@ -0,0 +1,95 @@ +/************************************************************************* + * Copyright (c) 2018, 2024 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 + *************************************************************************/ + +#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::scmDataInputNames[] = {g_nStringIdQO}; +const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataInputTypeIds[] = {g_nStringIdBOOL}; +const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataOutputNames[] = {g_nStringIdQI, g_nStringIdMasterId, g_nStringIdIndex}; +const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdUINT, g_nStringIdUINT}; +const TDataIOID FORTE_WagoBusAdapter::scmEIWith[] = {0, scmWithListDelimiter}; +const TForteInt16 FORTE_WagoBusAdapter::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmEventInputNames[] = {g_nStringIdINITO}; +const TDataIOID FORTE_WagoBusAdapter::scmEOWith[] = {2, 1, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_WagoBusAdapter::scmEOWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_WagoBusAdapter::scmEventOutputNames[] = {g_nStringIdINIT}; + +const SFBInterfaceSpec FORTE_WagoBusAdapter::scmFBInterfaceSpecSocket = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmDataInputNames, scmDataInputTypeIds, + 3, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 0, nullptr +}; + +const SFBInterfaceSpec FORTE_WagoBusAdapter::scmFBInterfaceSpecPlug = { + 1, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 3, scmDataOutputNames, scmDataOutputTypeIds, + 1, scmDataInputNames, scmDataInputTypeIds, + 0, nullptr, + 0, nullptr +}; + +void FORTE_WagoBusAdapter::readInputData(const TEventID paEIID) { + if(isSocket()) { + switch(paEIID) { + case scmEventINITOID: { + readData(0, *mDIs[0], mDIConns[0]); + break; + } + default: + break; + } + } else { + switch(paEIID) { + case scmEventINITID: { + readData(2, *mDIs[2], mDIConns[2]); + readData(1, *mDIs[1], mDIConns[1]); + readData(0, *mDIs[0], mDIConns[0]); + break; + } + default: + break; + } + } +} + +void FORTE_WagoBusAdapter::writeOutputData(const TEventID paEIID) { + if(isSocket()) { + switch(paEIID) { + case scmEventINITID: { + writeData(2, *mDOs[2], mDOConns[2]); + writeData(1, *mDOs[1], mDOConns[1]); + writeData(0, *mDOs[0], mDOConns[0]); + break; + } + default: + break; + } + } else { + switch(paEIID) { + case scmEventINITOID: { + writeData(0, *mDOs[0], mDOConns[0]); + break; + } + default: + break; + } + } +} + +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/types/WagoBusAdapter.h similarity index 69% rename from src/modules/wagokbus/modular/types/WagoBusAdapter.h rename to src/modules/wagokbus/types/WagoBusAdapter.h index 209f93fbf..f0670ff27 100644 --- a/src/modules/wagokbus/modular/types/WagoBusAdapter.h +++ b/src/modules/wagokbus/types/WagoBusAdapter.h @@ -1,55 +1,55 @@ /************************************************************************* - *** FORTE Library Element - *** - *** This file was generated using the 4DIAC FORTE Export Filter V1.0.x! - *** - *** Name: WagoBusAdapter - *** Description: - *** Version: + * Copyright (c) 2018, 2024 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 *************************************************************************/ -#ifndef _WAGOBUSADAPTER_H_ -#define _WAGOBUSADAPTER_H_ +#pragma once -#include "../../../../core/io/configFB/io_adapter_multi.h" -#include -#include -#include +#include +#include "adapter.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){ }; + virtual ~FORTE_WagoBusAdapter(){}; static const TForteUInt8 scmSlaveConfigurationIO[]; static const TForteUInt8 scmSlaveConfigurationIONum; - ~FORTE_WagoBusAdapter() override = default; + static const TEventID scmEventINITOID = 0; + static const TEventID scmEventINITID = 0; - CIEC_BOOL &QO(){ + CIEC_BOOL &var_QO() { return *static_cast((isSocket()) ? getDI(0) : getDO(0)); - }; + } - CIEC_BOOL &QI(){ + CIEC_BOOL &var_QI() { return *static_cast((isSocket()) ? getDO(0) : getDI(0)); - }; + } - CIEC_UINT &MasterId(){ + CIEC_UINT &var_MasterId() { return *static_cast((isSocket()) ? getDO(1) : getDI(1)); - }; + } - CIEC_UINT &Index(){ + CIEC_UINT &var_Index() { return *static_cast((isSocket()) ? getDO(2) : getDI(2)); - }; + } - TEventID INITO(){ + TEventID evt_INITO() { return mParentAdapterListEventID + scmEventINITOID; } - TEventID INIT(){ + TEventID evt_INIT() { return mParentAdapterListEventID + scmEventINITID; } @@ -58,23 +58,16 @@ class FORTE_WagoBusAdapter : public forte::core::io::IOConfigFBMultiAdapter { static const CStringDictionary::TStringId scmDataInputTypeIds[]; static const CStringDictionary::TStringId scmDataOutputNames[]; static const CStringDictionary::TStringId scmDataOutputTypeIds[]; - - static const TForteInt16 scmEIWithIndexes[]; static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; static const CStringDictionary::TStringId scmEventInputNames[]; - - static const TForteInt16 scmEOWithIndexes[]; static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; static const CStringDictionary::TStringId scmEventOutputNames[]; static const SFBInterfaceSpec scmFBInterfaceSpecSocket; static const SFBInterfaceSpec scmFBInterfaceSpecPlug; - static const TEventID scmEventINITOID = 0; - static const TEventID scmEventINITID = 0; - - + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; }; - -#endif //close the ifdef sequence from the beginning of the file - diff --git a/src/modules/wagokbus/types/WagoMaster.cpp b/src/modules/wagokbus/types/WagoMaster.cpp new file mode 100644 index 000000000..e44d9ff7e --- /dev/null +++ b/src/modules/wagokbus/types/WagoMaster.cpp @@ -0,0 +1,140 @@ +/************************************************************************* + * Copyright (c) 2018, 2024 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 + *************************************************************************/ + +#include "WagoMaster.h" +#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP +#include "WagoMaster_gen.cpp" +#endif + +#include "../wagoDeviceController.h" + +using namespace forte::core::io; + +DEFINE_FIRMWARE_FB(FORTE_WagoMaster, g_nStringIdWagoMaster) + +const CStringDictionary::TStringId FORTE_WagoMaster::scmDataInputNames[] = {g_nStringIdQI, g_nStringIdUpdateInterval}; +const CStringDictionary::TStringId FORTE_WagoMaster::scmDataInputTypeIds[] = {g_nStringIdBOOL, g_nStringIdUINT}; +const CStringDictionary::TStringId FORTE_WagoMaster::scmDataOutputNames[] = {g_nStringIdQO, g_nStringIdSTATUS}; +const CStringDictionary::TStringId FORTE_WagoMaster::scmDataOutputTypeIds[] = {g_nStringIdBOOL, g_nStringIdWSTRING}; +const TDataIOID FORTE_WagoMaster::scmEIWith[] = {0, 1, scmWithListDelimiter}; +const TForteInt16 FORTE_WagoMaster::scmEIWithIndexes[] = {0}; +const CStringDictionary::TStringId FORTE_WagoMaster::scmEventInputNames[] = {g_nStringIdINIT}; +const TDataIOID FORTE_WagoMaster::scmEOWith[] = {0, 1, scmWithListDelimiter, 1, 0, scmWithListDelimiter}; +const TForteInt16 FORTE_WagoMaster::scmEOWithIndexes[] = {0, 3}; +const CStringDictionary::TStringId FORTE_WagoMaster::scmEventOutputNames[] = {g_nStringIdINITO, g_nStringIdIND}; +const SAdapterInstanceDef FORTE_WagoMaster::scmAdapterInstances[] = { + {g_nStringIdWagoBusAdapter, g_nStringIdBusAdapterOut, true} +}; +const SFBInterfaceSpec FORTE_WagoMaster::scmFBInterfaceSpec = { + 1, scmEventInputNames, scmEIWith, scmEIWithIndexes, + 2, scmEventOutputNames, scmEOWith, scmEOWithIndexes, + 2, scmDataInputNames, scmDataInputTypeIds, + 2, scmDataOutputNames, scmDataOutputTypeIds, + 0, nullptr, + 1, scmAdapterInstances +}; + +FORTE_WagoMaster::FORTE_WagoMaster(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : + IOConfigFBMultiMaster(paContainer, scmFBInterfaceSpec, paInstanceNameId), + var_UpdateInterval(25_UINT), + var_conn_QO(var_QO), + var_conn_STATUS(var_STATUS), + conn_INITO(this, 0), + conn_IND(this, 1), + conn_QI(nullptr), + conn_UpdateInterval(nullptr), + conn_QO(this, 0, &var_conn_QO), + conn_STATUS(this, 1, &var_conn_STATUS) { +}; + +void FORTE_WagoMaster::setInitialValues() { + var_QI = 0_BOOL; + var_UpdateInterval = 25_UINT; + var_QO = 0_BOOL; + var_STATUS = u""_WSTRING; +} + +void FORTE_WagoMaster::setConfig() { + WagoDeviceController::WagoConfig config; + config.updateInterval = static_cast(var_UpdateInterval); + getDeviceController()->setConfig(&config); +} + +forte::core::io::IODeviceController* FORTE_WagoMaster::createDeviceController(CDeviceExecution& paDeviceExecution) { + return new WagoDeviceController(paDeviceExecution); +} + +void FORTE_WagoMaster::readInputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventINITID: { + readData(0, var_QI, conn_QI); + readData(1, var_UpdateInterval, conn_UpdateInterval); + break; + } + default: + break; + } +} + +void FORTE_WagoMaster::writeOutputData(const TEventID paEIID) { + switch(paEIID) { + case scmEventINITOID: { + writeData(0, var_QO, conn_QO); + writeData(1, var_STATUS, conn_STATUS); + break; + } + case scmEventINDID: { + writeData(1, var_STATUS, conn_STATUS); + writeData(0, var_QO, conn_QO); + break; + } + default: + break; + } +} + +CIEC_ANY *FORTE_WagoMaster::getDI(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QI; + case 1: return &var_UpdateInterval; + } + return nullptr; +} + +CIEC_ANY *FORTE_WagoMaster::getDO(const size_t paIndex) { + switch(paIndex) { + case 0: return &var_QO; + case 1: return &var_STATUS; + } + return nullptr; +} + +CEventConnection *FORTE_WagoMaster::getEOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_INITO; + case 1: return &conn_IND; + } + return nullptr; +} + +CDataConnection **FORTE_WagoMaster::getDIConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QI; + case 1: return &conn_UpdateInterval; + } + return nullptr; +} + +CDataConnection *FORTE_WagoMaster::getDOConUnchecked(const TPortId paIndex) { + switch(paIndex) { + case 0: return &conn_QO; + case 1: return &conn_STATUS; + } + return nullptr; +} diff --git a/src/modules/wagokbus/types/WagoMaster.h b/src/modules/wagokbus/types/WagoMaster.h new file mode 100644 index 000000000..d287973b7 --- /dev/null +++ b/src/modules/wagokbus/types/WagoMaster.h @@ -0,0 +1,88 @@ +/************************************************************************* + * Copyright (c) 2018, 2024 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 + *************************************************************************/ + +#pragma once + +#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: + FORTE_WagoMaster(CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + ~FORTE_WagoMaster() override = default; + + CIEC_BOOL var_QI; + CIEC_UINT var_UpdateInterval; + + CIEC_BOOL var_QO; + CIEC_WSTRING var_STATUS; + + CIEC_BOOL var_conn_QO; + CIEC_WSTRING var_conn_STATUS; + + CEventConnection conn_INITO; + CEventConnection conn_IND; + + CDataConnection *conn_QI; + CDataConnection *conn_UpdateInterval; + + CDataConnection conn_QO; + CDataConnection conn_STATUS; + + CIEC_ANY *getDI(size_t) override; + CIEC_ANY *getDO(size_t) override; + FORTE_WagoBusAdapter &var_BusAdapterOut() { + return *static_cast(mAdapters[0]); + }; + + CEventConnection *getEOConUnchecked(TPortId) override; + CDataConnection **getDIConUnchecked(TPortId) override; + CDataConnection *getDOConUnchecked(TPortId) override; + + void evt_INIT(const CIEC_BOOL &paQI, const CIEC_UINT &paUpdateInterval, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + var_QI = paQI; + var_UpdateInterval = paUpdateInterval; + executeEvent(scmEventINITID, nullptr); + paQO = var_QO; + paSTATUS = var_STATUS; + } + + void operator()(const CIEC_BOOL &paQI, const CIEC_UINT &paUpdateInterval, CIEC_BOOL &paQO, CIEC_WSTRING &paSTATUS) { + evt_INIT(paQI, paUpdateInterval, paQO, paSTATUS); + } + + private: + static const CStringDictionary::TStringId scmDataInputNames[]; + static const CStringDictionary::TStringId scmDataInputTypeIds[]; + static const CStringDictionary::TStringId scmDataOutputNames[]; + static const CStringDictionary::TStringId scmDataOutputTypeIds[]; + static const TEventID scmEventINITID = 0; + static const TDataIOID scmEIWith[]; + static const TForteInt16 scmEIWithIndexes[]; + static const CStringDictionary::TStringId scmEventInputNames[]; + static const TEventID scmEventINITOID = 0; + static const TEventID scmEventINDID = 1; + static const TDataIOID scmEOWith[]; + static const TForteInt16 scmEOWithIndexes[]; + static const CStringDictionary::TStringId scmEventOutputNames[]; + static const int scmBusAdapterOutAdpNum = 0; + static const SAdapterInstanceDef scmAdapterInstances[]; + + static const SFBInterfaceSpec scmFBInterfaceSpec; + + void readInputData(TEventID paEIID) override; + void writeOutputData(TEventID paEIID) override; + void setInitialValues() override; + + forte::core::io::IODeviceController* createDeviceController(CDeviceExecution& paDeviceExecution); + void setConfig(); +}; diff --git a/src/modules/wagokbus/types/wagoSlaveBase.cpp b/src/modules/wagokbus/types/wagoSlaveBase.cpp new file mode 100644 index 000000000..97d28e1fd --- /dev/null +++ b/src/modules/wagokbus/types/wagoSlaveBase.cpp @@ -0,0 +1,54 @@ +/************************************************************************* + * Copyright (c) 2016, 2024 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 + *************************************************************************/ + +#include "wagoSlaveBase.h" +#include "../wagoDeviceController.h" + +using namespace forte::core::io; + +const TForteUInt8 WagoSlaveBase::scmSlaveConfigurationIO[] = { }; +const TForteUInt8 WagoSlaveBase::scmSlaveConfigurationIONum = 0; + +WagoSlaveBase::WagoSlaveBase(int paType, forte::core::CFBContainer &paContainer, const SFBInterfaceSpec& paInterfaceSpec, const CStringDictionary::TStringId paInstanceNameId) : + IOConfigFBMultiSlave(scmSlaveConfigurationIO, scmSlaveConfigurationIONum, paType, paContainer, paInterfaceSpec, paInstanceNameId) { +} + +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(static_cast(getDI(offset + i))->getStorage(), + IOMapper::In, mIndex, CIEC_ANY::e_BOOL, static_cast(i)); + initHandle(desc); + } + + offset += paNumberOfBoolInputs; + + for(size_t i = 0; i < paNumberOfBoolOutputs; i++) { + WagoDeviceController::WagoHandleDescriptor desc(static_cast(getDI(offset + i))->getStorage(), + IOMapper::Out, mIndex, CIEC_ANY::e_BOOL, static_cast(i)); + initHandle(desc); + } + + offset += paNumberOfBoolOutputs; + + for(size_t i = 0; i < paNumberOfAnalogInputs; i++) { + WagoDeviceController::WagoHandleDescriptor desc(static_cast(getDI(offset + i))->getStorage(), + IOMapper::In, mIndex, CIEC_ANY::e_WORD, static_cast(i)); + initHandle(desc); + } + + offset += paNumberOfAnalogInputs; + + for(size_t i = 0; i < paNumberOfAnalogOutputs; i++) { + WagoDeviceController::WagoHandleDescriptor desc(static_cast(getDI(offset + i))->getStorage(), + IOMapper::Out, mIndex, CIEC_ANY::e_WORD, static_cast(i)); + initHandle(desc); + } +} diff --git a/src/modules/wagokbus/modular/types/wagoSlaveBase.h b/src/modules/wagokbus/types/wagoSlaveBase.h similarity index 69% rename from src/modules/wagokbus/modular/types/wagoSlaveBase.h rename to src/modules/wagokbus/types/wagoSlaveBase.h index 7bbebfbff..d03a21f4c 100644 --- a/src/modules/wagokbus/modular/types/wagoSlaveBase.h +++ b/src/modules/wagokbus/types/wagoSlaveBase.h @@ -1,16 +1,13 @@ /************************************************************************* - *** 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 - + * Copyright (c) 2016, 2024 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 *************************************************************************/ -#ifndef SRC_MODULES_WAGOKBUS_MODULAR_TYPES_WAGOSLAVEBASE_H_ -#define SRC_MODULES_WAGOKBUS_MODULAR_TYPES_WAGOSLAVEBASE_H_ +#pragma once #include "../../../../core/io/configFB/io_slave_multi.h" @@ -18,7 +15,7 @@ fbclass(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : \ WagoSlaveBase(type, paContainer, scmFBInterfaceSpec, paInstanceNameId) -#define INIT_HANLDLES(noOfBoolInputs, noOfBoolOutputs, noOfAnalogInputs, noOfAnalogOutputs) \ +#define INIT_HANDLES(noOfBoolInputs, noOfBoolOutputs, noOfAnalogInputs, noOfAnalogOutputs) \ void initHandles() override {initHandlesBase(noOfBoolInputs, noOfBoolOutputs, noOfAnalogInputs, noOfAnalogOutputs);}; class WagoSlaveBase : public forte::core::io::IOConfigFBMultiSlave { @@ -39,5 +36,3 @@ class WagoSlaveBase : public forte::core::io::IOConfigFBMultiSlave { 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/wagoDeviceController.cpp similarity index 96% rename from src/modules/wagokbus/modular/wagoDeviceController.cpp rename to src/modules/wagokbus/wagoDeviceController.cpp index 617d8b2ba..281452526 100644 --- a/src/modules/wagokbus/modular/wagoDeviceController.cpp +++ b/src/modules/wagokbus/wagoDeviceController.cpp @@ -1,5 +1,5 @@ /************************************************************************* - * Copyright (c) 2018 fortiss GmbH + * Copyright (c) 2018, 2024 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. @@ -68,15 +68,15 @@ const char* WagoDeviceController::init() { 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)) { + if(DAL_SUCCESS != mAppDevInterface->OpenDevice(mKBusDeviceId)) { DEVLOG_ERROR("[WagoDeviceController] %s \n", scmFailedToOpenKBusDevice); return scmFailedToOpenKBusDevice; } - - return loadTerminalInformation(); } } + loadTerminalInformation(); + for(size_t i = 0; i < mTerminalCount; i++) { DEVLOG_INFO("[WagoDeviceController] Found device with ID: %d\n", mTerminalIds[i]); } @@ -85,8 +85,7 @@ const char* WagoDeviceController::init() { } forte::core::io::IOHandle* WagoDeviceController::createIOHandle(forte::core::io::IODeviceController::HandleDescriptor &paHandleDescriptor) { - WagoHandleDescriptor &desc = *static_cast(paHandleDescriptor); - + WagoHandleDescriptor &desc(static_cast(paHandleDescriptor)); TForteUInt32 outputOffset; TForteUInt32 inputOffset; switch(desc.mType){ diff --git a/src/modules/wagokbus/modular/wagoDeviceController.h b/src/modules/wagokbus/wagoDeviceController.h similarity index 95% rename from src/modules/wagokbus/modular/wagoDeviceController.h rename to src/modules/wagokbus/wagoDeviceController.h index ef79c0123..00d282a7a 100644 --- a/src/modules/wagokbus/modular/wagoDeviceController.h +++ b/src/modules/wagokbus/wagoDeviceController.h @@ -1,5 +1,5 @@ /************************************************************************* - * Copyright (c) 2018 fortiss GmbH + * Copyright (c) 2018, 2024 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. @@ -38,7 +38,7 @@ class WagoDeviceController : public forte::core::io::IODeviceMultiController { CIEC_ANY::EDataTypeID mType; TForteUInt32 mChannel; - WagoHandleDescriptor(CIEC_WSTRING const &paId, forte::core::io::IOMapper::Direction paDirection, int paSlaveIndex, CIEC_ANY::EDataTypeID paType, + WagoHandleDescriptor(std::string 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) { } diff --git a/src/modules/wagokbus/modular/wagoHandle.cpp b/src/modules/wagokbus/wagoHandle.cpp similarity index 93% rename from src/modules/wagokbus/modular/wagoHandle.cpp rename to src/modules/wagokbus/wagoHandle.cpp index 271023159..a7168fb0c 100644 --- a/src/modules/wagokbus/modular/wagoHandle.cpp +++ b/src/modules/wagokbus/wagoHandle.cpp @@ -1,5 +1,5 @@ /************************************************************************* - * Copyright (c) 2018 fortiss GmbH + * Copyright (c) 2018, 2024 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. @@ -84,21 +84,20 @@ bool WagoHandle::check() { } void WagoHandle::dropObserver() { - CIEC_WORD state = 0; //should work for boolean too - set(state); + set(CIEC_WORD(0)); forte::core::io::IOHandle::dropObserver(); } void WagoHandle::getBoolean(CIEC_BOOL &paState) { bool inDataBool = false; mAppDevInterface->ReadBool(mKBusDeviceId, mTaskId, mInputOffset, &inDataBool); - paState = inDataBool; + paState = CIEC_BOOL(inDataBool); } void WagoHandle::getWord(CIEC_WORD &paState) { TForteByte inDataWord[2]; mAppDevInterface->ReadBytes(mKBusDeviceId, mTaskId, mInputOffset, 2, inDataWord); - paState = static_cast((static_cast(inDataWord[1]) << 8) + (static_cast(inDataWord[0]))); + paState = CIEC_WORD((inDataWord[1] << 8) + inDataWord[0]); } void WagoHandle::setBoolean(const CIEC_BOOL &paState) { diff --git a/src/modules/wagokbus/modular/wagoHandle.h b/src/modules/wagokbus/wagoHandle.h similarity index 97% rename from src/modules/wagokbus/modular/wagoHandle.h rename to src/modules/wagokbus/wagoHandle.h index 834280390..a459fd388 100644 --- a/src/modules/wagokbus/modular/wagoHandle.h +++ b/src/modules/wagokbus/wagoHandle.h @@ -1,5 +1,5 @@ /************************************************************************* - * Copyright (c) 2018 fortiss GmbH + * Copyright (c) 2018, 2024 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. diff --git a/src/stdfblib/net/GEN_CLIENT_fbt.h b/src/stdfblib/net/GEN_CLIENT_fbt.h index 2711ed0aa..948466f6d 100644 --- a/src/stdfblib/net/GEN_CLIENT_fbt.h +++ b/src/stdfblib/net/GEN_CLIENT_fbt.h @@ -1,5 +1,7 @@ /******************************************************************************* - * Copyright (c) 2006 - 2011 ACIN, Profactor GmbH + * Copyright (c) 2006, 2024 ACIN, Profactor GmbH + * Martin Erich Jobst + * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -9,6 +11,8 @@ * Contributors: * Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Martin Melik Merkumians * - initial API and implementation and/or initial documentation + * Martin Erich Jobst + * - add generic event accessors *******************************************************************************/ #ifndef _GEN_CLIENT_H_ #define _GEN_CLIENT_H_ @@ -22,10 +26,29 @@ class GEN_CLIENT : public forte::com_infra::CCommFB { DECLARE_GENERIC_FIRMWARE_FB(GEN_CLIENT) -public: - GEN_CLIENT(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_CLIENT() override = default; + public: + GEN_CLIENT(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + ~GEN_CLIENT() override = default; + + template + void evt_INIT(Args &&...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmEventINITID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void evt_REQ(Args &&...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmSendNotificationEventID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + template + void operator()(Args &&...paArgs) { + evt_INIT(std::forward(paArgs)...); + } }; #endif //_GEN_CLIENT_H_ diff --git a/src/stdfblib/net/GEN_PUBLISH_fbt.h b/src/stdfblib/net/GEN_PUBLISH_fbt.h index bafcc736a..fc9dcfc93 100644 --- a/src/stdfblib/net/GEN_PUBLISH_fbt.h +++ b/src/stdfblib/net/GEN_PUBLISH_fbt.h @@ -1,5 +1,7 @@ /******************************************************************************* - * Copyright (c) 2006 - 2011 ACIN, Profactor GmbH + * Copyright (c) 2006, 2024 ACIN, Profactor GmbH + * Martin Erich Jobst + * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -9,6 +11,8 @@ * Contributors: * Alois Zoitl, Rene Smodic, Gerhard Ebenhofer, Martin Melik Merkumians * - initial API and implementation and/or initial documentation + * Martin Erich Jobst + * - add generic event accessors *******************************************************************************/ #ifndef _GEN_PUBLISH_H_ #define _GEN_PUBLISH_H_ @@ -19,11 +23,31 @@ */ class GEN_PUBLISH : public forte::com_infra::CCommFB { -DECLARE_GENERIC_FIRMWARE_FB(GEN_PUBLISH) + DECLARE_GENERIC_FIRMWARE_FB(GEN_PUBLISH) + + public: + GEN_PUBLISH(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + + ~GEN_PUBLISH() override = default; + + template + void evt_INIT(Args&& ...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmEventINITID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void evt_REQ(Args&& ...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmSendNotificationEventID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } -public: - GEN_PUBLISH(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_PUBLISH() override = default; + template + void operator()(Args&& ...paArgs) { + evt_INIT(std::forward(paArgs)...); + } }; #endif //_GEN_PUBLISH_H_ diff --git a/src/stdfblib/net/GEN_SERVER_fbt.h b/src/stdfblib/net/GEN_SERVER_fbt.h index 93dbc586d..c4e9d60fe 100644 --- a/src/stdfblib/net/GEN_SERVER_fbt.h +++ b/src/stdfblib/net/GEN_SERVER_fbt.h @@ -1,5 +1,7 @@ /******************************************************************************* - * Copyright (c) 2006 - 2011 ACIN, Profactor GmbH + * Copyright (c) 2006, 2024 ACIN, Profactor GmbH + * Martin Erich Jobst + * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -9,6 +11,8 @@ * Contributors: * Rene Smodic, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians * - initial API and implementation and/or initial documentation + * Martin Erich Jobst + * - add generic event accessors *******************************************************************************/ #ifndef _GEN_SERVER_H_ #define _GEN_SERVER_H_ @@ -19,12 +23,31 @@ * */ -class GEN_SERVER: public forte::com_infra::CCommFB { - DECLARE_GENERIC_FIRMWARE_FB(GEN_SERVER) +class GEN_SERVER : public forte::com_infra::CCommFB { + DECLARE_GENERIC_FIRMWARE_FB(GEN_SERVER) public: GEN_SERVER(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~GEN_SERVER() override = default; + template + void evt_INIT(Args &&...paArgs) { + writeArguments(std::forward(paArgs)...); // write all arguments to get type information + receiveInputEvent(scmEventINITID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void evt_RSP(Args &&...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmSendNotificationEventID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void operator()(Args &&...paArgs) { + evt_INIT(std::forward(paArgs)...); + } }; #endif //_GEN_SERVER_H_ diff --git a/src/stdfblib/net/GEN_SUBSCRIBE_fbt.h b/src/stdfblib/net/GEN_SUBSCRIBE_fbt.h index 34aa84c31..9dc46488f 100644 --- a/src/stdfblib/net/GEN_SUBSCRIBE_fbt.h +++ b/src/stdfblib/net/GEN_SUBSCRIBE_fbt.h @@ -1,5 +1,7 @@ /******************************************************************************* - * Copyright (c) 2006 - 2011 ACIN, Profactor GmbH + * Copyright (c) 2006, 2024 ACIN, Profactor GmbH + * Martin Erich Jobst + * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -9,6 +11,8 @@ * Contributors: * Rene Smodic, Alois Zoitl, Gerhard Ebenhofer, Martin Melik Merkumians * - initial API and implementation and/or initial documentation + * Martin Erich Jobst + * - add generic event accessors *******************************************************************************/ #ifndef _GEN_SUBSCRIBE_H_ #define _GEN_SUBSCRIBE_H_ @@ -20,12 +24,31 @@ class GEN_SUBSCRIBE : public forte::com_infra::CCommFB { - DECLARE_GENERIC_FIRMWARE_FB(GEN_SUBSCRIBE) + DECLARE_GENERIC_FIRMWARE_FB(GEN_SUBSCRIBE) public: GEN_SUBSCRIBE(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); + ~GEN_SUBSCRIBE() override = default; + template + void evt_INIT(Args &&...paArgs) { + writeArguments(std::forward(paArgs)...); // write all arguments to get type information + receiveInputEvent(scmEventINITID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void evt_RSP(Args &&...paArgs) { + writeInputArguments(std::forward(paArgs)...); + receiveInputEvent(scmSendNotificationEventID, nullptr); + readOutputArguments(std::forward(paArgs)...); + } + + template + void operator()(Args &&...paArgs) { + evt_INIT(std::forward(paArgs)...); + } }; #endif //_GEN_SUBSCRIBE_H_ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 880e895c0..897f35e71 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2011 - 2018 ACIN, nxtControl, Profactor GmbH, fortiss GmbH +# Copyright (c) 2011 - 2024 ACIN, nxtControl, Profactor GmbH, fortiss GmbH, Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -55,6 +55,12 @@ FUNCTION(forte_test_add_inc_system_directories) ENDFOREACH(ARG) ENDFUNCTION(forte_test_add_inc_system_directories) +FUNCTION(forte_test_add_link_library) + FOREACH(ARG ${ARGV}) + SET_PROPERTY(GLOBAL APPEND PROPERTY FORTE_TEST_LIBRARIES ${ARG}) + ENDFOREACH(ARG) +ENDFUNCTION(forte_test_add_link_library) + ####################################################################################### # add subdirectories ####################################################################################### @@ -105,8 +111,8 @@ FILE(WRITE ${CMAKE_BINARY_DIR}/file_test_list.txt "${WRITE_FILE}") # Create Exe File ####################################################################################### -ADD_EXECUTABLE(forte_test $ ${SOURCE_H} ${SOURCE_CPP}) -target_compile_features(forte_test PRIVATE cxx_std_17) +ADD_EXECUTABLE(forte_test ${SOURCE_H} ${SOURCE_CPP}) +target_link_libraries(forte_test FORTE_LITE) ####################################################################################### # Add definitions @@ -116,7 +122,6 @@ GET_PROPERTY(DEFINITION GLOBAL PROPERTY FORTE_DEFINITION) add_definitions(${DEFINITION}) #using target_compile_definitions put the definitions at the beginning giving problems sometimes because cmake adds -O3. if("${FORTE_ARCHITECTURE}" STREQUAL "Posix") - ADD_DEFINITIONS (-DBOOST_TEST_DYN_LINK) if(FORTE_LINK_STATIC) set_target_properties(forte_test PROPERTIES LINK_SEARCH_START_STATIC ON) set_target_properties(forte_test PROPERTIES LINK_SEARCH_END_STATIC ON) @@ -132,18 +137,10 @@ if("${FORTE_ARCHITECTURE}" STREQUAL "Win32") endif() endif("${FORTE_ARCHITECTURE}" STREQUAL "Win32") -add_dependencies(forte_test FORTE_LITE) add_dependencies(forte_test forte_stringlist_generator) SET_TARGET_PROPERTIES(forte_test PROPERTIES LINKER_LANGUAGE CXX) -get_target_property(existing_link_flags_test forte_test LINK_FLAGS) -if(existing_link_flags_test) - set_property(GLOBAL APPEND PROPERTY FORTE_TEST_LINK_FLAGS ${existing_link_flags_test}) -endif() - -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) @@ -175,16 +172,8 @@ endif(ENABLE_GENERATED_SOURCE_CPP) forte_test_add_inc_system_directories(${FORTE_TESTS_INC_DIRS}) forte_test_add_inc_system_directories(./) -GET_PROPERTY(INCLUDE_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_DIRECTORIES) GET_PROPERTY(FORTE_TEST_INC GLOBAL PROPERTY FORTE_TEST_INC_DIRECTORIES) - -LIST(APPEND INCLUDE_DIRECTORIES ${FORTE_TEST_INC}) - -LIST(LENGTH INCLUDE_DIRECTORIES len) -IF(len GREATER 0) - LIST(REMOVE_DUPLICATES INCLUDE_DIRECTORIES) - LIST(REVERSE INCLUDE_DIRECTORIES) # bugfix, for replaced include files -ENDIF(len GREATER 0) +target_include_directories(forte_test PUBLIC ${FORTE_TEST_INC}) GET_PROPERTY(INCLUDE_SYSTEM_DIRECTORIES GLOBAL PROPERTY FORTE_INCLUDE_SYSTEM_DIRECTORIES) GET_PROPERTY(INCLUDE_TEST_SYSTEM_DIRECTORIES GLOBAL PROPERTY FORTE_TEST_INC_SYSTEM_DIRECTORIES) @@ -196,19 +185,67 @@ IF(len GREATER 0) LIST(REVERSE INCLUDE_TEST_SYSTEM_DIRECTORIES) # bugfix, for replaced include files ENDIF(len GREATER 0) -target_include_directories(forte_test PUBLIC ${INCLUDE_DIRECTORIES}) INCLUDE_DIRECTORIES(SYSTEM ${INCLUDE_TEST_SYSTEM_DIRECTORIES}) ####################################################################################### -# Link Libraries to the Executeable +# Link Libraries to the Executable ####################################################################################### #Link flags -get_property(LINK_TEST_LIBRARY GLOBAL PROPERTY FORTE_LINK_LIBRARY) +get_property(LINK_TEST_LIBRARY GLOBAL PROPERTY FORTE_TEST_LIBRARIES) +TARGET_LINK_LIBRARIES(forte_test ${LINK_TEST_LIBRARY}) -if("${FORTE_ARCHITECTURE}" STREQUAL "Posix") - SET_PROPERTY(GLOBAL APPEND PROPERTY LINK_TEST_LIBRARY "-lboost_unit_test_framework -lboost_prg_exec_monitor -lboost_test_exec_monitor") -endif("${FORTE_ARCHITECTURE}" STREQUAL "Posix") +####################################################################################### +# Link Libraries to the C Interface Executable +####################################################################################### -TARGET_LINK_LIBRARIES(forte_test ${LINK_TEST_LIBRARY}) +if(FORTE_C_INTERFACE) + if(FORTE_BUILD_STATIC_LIBRARY) + SET(FORTE_C_STATIC_TEST_NAME "forte_c_static_test") + + ADD_EXECUTABLE(${FORTE_C_STATIC_TEST_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/arch/forte_c_test.cpp) + TARGET_LINK_LIBRARIES(${FORTE_C_STATIC_TEST_NAME} forte-c-static ${LINK_TEST_LIBRARY}) + target_include_directories(${FORTE_C_STATIC_TEST_NAME} PRIVATE ${FORTE_TEST_INC}) + SET_TARGET_PROPERTIES(${FORTE_C_STATIC_TEST_NAME} PROPERTIES LINKER_LANGUAGE CXX) + + add_test(${FORTE_C_STATIC_TEST_NAME} ${EXECUTABLE_OUTPUT_PATH}/${FORTE_C_STATIC_TEST_NAME}) + endif(FORTE_BUILD_STATIC_LIBRARY) + + # Currently not working in windows + if(FORTE_BUILD_SHARED_LIBRARY AND NOT WIN32) + SET(FORTE_C_SHARED_TEST_NAME "forte_c_shared_test") + + ADD_EXECUTABLE(${FORTE_C_SHARED_TEST_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/arch/forte_c_test.cpp) + TARGET_LINK_LIBRARIES(${FORTE_C_SHARED_TEST_NAME} forte-c-shared ${LINK_TEST_LIBRARY}) + target_include_directories(${FORTE_C_SHARED_TEST_NAME} PRIVATE ${FORTE_TEST_INC}) + SET_TARGET_PROPERTIES(${FORTE_C_STATIC_TEST_NAME} PROPERTIES LINKER_LANGUAGE CXX) + + add_test(${FORTE_C_SHARED_TEST_NAME} ${EXECUTABLE_OUTPUT_PATH}/${FORTE_C_SHARED_TEST_NAME}) + endif(FORTE_BUILD_SHARED_LIBRARY AND NOT WIN32) +endif(FORTE_C_INTERFACE) + +####################################################################################### +# Test if main can link to forte-static +####################################################################################### +if(FORTE_BUILD_STATIC_LIBRARY) + SET(TEST_FORTE_STATIC "forte_test_static") + GET_PROPERTY(SOURCE_EXECUTABLE_CPP GLOBAL PROPERTY FORTE_EXECUTABLE_CPP) + add_executable (${TEST_FORTE_STATIC} ${SOURCE_EXECUTABLE_CPP}) + target_include_directories(${TEST_FORTE_STATIC} PRIVATE ${INCLUDE_DIRECTORIES}) + target_link_libraries (${TEST_FORTE_STATIC} forte-static) + add_dependencies (${TEST_FORTE_STATIC} forte-static) +endif(FORTE_BUILD_STATIC_LIBRARY) + +####################################################################################### +# Test if main can link to forte-shared +####################################################################################### +# Currently not working in windows +if(FORTE_BUILD_SHARED_LIBRARY AND NOT WIN32) + SET(TEST_FORTE_SHARED "forte_test_shared") + GET_PROPERTY(SOURCE_EXECUTABLE_CPP GLOBAL PROPERTY FORTE_EXECUTABLE_CPP) + add_executable (${TEST_FORTE_SHARED} ${SOURCE_EXECUTABLE_CPP}) + target_include_directories(${TEST_FORTE_SHARED} PRIVATE ${INCLUDE_DIRECTORIES}) + target_link_libraries (${TEST_FORTE_SHARED} forte-shared) + add_dependencies (${TEST_FORTE_SHARED} forte-shared) +endif(FORTE_BUILD_SHARED_LIBRARY AND NOT WIN32) \ No newline at end of file diff --git a/tests/arch/forte_c_test.cpp b/tests/arch/forte_c_test.cpp new file mode 100644 index 000000000..79a7a956f --- /dev/null +++ b/tests/arch/forte_c_test.cpp @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2024 Jose Cabral + * This program and the accompanying materials are made available under the + * terms of the 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 + *******************************************************************************/ +#define BOOST_TEST_MODULE FORTE_C_TEST +#include + +#include "../../src/arch/c_interface/forte_c.h" + +#include +#include + +BOOST_AUTO_TEST_CASE(forte_c_interface) +{ + TForteInstance instance{nullptr}; + + // forteStartInstance + // invalid instance result + BOOST_TEST(forteStartInstance(61499, nullptr) == FORTE_WRONG_PARAMETERS); + + // invalid port number, greater than maximum 65535 + BOOST_TEST(forteStartInstance(65536, &instance) == FORTE_WRONG_PARAMETERS); + + char executable[] = "forte"; + char ipPortFlag[] = "-c"; + + int validArgc = 1; + char* validArgV[] = {executable}; + + // invalid ipPort address and parameter + { + int argc = 3; + char invalidAddress[] = "localhost"; + char* argv[] = {executable, ipPortFlag, invalidAddress}; + BOOST_TEST(forteStartInstanceGeneric(argc, argv, nullptr) == FORTE_WRONG_PARAMETERS); + + char nonExistingParameter[] = "--unknown"; + char* argv2[] = {executable, nonExistingParameter}; + BOOST_TEST(forteStartInstanceGeneric(argc, argv2, nullptr) == FORTE_WRONG_PARAMETERS); + } + + // architecture not initialized + { + BOOST_TEST(forteStartInstanceGeneric(validArgc, validArgV, &instance) == FORTE_ARCHITECTURE_NOT_READY); + } + + // valid case and invalid case based on an existing running device + { + BOOST_TEST(forteGlobalInitialize(validArgc, validArgV) == 0); + + // double initialization of the architecture should not fail + BOOST_TEST(forteGlobalInitialize(validArgc, validArgV) == 0); + + BOOST_TEST(forteStartInstanceGeneric(validArgc, validArgV, &instance) == FORTE_OK); + + // try starting on already started device + BOOST_TEST(forteStartInstanceGeneric(validArgc, validArgV, &instance) == FORTE_DEVICE_ALREADY_STARTED); + + // another instance on same port + TForteInstance instance2{nullptr}; + + // stopping non runnning instance should no crash + forteRequestStopInstance(instance2); + forteWaitForInstanceToStop(instance2); + + // let it sleep for some time to since if too fast, the stopping signal + // comes too early + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + + // stop running instance + forteRequestStopInstance(instance); + forteWaitForInstanceToStop(instance); + + BOOST_TEST(forteGlobalDeinitialize() == 0); + + // double de-initialization of the architecture should not fail + BOOST_TEST(forteGlobalDeinitialize() == 0); + } +} + diff --git a/tests/core/trace/CMakeLists.txt b/tests/core/trace/CMakeLists.txt index 26b86bcb0..3f741132b 100644 --- a/tests/core/trace/CMakeLists.txt +++ b/tests/core/trace/CMakeLists.txt @@ -1,5 +1,5 @@ #******************************************************************************* -# Copyright (c) 2024 +# Copyright (c) 2024 Jose Cabral # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # http://www.eclipse.org/legal/epl-2.0. @@ -24,7 +24,7 @@ if(FORTE_TRACE_CTF_TEST) forte_test_add_sourcefile_cpp(TraceReaderSink.cpp) forte_test_add_sourcefile_cpp(EventMessage.cpp) - forte_add_link_library(babeltrace2) + forte_test_add_link_library(babeltrace2) SET(CTF_OUTPUT_DIR ${CMAKE_BINARY_DIR}/ctfOutput) SET(METADATA_FILE ${CMAKE_BINARY_DIR}/src/core/trace/metadata) diff --git a/tests/core/trace/ctfTracerTest.cpp b/tests/core/trace/ctfTracerTest.cpp index a1c5918b3..680566805 100644 --- a/tests/core/trace/ctfTracerTest.cpp +++ b/tests/core/trace/ctfTracerTest.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 fotiss GmbH + * Copyright (c) 2024 Jose Cabral * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. @@ -16,6 +16,7 @@ #include #include +#include "forte_boost_output_support.h" #include "../stdfblib/ita/EMB_RES.h" #include "config.h" #include "ctfTracerTest_gen.cpp" @@ -77,8 +78,7 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { command.mFirstParam.pushBack(g_nStringIdCOLD); command.mSecondParam.pushBack(counterInstanceName); command.mSecondParam.pushBack(g_nStringIdCU); - - BOOST_CHECK(EMGMResponse::Ready == resource.executeMGMCommand(command)); + BOOST_TEST(EMGMResponse::Ready == resource.executeMGMCommand(command)); BOOST_TEST_INFO("Event connection: Counter.CUO -> Switch.EI"); command.mFirstParam.clear(); @@ -87,7 +87,7 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { command.mSecondParam.clear(); command.mSecondParam.pushBack(switchInstanceName); command.mSecondParam.pushBack(g_nStringIdEI); - BOOST_CHECK(EMGMResponse::Ready == resource.executeMGMCommand(command)); + BOOST_TEST(EMGMResponse::Ready == resource.executeMGMCommand(command)); BOOST_TEST_INFO("Data connection: Counter.Q -> Switch.G "); command.mFirstParam.clear(); @@ -96,13 +96,13 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { command.mSecondParam.clear(); command.mSecondParam.pushBack(switchInstanceName); command.mSecondParam.pushBack(g_nStringIdG); - BOOST_CHECK(EMGMResponse::Ready == resource.executeMGMCommand(command)); + BOOST_TEST(EMGMResponse::Ready == resource.executeMGMCommand(command)); BOOST_TEST_INFO(" Data constant value: Counter.PV = 1"); command.mFirstParam.clear(); command.mFirstParam.pushBack(counterInstanceName); command.mFirstParam.pushBack(g_nStringIdPV); - BOOST_CHECK(EMGMResponse::Ready == resource.writeValue(command.mFirstParam, "1", false)); + BOOST_TEST(EMGMResponse::Ready == resource.writeValue(command.mFirstParam, "1", false)); BOOST_TEST_INFO("Event connection: Switch.EO1 -> Counter.R "); command.mFirstParam.clear(); @@ -111,7 +111,7 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { command.mSecondParam.clear(); command.mSecondParam.pushBack(counterInstanceName); command.mSecondParam.pushBack(g_nStringIdR); - BOOST_CHECK(EMGMResponse::Ready == resource.executeMGMCommand(command)); + BOOST_TEST(EMGMResponse::Ready == resource.executeMGMCommand(command)); device.startDevice(); // wait for all events to be triggered @@ -150,7 +150,7 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { auto ctfMessages = getEventMessages(CTF_OUTPUT_DIR); BOOST_TEST_INFO("Expected vs traced: Same size "); - BOOST_CHECK_EQUAL(ctfMessages.size(), expectedMessages.size()); + BOOST_TEST(ctfMessages.size() == expectedMessages.size()); // although vectors can be check directly, this granularity helps debugging in case some message is different for(size_t i = 0; i < expectedMessages.size(); i++ ){ @@ -160,7 +160,7 @@ BOOST_AUTO_TEST_CASE(sequential_events_test) { // add extra event to check that the comparison fails expectedMessages.emplace_back("sendOutputEvent", std::make_unique("E_RESTART", "START", 2),0); - BOOST_CHECK(ctfMessages != expectedMessages); + BOOST_TEST(ctfMessages != expectedMessages); } BOOST_AUTO_TEST_SUITE_END()