CDP's fork of the open62541 OPC UA stack (https://github.com/open62541/open62541)

Julius Pfrommer a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
cmake a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
doc 8ee327ac44 add introduction to UA to documentation. reset doxygen style until a more complete reskin is ready 10 rokov pred
examples a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
include a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
ports 80f57754c7 fixing patch 10 rokov pred
src a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
tests a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
tools a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
.gitignore 9f6a679802 updated gitignore 10 rokov pred
.travis.yml 5c710f99cb + Added an automatically check for the applicabililty of the patches 10 rokov pred
AUTHORS c495d9b248 Update AUTHORS 10 rokov pred
CMakeLists.txt a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred
LICENSE 9310d323c9 changed .gitignore again 11 rokov pred
LICENSE-CC0 f8265df738 clean up include structure 10 rokov pred
README.md a457f31c0f worker threads for multithreading, use UA_malloc instead of UA_alloc 10 rokov pred

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

If open62541 is not fit for your needs, have a look at some other open source OPC UA implementations. Or even better, help us improving open62541 by sending bug reports/bugfixes on github or the mailing list!

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;
}