Open Source C++ OPC-UA Server and Client Library
Switch branches/tags
Clone or download
Jokymon and mdcb #292 Update travis.yml to current CI environment
Remove specific installation for GCC-4.8 and repository for Boost-1.54

These are all available in the current travis environment
Latest commit 18e5a08 Jan 26, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
debian Fix Debian build. Oct 2, 2017
include/opc Merge pull request #291 from FreeOpcUa/rsa-oaep Dec 12, 2017
python cleanup autoreconf autogenerated files Nov 3, 2017
schemas reduce stack impact of initialisation Oct 2, 2017
src Merge pull request #291 from FreeOpcUa/rsa-oaep Dec 12, 2017
tests URI CanParseFullURIWithUserAndPassword test added Dec 6, 2017
.gitignore .gitignore updated to ignore QtCreator helper files Dec 6, 2017
.travis.yml #292 Update travis.yml to current CI environment Jan 27, 2018
AUTHORS merge Nov 9, 2014
CMakeLists.txt Merge pull request #291 from FreeOpcUa/rsa-oaep Dec 12, 2017
COPYING New sources structure. Jun 22, 2014
ChangeLog New sources structure. Jun 22, 2014
Dockerfile Adds a dockerfile Jul 3, 2015
Makefile.am debug errors with linux compilation Nov 3, 2017
NEWS New sources structure. Jun 22, 2014
README.md Consistent C++ styling (#243) May 30, 2017
StatusCodes.csv Node ids are generated. Updated standard address space to have predef… Nov 14, 2014
astylerc Consistent C++ styling (#243) May 30, 2017
autogen.sh merge Aug 7, 2014
build.sh Refactored headers. There were repitition in names: sunscriptions.h a… Aug 10, 2014
configure.ac cleanup autoreconf autogenerated files Nov 3, 2017
debian.soft New sources structure. Jun 22, 2014
libopcuaclient.pc.in Add Cflags lines to .pc.in files Sep 25, 2015
libopcuacore.pc.in Add Cflags lines to .pc.in files Sep 25, 2015
libopcuaprotocol.pc.in Add Cflags lines to .pc.in files Sep 25, 2015
libopcuaserver.pc.in Add Cflags lines to .pc.in files Sep 25, 2015
make_deb.sh New sources structure. Jun 22, 2014
restyle Consistent C++ styling (#243) May 30, 2017

README.md

Open Source C++ OPC-UA Server and Client Library

Build Status

LGPL OPC-UA server and client library written in C++ and with a lot of code auto-generated from xml specification using python.

Python bindings can be found in the python directory.

code: https://github.com/FreeOpcUa/freeopcua
website: http://freeopcua.github.io/
mailing list: https://groups.google.com/forum/#!forum/freeopcua

Currently supported:

  • read, write, browse
  • translateBrowsePathToNodeId
  • DataChange Events
  • Events
  • Subscriptions
  • complete opc-ua address space generated from xml specification
  • Method call from client
  • Linux and Windows(VS13) support

Work in progress

  • StatusChange Events
  • Filtering
  • Documentation
  • Automatic generation of binary protocol from OPC schema files
    • Methods on server side

Not implemented yet (patches are welcome)

  • History
  • Security: Authentication, Certificates handling, ..

Usage

Documentation is sparse but several examples are availables:

C++ examples in https://github.com/FreeOpcUa/freeopcua/tree/master/src/examples
Python examples in https://github.com/FreeOpcUa/freeopcua/tree/master/python/src
https://github.com/FreeOpcUa/freeopcua/blob/master/python/tests/test_highlevel.py can also be a usefull source of information

Example minimal client in python

  client = opcua.Client(False)
  client.connect("opc.tcp://10.10.10.4:4841/OPCUA/AnyServer/")

  objects = client.get_objects_node()
  print("Children of objects are: ", objects.get_children())

  var = objects.get_child(["3:AnObject", "AVariable"])
  print("Value of variable is: ", var.get_value())
  
  client.disconnect()

Tested clients and servers with default settings

  • uaexperts client application
  • node-opcua (client and server tested)
  • ignition server
  • Beckhoff PLC (seems to be some issues, but mostly working)
  • ignition open-source sdk (server tested)
  • quickopc client sdk
  • prosysopc demo client
  • prosysopc demo server
  • unified automation sdk (client and server tested)

Installation

An environment supporting c++11 is necessary: gcc-4.8+, clang 3.4 or VS2013

Ubuntu (Debians)

There is a script debian.soft in the root for installing all required soft to build all repositories.

Using GNU autotools

autoreconf -f -i
./configure --prefix=/path/to/server
make 
make check
make install
cd /path/to/server
LD_LIBRARY_PATH=./lib ./bin/opcuaserver

Using cmake

Linux

mkdir build
cd build
cmake ..
make
make test

Windows

Boost and libxml2 are necessary

rem compiling
mkdir build
cd build
cmake .. -DBOOST_ROOT=c:\boost_1_56
cmake --build
ctest -C Debug
cd bin\Debug
example_server.exe

Docker

docker build .

Developement

C++ style

  • 2 spaces not tab
  • CamelCase
  • Local variables start with small letter
  • Global/member variables starts with capital letters
  • Use provided automatic formatter (Artistic Style) by invoking ./restyle

python code and API should follows PEP8 (many places should be fixed)

Address space and most protocol code are auto-generated and should not be modified directly. Every auto-generated file starts with a mention that it should not be edited. There's a lot of old hand written protocol code left that should use the auto-generated code. This is done by uncommenting struct names in schemas/generate_protocol.py and removing old code and files in src/protocol and include/opc/ua/protocol/