#################### # Nodeset Examples # #################### ################### # Custom XML # ################### set(FILE_CSV_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset) set(FILE_BSD_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset) set(FILE_NS_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset) if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) # needed or cmake doesn't recognize dependencies of generated files set(PROJECT_BINARY_DIR ${CMAKE_BINARY_DIR}) endif() # generate namespace from XML file if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) ua_generate_nodeset_and_datatypes( NAME "example" FILE_NS "${FILE_NS_DIRPREFIX}/server_nodeset.xml" DEPENDS "${CMAKE_SOURCE_DIR}/tools/schema/Opc.Ua.NodeSet2.Minimal.xml" ) else() # standalone examples build expects already installed Opc.Ua.NodeSet2.Minimal.xml ua_generate_nodeset_and_datatypes( NAME "example" FILE_NS "${FILE_NS_DIRPREFIX}/server_nodeset.xml" ) endif() # The .csv file can be created from within UaModeler or manually ua_generate_nodeid_header( NAME "example_nodeids" ID_PREFIX "EXAMPLE_NS" TARGET_SUFFIX "ids_example" FILE_CSV "${FILE_CSV_DIRPREFIX}/server_nodeset.csv" ) add_example(server_nodeset server_nodeset.c ${UA_NODESET_EXAMPLE_SOURCES} ${PROJECT_BINARY_DIR}/src_generated/open62541/example_nodeids.h) if(UA_NAMESPACE_ZERO STREQUAL "FULL") ua_generate_nodeset_and_datatypes( NAME "testnodeset" FILE_CSV "${FILE_CSV_DIRPREFIX}/testnodeset.csv" FILE_BSD "${FILE_BSD_DIRPREFIX}/testtypes.bsd" NAMESPACE_IDX 2 FILE_NS "${FILE_NS_DIRPREFIX}/testnodeset.xml" INTERNAL ) add_example(server_testnodeset server_testnodeset.c ${UA_NODESET_TESTNODESET_SOURCES} ${UA_TYPES_TESTNODESET_SOURCES}) add_dependencies(server_testnodeset open62541-generator-ns-testnodeset) endif() ################### # PLCopen Nodeset # ################### if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) set(FILE_CSV_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset) set(FILE_BSD_PLCOPEN_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset) set(FILE_BSD_POWERLINK_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset) set(FILE_NS_DIRPREFIX ${CMAKE_SOURCE_DIR}/deps/ua-nodeset) else() set(FILE_CSV_DIRPREFIX ${UA_NODESET_DIR}) set(FILE_BSD_PLCOPEN_DIRPREFIX ${UA_NODESET_DIR}) set(FILE_BSD_POWERLINK_DIRPREFIX ${PROJECT_SOURCE_DIR}/nodeset) set(FILE_NS_DIRPREFIX ${UA_NODESET_DIR}) endif() # PLCopen requires the full ns0 as basis if(UA_NAMESPACE_ZERO STREQUAL "FULL") # Generate types and namespace for DI ua_generate_nodeset_and_datatypes( NAME "di" FILE_CSV "${FILE_CSV_DIRPREFIX}/DI/OpcUaDiModel.csv" FILE_BSD "${FILE_BSD_PLCOPEN_DIRPREFIX}/DI/Opc.Ua.Di.Types.bsd" NAMESPACE_IDX 2 FILE_NS "${FILE_NS_DIRPREFIX}/DI/Opc.Ua.Di.NodeSet2.xml" INTERNAL ) # generate PLCopen namespace which is using DI ua_generate_nodeset_and_datatypes( NAME "plc" # PLCopen does not define custom types. Only generate the nodeset FILE_NS "${FILE_NS_DIRPREFIX}/PLCopen/Opc.Ua.Plc.NodeSet2.xml" # PLCopen depends on the di nodeset, which must be generated before DEPENDS "di" INTERNAL ) add_example(server_nodeset_plcopen server_nodeset_plcopen.c ${UA_NODESET_DI_SOURCES} ${UA_NODESET_PLC_SOURCES} ${UA_TYPES_DI_SOURCES} ${UA_TYPES_PLC_SOURCES}) add_dependencies(server_nodeset_plcopen open62541-generator-ns-plc) endif() # POWERLINK requires the full ns0 as basis if(UA_NAMESPACE_ZERO STREQUAL "FULL") # generate powerlink namespace which is using DI ua_generate_nodeset_and_datatypes( NAME "powerlink" FILE_CSV "${FILE_CSV_DIRPREFIX}/POWERLINK/Opc.Ua.POWERLINK.NodeIds.csv" FILE_BSD "${FILE_BSD_POWERLINK_DIRPREFIX}/Opc.Ua.POWERLINK.NodeSet2.bsd" NAMESPACE_IDX 3 FILE_NS "${FILE_NS_DIRPREFIX}/POWERLINK/Opc.Ua.POWERLINK.NodeSet2.xml" # POWERLINK depends on the di nodeset, which must be generated before DEPENDS "di" INTERNAL ) add_example(server_nodeset_powerlink server_nodeset_powerlink.c ${UA_NODESET_DI_SOURCES} ${UA_NODESET_POWERLINK_SOURCES} ${UA_TYPES_DI_SOURCES} ${UA_TYPES_POWERLINK_SOURCES}) add_dependencies(server_nodeset_powerlink open62541-generator-ns-powerlink) endif()