02/24/2022
Hello!
I am new to OPC UA and I am looking for some more experienced input on how to set up a system.
Basically the plan is to have an OPC UA server that collects and provides data to clients and where the data updates get pushed to the server. We are currently trying to figure out what would be the best way to get the data updates into the server.
One possibility is to have OPC UA clients execute write requests to write the nodes that they have new information on. Now, some of these nodes (let us call them atomic update group) might have to be updated together in an all or none approach. I already read in another forum topic that creating structures/objects that are updated with one write request would be the way to go. However, this would limit the model design options and/or increase the amount of data that needs to be exchanged. E.g. in order to adjust two values in two different arrays of a bigger node structure then the client would have to first read that full structure before adjusting the values and then write the full structure again, right?
Since there is a way to execute a write request for multiple node-value pairs (which also supports writing parts of arrays): is there no way to request that all or none of these writes are executed? Why is the rollback the responsibility of the client?
PubSub is an option that we will look into, since it could make sense that the updates are broadcast and then read by the server and processed (updating the node values so that other, reading only, clients can access them), but currently I do not know a lot about.
Thank you for your opinions đŸ™‚
Carina
05/30/2017
Why is the rollback the responsibility of the client?
OPC is an API to a system/process. It is not a database. Many features that are easy to implement for UA servers with direct access to a database are impossible to implement in other UA servers. In particular, the read back and then write that you are trying to avoid would have to be done in many servers with the possibility that another client changed the value in the meantime. Making this behavior visible to the client means the client knows they have to deal with it.
You could also create methods to implement a atomic write across multiple nodes.
1 Guest(s)