Description | OPC UA provides different mechanisms for clients to receive information, when some metadata has changed.
- NodeVersion and ModelChangeEvent provide information, when references are added or removed
- SemanticChangeEvents and SematicsChanged bit indicate, that metadata like EngineeringUnits have changed
- StructuredChanged bit indicates, that the DataType has changed
- We are just introducing a new feature to indicate constant values and a version number (see Mantis issue 6700)
It would be desirable to have an overview section on those concepts so client developers know what to do.
In addition, we currently have no mechanism to easily identify when the encoding of a DataType has changed. That means, either the Structure of a structured DataType is changing, or the Strings of an Enum. With the old DataTypeDictionary mechanism, there was at least an optional DataTypeVersion associated to a dictionary. The StructuedChanged bit does this (also see Mantis issue 7344) for individual values while subscribed, but this is not sufficient when the client has disconnected and cached the DataType information.
Possible solution:
We do have the NamespaceMetaData Object containing a NamespaceVersion and NamespacePublicationDate. Potentially we could use this and require it to be updated when the DataType itself is changing (for the same NodeId) – that seems at least reasonable to me.
In general, we have not defined when the NamespacePublicationDate needs to change. It comes from the NodeSet-File, and there obviously when the NodeSet-File changes it needs to be updated. But what about a dynamic Namespace (like the server diagnostics) where Nodes are coming and going?
We could define rules like: When the static NodeIds are changing (incl. any attribute except access rights), getting removed or added, NamespacePublicationDate needs to be updated, and in addition any change of the DataTypes (also for dynamic nodes). Not necessarily adding or removing some DataTypes, but required if same NodeId is reused. |
---|