mirror of
https://github.com/open62541/open62541.git
synced 2026-10-29 05:11:36 +08:00
this is a first prototype of a server that which namespace is created from a nodeset XML file automatically
@ichrispa @FlorianPalm @jpfr relates to #303
This commit is contained in:
+18
-1
@@ -1,4 +1,5 @@
|
||||
include_directories(${PROJECT_SOURCE_DIR}/include)
|
||||
include_directories(${PROJECT_BINARY_DIR}/src_generated)
|
||||
|
||||
set(LIBS open62541)
|
||||
if(NOT WIN32)
|
||||
@@ -16,7 +17,23 @@ target_link_libraries(server_variable ${LIBS})
|
||||
add_executable(server_repeated_job server_repeated_job.c)
|
||||
target_link_libraries(server_repeated_job ${LIBS})
|
||||
|
||||
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src_generated/nodeset.h ${PROJECT_BINARY_DIR}/src_generated/nodeset.c
|
||||
PRE_BUILD
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py -i ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt ${PROJECT_SOURCE_DIR}/tools/schema/namespace0/Opc.Ua.NodeSet2.xml ${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml ${PROJECT_BINARY_DIR}/src_generated/nodeset
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/tools/pyUANamespace/generate_open62541CCode.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/logger.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/open62541_MacroHelper.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_builtin_types.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_constants.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_namespace.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/ua_node_types.py
|
||||
${PROJECT_SOURCE_DIR}/tools/pyUANamespace/NodeID_Blacklist_FullNS0.txt
|
||||
${PROJECT_SOURCE_DIR}/examples/server_nodeset.xml)
|
||||
|
||||
add_executable(server_nodeset server_nodeset.c ${PROJECT_BINARY_DIR}/src_generated/nodeset.c)
|
||||
target_link_libraries(server_nodeset ${LIBS})
|
||||
|
||||
if(ENABLE_METHODCALLS)
|
||||
add_executable(server_method server_method.c)
|
||||
target_link_libraries(server_method ${LIBS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
|
||||
* See http://creativecommons.org/publicdomain/zero/1.0/ for more information.
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef UA_NO_AMALGAMATION
|
||||
# include "ua_types.h"
|
||||
# include "ua_server.h"
|
||||
# include "logger_stdout.h"
|
||||
# include "networklayer_tcp.h"
|
||||
#else
|
||||
# include "open62541.h"
|
||||
#endif
|
||||
|
||||
/* files nodeset.h and nodeset.c are created from server_nodeset.xml in the /src_generated directory by CMake */
|
||||
#include "nodeset.h"
|
||||
|
||||
UA_Boolean running = UA_TRUE;
|
||||
UA_Logger logger;
|
||||
|
||||
static void stopHandler(int sign) {
|
||||
UA_LOG_INFO(logger, UA_LOGCATEGORY_SERVER, "received ctrl-c");
|
||||
running = 0;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
signal(SIGINT, stopHandler); /* catches ctrl-c */
|
||||
|
||||
/* initialize the server */
|
||||
UA_Server *server = UA_Server_new(UA_ServerConfig_standard);
|
||||
logger = Logger_Stdout_new();
|
||||
UA_Server_setLogger(server, logger);
|
||||
UA_Server_addNetworkLayer(server, ServerNetworkLayerTCP_new(UA_ConnectionConfig_standard, 16664));
|
||||
|
||||
/* create nodes from nodeset */
|
||||
nodeset(server);
|
||||
|
||||
/* start server */
|
||||
UA_StatusCode retval = UA_Server_run(server, 1, &running); //blocks until running=false
|
||||
|
||||
/* ctrl-c received -> clean up */
|
||||
UA_Server_delete(server);
|
||||
return retval;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:s1="http://yourorganisation.org/test/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<NamespaceUris>
|
||||
<Uri>http://yourorganisation.org/test/</Uri>
|
||||
</NamespaceUris>
|
||||
<Aliases>
|
||||
<Alias Alias="Double">i=11</Alias>
|
||||
<Alias Alias="Organizes">i=35</Alias>
|
||||
<Alias Alias="HasModellingRule">i=37</Alias>
|
||||
<Alias Alias="HasTypeDefinition">i=40</Alias>
|
||||
<Alias Alias="HasSubtype">i=45</Alias>
|
||||
<Alias Alias="HasComponent">i=47</Alias>
|
||||
</Aliases>
|
||||
<UAObjectType NodeId="ns=1;i=1001" BrowseName="1:testType">
|
||||
<DisplayName>testType</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
|
||||
<Reference ReferenceType="HasComponent">ns=1;i=6001</Reference>
|
||||
</References>
|
||||
</UAObjectType>
|
||||
<UAVariable DataType="Double" ParentNodeId="ns=1;i=1001" NodeId="ns=1;i=6001" BrowseName="1:Var1" UserAccessLevel="3" AccessLevel="3">
|
||||
<DisplayName>Var1</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
|
||||
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
||||
<Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=1001</Reference>
|
||||
</References>
|
||||
</UAVariable>
|
||||
<UAObject NodeId="ns=1;i=5001" BrowseName="1:testInstance">
|
||||
<DisplayName>testInstance</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">ns=1;i=1001</Reference>
|
||||
<Reference ReferenceType="HasComponent">ns=1;i=6002</Reference>
|
||||
</References>
|
||||
</UAObject>
|
||||
<UAVariable DataType="Double" ParentNodeId="ns=1;i=5001" NodeId="ns=1;i=6002" BrowseName="1:Var1" UserAccessLevel="3" AccessLevel="3">
|
||||
<DisplayName>Var1</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=63</Reference>
|
||||
<Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=5001</Reference>
|
||||
</References>
|
||||
</UAVariable>
|
||||
</UANodeSet>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user