dynamically added nodes disapears after reboot in UaExpert

Questions regarding the use of the C++ SDK for Server or Client development or integration into customer products ...

Moderator: uasdkcpp

Post Reply
Full Member
Full Member
Posts: 5
Joined: 22 Jul 2016, 12:46

dynamically added nodes disapears after reboot in UaExpert

Post by SvenPC »

Using C++ OPCUA SDK V1.7.4
OPCUA Server as Windows application
UaExpert as OPCUA Client

Adding additional OPCUA nodes or namespace after starting the OPCUA server via UaServerApplication->start()

How to reproduce
- Starting OPCUA server an wait until all nodes are added
- Start UaExpert and connect to the OPCUA server
- Add OPCUA nodes or add a node manager after you have called UaServerApplication->start()
- use one of the added nodes in UaExpert in "Data Access View"
- Reboot the OPCUA server
- in the moment when UaServerApplication->start() is called the variable disapears in UaExpert
- in the UaExpert and Wireshark you can see BadNodeIdUnknown

- Other OPCUA Clients shows the same behaviour.

- Is it really necessary to have all OPCUA nodes created before UaServerApplication->start() is called?
- Is there any way to avoid blocking the dynamically added OPCUA nodes by OPCUA clients?


User avatar
Support Team
Hero Member
Hero Member
Posts: 2666
Joined: 18 Mar 2011, 15:09

Re: dynamically added nodes disapears after reboot in UaExpert

Post by Support Team »

Hello SvenPC,

The monitoredItemCreateResults of the Node is BadNodeIdUnknown (The node id refers to a node that does not exist in the server address space.).

If a node does not exist in the server, any access (Read, CreateMonitoredItems) returns an error (BadNodeIdUnknown).

The UaExpert tries to re-create monitored items at reconnect (e.g. if you restarted the server) and removes the items from the Data Access View if the server returns an error that indicates that the node does not exist (BadNodeIdUnknown).

The problem seems to be that your server is still adding nodes after start-up and if UaExpert reconnects, sometimes the nodes do already exist and sometimes they do not exist. This can lead to the result.

If it takes some time to create all nodes during the start-up of the server, you should not allow client connections until all nodes are created.
The easiest option is to block NodeManager::afterStartUp until all initial nodes are created. This makes sure the server endpoints are not opened and clients are not able to connect.

If nodes are added/removed later and you cannot wait until all nodes are created, the seen behavior cannot be changed.
A client that is configured to use NodeIds would retry until it is stopped or it is not able to access the node.

In void MyServerCallback::afterNodeManagersStarted()
Please, check how long it takes to create all the initial nodes, then sleep for the same amount of time.
Best regards
Unified Automation Support Team

Post Reply