.NET Based OPC UA Client/Server SDK  3.2.3.527
Options for Data Integration

Overview

In order to integrate application-specific data into your OPC UA server implementation you need to provide a NodeManager implementation. Typically, a server implementation uses several NodeManager implementations. For example, one NodeManager implementation may provide the nodes of a standardized information model, another accesses the configuration database of your product, and several instances of another NodeManager implementation access individual data sources (like PLCs of field devices) of the same type.

Options

In order to implement a NodeManager you can either implement the interfaces of the SDK layer (see SDK Layer) or use toolkit functionality (see Toolkit).

In general, using the toolkit is less development effort and less error-prone, as the OPC UA functionality is mainly already implemented by the toolkit. The OPC UA nodes are managed in main memory.

Sometimes, depending on the data source, the toolkit implementation cannot be used (e.g., the structure of OPC UA nodes is dynamic and cannot by synced) or leads to problems (e.g. the synchronization effort of dynamic nodes is very high or there is restricted main memory and therefore the potentially large amount of OPC UA nodes cannot be managed in main memory). In this case, you need to implement the SDK layer interfaces.

The decision, which path to choose, can be made per NodeManager. That is, some NodeManagers may use the toolkit functionality, whereas others just implement the SDK layer. This is also true for other interfaces of the SDK layer. A NodeManager points per Variable to an IOManager managing the data of the Variable. Using the toolkit-base NodeManager, you can use for some Variables the toolkit-based IOManager and for others your own implementation of the IOManager interface.

Variations using the toolkit for data integration

When using the toolkit for data integration, your NodeManager is derived from the BaseNodeManager. To create nodes in your implementation, you can

  • Create nodes based on a NodeSet-File (ImportUaNodeset). Such files can be standardized information models, or your own nodes defined with the UaModeler. Typically, such nodes are mainly type definitions and not instances, but it is possible to create instances with this as well.
  • Create nodes using helper functions of the toolkit (Create<NodeClass> methods). Those methods take the type information into account and automatically create the mandatory sub-nodes.
  • Call the AddNode services (with internal client).

After the creation of the nodes, you need to implement the data binding (see Toolkit).

You can just implement the corresponding methods for the data binding, or use classes generated by the UaModeler.