This is a fork of open62541, https://github.com/open62541/open62541

Stasik0 33f5aa86c1 one more try to get -m32 (rel #149) 10 years ago
cmake a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 years ago
doc 8ee327ac44 add introduction to UA to documentation. reset doxygen style until a more complete reskin is ready 10 years ago
examples 4d6801478a remove most compiler warnings on msvc 10 years ago
include a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 years ago
ports d118257529 fix WAGO port 10 years ago
src dd51da4cd7 reducing number of ifdefs relates #148 10 years ago
tests a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 years ago
tools 4d6801478a remove most compiler warnings on msvc 10 years ago
.gitignore 9f6a679802 updated gitignore 10 years ago
.travis.yml 33f5aa86c1 one more try to get -m32 (rel #149) 10 years ago
AUTHORS c495d9b248 Update AUTHORS 10 years ago
CMakeLists.txt 4d6801478a remove most compiler warnings on msvc 10 years ago
LICENSE 9310d323c9 changed .gitignore again 11 years ago
LICENSE-CC0 f8265df738 clean up include structure 10 years ago
README.md a845547e44 Update README.md 10 years ago

README.md

open62541

open62541 (http://open62541.org) is an open-source implementation of OPC UA (OPC Unified Architecture) licensed under LGPL + static linking exception. The open62541 library can be used to build a dedicated OPC UA server or to integrate OPC UA-based communication into existing applications.

The project is in an early stage but already usable. See below for a simple server implemenation that provides access to a single variable.

Ohloh Project Status Build Status Coverage Status Coverity Scan Build Status

Documentation

A general introduction to OPC UA and the open62541 documentation can be found at http://open62541.org/doc. Build instruction are here: https://github.com/acplt/open62541/wiki/Building-open62541.

For discussion and help, you can use

Contribute to open62541

As an open source project, we invite new contributors to help improving open6241. If you are a developer, your bugfixes and new features are very welcome. Note that there are ways to contribute even without deep knowledge of the project or the UA standard:

Example Server Implementation

#include <stdio.h>
#include <signal.h>

// provided by the open62541 lib
#include "ua_server.h"
#include "ua_namespace_0.h"

// provided by the user, implementations available in the /examples folder
#include "logger_stdout.h"
#include "networklayer_tcp.h"

#define WORKER_THREADS 2 /* if multithreading is enabled */
#define PORT 16664

UA_Boolean running = UA_TRUE;
void signalHandler(int sign) {
	running = UA_FALSE;
}

int main(int argc, char** argv) {
    /* catch ctrl-c */
	signal(SIGINT, signalHandler);

    /* init the server */
	UA_Server *server = UA_Server_new();
    NetworklayerTCP *nl = NetworkLayerTCP_new(UA_ConnectionConfig_standard, PORT);
    UA_Server_addNetworkLayer(server, nl);

    /* add a variable node */
    UA_Int32 myInteger = 42;
    UA_String myIntegerName;
    UA_STRING_STATIC(myIntegerName, "The Answer");
    UA_Server_addScalarVariableNode(server,
                 /* the browse name, the value, and the datatype vtable */
                 &myIntegerName, (void*)&myInteger, &UA_TYPES[UA_INT32],
                 /* the parent node of the variable */
                 &UA_NODEIDS[UA_OBJECTSFOLDER],
                 /* the (hierarchical) referencetype from the parent */
                 &UA_NODEIDS[UA_ORGANIZES]);

    /* run the server loop */
    UA_StatusCode retval = UA_Server_run(server, WORKER_THREADS, &running);
	UA_Server_delete(server);
	return retval;
}