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

FlorianPalm 9f6a679802 updated gitignore 9 years ago
cmake d5cc1d3bb9 async networking with libuv 9 years ago
doc cfcb1a3bb6 authors and include dir in doxygen 9 years ago
examples e9a23554c8 fiexd tests 9 years ago
include 82a92dbb05 Merge remote-tracking branch 'origin/master' into external_datasource 9 years ago
src e9a23554c8 fiexd tests 9 years ago
tests e9a23554c8 fiexd tests 9 years ago
tools 0d7e0e5468 make the server struct opaque for userspace and 9 years ago
.gitignore 9f6a679802 updated gitignore 9 years ago
.travis.yml 68ffb9b52c fix a travis bug 9 years ago
AUTHORS c495d9b248 Update AUTHORS 9 years ago
CMakeLists.txt 82a92dbb05 Merge remote-tracking branch 'origin/master' into external_datasource 9 years ago
LICENSE 9310d323c9 changed .gitignore again 10 years ago
LICENSE-CC0 f8265df738 clean up include structure 9 years ago
Makefile e9a23554c8 fiexd tests 9 years ago
README.md e4a17a343f adjust line-length of example (one last time) 9 years ago

README.md

open62541

An open-source communication stack implementation of OPC UA (OPC Unified Architecture) licensed under LGPL + static linking exception.

Ohloh Project Status Build Status Coverage Status Coverity Scan Build Status

What is currently working?

The project is in an early stage. We retain the right to break APIs until a first stable release.

  • Binary serialization of all data types: 100%
  • Node storage and setup of a minimal namespace zero: 100%
  • Standard OPC UA Clients can connect/open a SecureChannel/open a Session: 100%
  • Browsing/reading and writing attributes: 100%
  • Advanced SecureChannel and Session Management: 75%

Documentation

Documentation is generated from Doxygen annotations in the source code. The current version can be accessed at http://open62541.org/doxygen/.

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"

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

void serverCallback(UA_Server *server) {
    // add your maintenance functionality here
    printf("does whatever servers do\n");
}

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

    /* init the server */
	#define PORT 16664
	UA_String endpointUrl;
	UA_String_copyprintf("opc.tcp://127.0.0.1:%i", &endpointUrl, PORT);
	UA_Server *server = UA_Server_new(&endpointUrl, NULL);

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

    /* attach a network layer */
	NetworklayerTCP* nl = NetworklayerTCP_new(UA_ConnectionConfig_standard, PORT);
	printf("Server started, connect to to opc.tcp://127.0.0.1:%i\n", PORT);

    /* run the server loop */
	struct timeval callback_interval = {1, 0}; // 1 second
	NetworkLayerTCP_run(nl, server, callback_interval, serverCallback, &running);
    
    /* clean up */
	NetworklayerTCP_delete(nl);
	UA_Server_delete(server);
    UA_String_deleteMembers(&endpointUrl);
	return 0;
}

Build Procedure

Ubuntu

Install build infrastructure

sudo apt-get install git build-essential gcc cmake python python-lxml
Notes on older systems e.g. 12.04 LTS
  • Manual install of check framework 0.9.10 (symptoms like "error: implicit declaration of function ‘ck_assert_ptr_eq’") bash wget http://security.ubuntu.com/ubuntu/pool/main/c/check/check_0.9.10-6ubuntu3_amd64.deb sudo dpkg -i check_0.9.10-6ubuntu3_amd64.deb or for i386 bash wget http://security.ubuntu.com/ubuntu/pool/main/c/check/check_0.9.10-6ubuntu3_i386.deb sudo dpkg -i check_0.9.10-6ubuntu3_386.deb
  • Manuall install of gcc-4.8 (symptoms like "error: initialization discards ‘const’ qualifier from pointer target type [-Werror]") bash sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update; sudo apt-get install gcc-4.8 sudo update-alternatives --remove-all gcc sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20 sudo update-alternatives --config gcc

Build

git clone https://github.com/acplt/open62541.git
cd open62541
mkdir build
cmake .. # generate the build scripts
# Optionally create an Eclipse project: cmake -G "Eclipse CDT4 - Unix Makefiles" .. 
make # creates executables in the build directory

# enable additional features
sudo apt-get install libexpat1-dev # for XML-encoding
sudo apt-get install liburcu-dev # for multithreading
sudo apt-get install check # for unit tests
sudo apt-get install graphviz doxygen # for documentation generation

ccmake .. # to select features for compilation. Use "cmake-gui .." for more eye-candy
make
make test # unit tests
make doc # generate documentation

Windows (Visual Studio)

Windows (MinGW)

  • Execute the same steps as in the Visual Studio case. But instead of installing Visual Studio, get and install MinGW:
  • The cmake command changes to Batchfile <path-to>\cmake.exe .. -G "MinGW Makefiles"
  • Then run (still in the build folder) Batchfile <path-to>\mingw32-make.exe

Install pkg-config (for CMake)