foglamp / foglamp-south-opcua

FogLAMP OPC/UA South plugin: an asynchronous OPC UA plugin that registers for change events on OPC UA objects and injects data from the OPC/UA server into FogLAMP
Apache License 2.0
0 stars 0 forks source link

======================================================================== OPC UA C/C++ South plugin

A simple asynchronous OPC UA plugin that registers for change events on OPC UA objects.

NOTE:

This plugin assumes the freeopcua is available at a specified location in the file system, see below.

Configuration

This configuration of this plugin requires 3 parameters to be set

asset An asset name prefix that is added to the OPC UA variables retrieved from the OPC UA server

url The URL used to connect the server, of the form opc.tcp://:/...

subscribeById A toggle that determines of the subscriptions are to be treated as OPC UA node names or as browse names.

subscriptions An array of OPC UA node names that will control the subscription to variables in the OPC UA server.

If the subscribeById option is set then this is an array of node Id's. Each node Id should be of the form ns=..;s=... Where ns is a namespace index and s is the node id string identifier.

If the subscribeById option is not set then the array is an array of browse names. The array may be empty, in which case all variables are subscribed to in the server and will create assets in FogLAMP. Although simple subscribing to everything will return a lot of data that may not be of use. Alternatively a set of string may be give, the format of the strings is :. If the namespace is not requied then the name can simply be given. The plugin will traverse the node tree of the server and subscribe to all variables that live below the named nodes in the subscriptions array.

Configuration examples:

.. code-block:: console

{"subscriptions":["5:Simulation","2:MyLevel"]}
{"subscriptions":["5:Sinusoid1","2:MyLevel","5:Sawtooth1"]}
{"subscriptions":["2:Random.Double","2:Random.Boolean"]}

In the above examples

It's also possible to specify an empty subscription array:

.. code-block:: console

{"subscriptions":[]}

Note: depending on OPC UA server configuration (number of objects, number of variables) this empty configuration might take a while to be loaded.

Object names, variable names and NamespaceIndexes can be easily retrieved browsing the given OPC UA server using OPC UA clients, such as UaExpert

https://www.unified-automation.com/downloads/opc-ua-clients.html

As an examle the UA client shows:

.. code-block:: console

Node:

NodeId ns=5;s=85/0:Simulation
NodeClass [Object]
BrowseName 5:Simulation

Variables:

NodeId ns=5;s=Sinusoid1
NodeClass [Variable]
BrowseName 5:Sinusoid1

NodeId ns=2;s=MyLevel
NodeClass [Variable]
BrowseName 2:MyLevel

Most examples come from Object in ProSys OPC UA simulation server:

https://www.prosysopc.com/products/opc-ua-simulation-server/

Building freeopuca

To build freeopcua you must clone the freeopcua repository to a directory of your choice.

.. code-block:: console

$ git clone https://github.com/FreeOpcUa/freeopcua.git $ cd freeopcua $ export FREEOPCUA=pwd $ mkdir build

Edit the OPCUA CMakeFiles.txt file and find the line

.. code-block:: console

option(SSL_SUPPORT_MBEDTLS "Support rsa-oaep password encryption using mbedtls library " ON)

and set it to OFF.

.. code-block:: console

option(SSL_SUPPORT_MBEDTLS "Support rsa-oaep password encryption using mbedtls library " OFF)

.. code-block:: console

The build options for the OPCUA libraries must be changed to create static libraries. To do this find the occurences of the add_library directive for opcuaclient, opcuacode and opcuaprotocol and add the option STATIC to it

.. code-block:: console

add_library(opcuaclient STATIC ...

add_library(opcuacore STATIC ...

add_library(opcuaprotocol STATIC ...

.. code-block:: console

$ cd build $ cmake .. $ make

The freeopcua library requires boost libraries that are not available in packaged form for the Raspbery Pi. Therefore it can not be built for the Raspbery Pi without first building these boost libraries.

Alternatively run the script requirements.sh to automate this and place a copy of the freeopcua project in your home directory.

.. code-block:: console

requirements.sh

If you require to place the freeopcua code elsewhere you may pass the requirements.sh script an argument of a directory name to use.

.. code-block:: console

requirements.sh ~/projects

Build

To build the opcua plugin run the commands:

.. code-block:: console

$ mkdir build $ cd build $ cmake .. $ make

You may also pass one or more of the following options to cmake to override this default behaviour:

NOTE:

Examples: