OPC UA relates Nodes using References. This concept is intentionally a simple construct, where the only information of a Reference is the SourceNode, the TargetNode, the ReferenceType and for asymmetric ReferenceTypes the direction (forward or inverse).
Sometimes, it is desirable to add more information to such a Reference. The concept of a ReferenceDescription keeps the simple Reference unchanged, and creates a Variable which is used to add more information about the Reference. Such a Variable can be referenced from the SourceNode and / or the TargetNode of such a Reference. Potentially, it can also be referenced by other Nodes to provide additional information (see also 5.2). As Nodes can have several References, each ReferenceDescription Variable contains the unique definition of one Reference. An example is given in Figure 2. ObjectA references ObjectB and ObjectC, each using the ReferenceType SomeReferenceType. Both References are described by a ReferenceDescription, that is, the Variables SomeReferenceType1 and SomeReferenceType2. The Values of those Variables uniquely identify the References by providing SourceNode, TargetNode, ReferenceType and direction. In the example, both ReferenceDescriptions have a Property with additional information, one called AdditionalInformationABC and the other AdditionalInformationXYZ.
Figure 2 – Example of ReferenceDescriptions
The following rules apply for using a ReferenceDescription.
- A ReferenceDescription Variable shall be of VariableType ReferenceDescriptionVariableType (see 5.3.1) or a subtype.
- The ReferenceDescription Variable shall exist only in addition to the Reference it describes.
- The Server shall expose the Reference in the direction described in the ReferenceDescription, i.e. if it is described as inverse, the inverse Path shall be browsable.
- The SourceNode defined in the Value shall reference the ReferenceDescription Variable using the HasReferenceDescription ReferenceType (see 5.4.1) or a subtype. The TargetNode and potentially other Nodes might reference the ReferenceDescription Variable using the HasReferenceDescription ReferenceType.
- The BrowseName of a ReferenceDescription Variable should be the BrowseName of the ReferenceType, or in case of ambiguities, prefixed with the BrowseName of the ReferenceType followed by a suffix making the BrowseName unique in that context. In case of an inverse Reference (IsForward set to FALSE), the BrowseName should be prefixed with the BrowseName of the ReferenceType, followed by “Inverse”, and potentially followed by a suffix making the BrowseName unique in that context. Clients shall not make assumptions about the BrowseName and therefore should use for the ReferenceType and/or VariableType to receive ReferenceDescription Variables, not the BrowseName.
- For each unique Reference (SourceNode, ReferenceType, IsForward, TargetNode) there shall be at most one ReferenceDescription Variable. The same Reference might be exposed two times by switching SourceNode and TargetNode and, in case of asymmetric References, inverting IsForward. In case of symmetric References, the IsForward is always set to TRUE.
Sometimes, a high-level Reference might be refined by more fine granular References, including a more detailed path. For example, DeviceA controls DeviceB (see Figure 3, A)). This might be refined, exposing what network equipment is used for the communication (see Figure 3, B)), and further refined by exposing, which ports are used (see Figure 3, C)). Alternatively, it might directly be refined with ports and switches (see Figure 3, D)).
Figure 3 – Examples of Reference Refinements
Without providing Reference refinement, there may be multiple paths possible (e.g., several switches, see Figure 4), and thus it is not clear which path the high-level Reference is using at any given instance in time.
Figure 4 – Example of Reference Refinements with multiple path options
Therefore, the Property ReferenceRefinement is defined for the ReferenceDescriptionVariableType (see 5.3.1) allowing to make the refined References explicit. In Figure 5, an example is given. The ReferenceDescription Variable containing the refinement can be referenced by any Node in the refinement path using the HasReferenceDescription ReferenceType to expose the information (see Figure 5).
Figure 5 – Example of how to use Reference Refinements
When multiple levels are addressed, each ReferenceDescription Variable only contains one level, as shown in Figure 6. The “Controls” Variable only contains the first level, via the Switch. The “ConnectedTo1” and “ConnectedTo2” Variables further refine the References used in the first refinement level. Both contain multiple hops in one refinement. In the example, the Nodes used in the refinement of “ConnectsTo1” do reference the ReferenceDescription Variable, whereas for “ConnectsTo2” they do not. Both options are allowed.
Figure 6 – Example of how to use Reference Refinements with two Levels and Multiple Hops
Note that the ReferenceRefinement intentionally only defines one refinement path (of potentially many possible paths between the Nodes). If the path used changes, the ReferenceRefinement needs to change.
The ReferenceDescriptionVariableType is a subtype of the BaseDataVariableType. It is used as container to expose additional information of a Reference. The Value contains the description of the Reference the Variable represents.
The Reference as defined in the Value shall be exposed in the OPC UA Server containing the Variable. The IsForward field in the Value indicates the browsable direction of the Reference. It is not required that the opposite direction is browsable. The VariableType is formally defined in Table 14.
Table 14 – ReferenceDescriptionVariableType Definition
Attribute |
Value |
|||||
BrowseName |
ReferenceDescriptionVariableType |
|||||
IsAbstract |
FALSE |
|||||
ValueRank |
−1 (−1 = Scalar) |
|||||
DataType |
ReferenceDescriptionDataType |
|||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
Other |
|
Subtype of the BaseDataVariableType defined in OPC 10000-5 |
||||||
HasProperty |
Variable |
ReferenceRefinement |
ReferenceListEntryDataType[] |
PropertyType |
O |
|
Conformance Units |
||||||
Base Info ReferenceDescription |
The optional Property ReferenceRefinement contains an array of References refining the original Reference represented by an instance of ReferenceDescriptionVariableType. Each entry in the array contains the ReferenceType, direction and TargetNode. The SourceNode of the first entry in the array is the SourceNode of the Value of the instance of ReferenceDescriptionVariableType. The SourceNode of all other entries is the TargetNode of the previous entry. The TargetNode of the last entry shall be the TargetNode of the instance of ReferenceDescriptionVariableType.
The HasReferenceDescription is a concrete ReferenceType and can be used directly. It is a subtype of HasChild.
The semantic of this ReferenceType is to link to a ReferenceDescription either from a Node directly participating in the Reference that is described in the ReferenceDescription (as SourceNode or TargetNode), or from a Node somehow related to the Reference that is described (e.g. in the refinement of the Reference (being part of the refinement path)).
The SourceNode of References of this type can be of any NodeClass.
The TargetNode of this ReferenceType shall be a Variable of VariableType ReferenceDescriptionVariableType or one of its subtypes.
The HasReferenceDescription is formally defined in Table 15.
Table 15 – HasReferenceDescription Definition
Attributes |
Value |
||
BrowseName |
HasReferenceDescription |
||
InverseName |
ReferenceDescriptionOf |
||
Symmetric |
FALSE |
||
IsAbstract |
FALSE |
||
References |
NodeClass |
BrowseName |
Comment |
Subtype of HasChild defined in OPC 10000-5 |
|||
Conformance Units |
|||
Base Info ReferenceDescription |
This structure contains the description of a Reference. The structure is defined in Table 16.
Table 16 – ReferenceDescriptionDataType Structure
Name |
Type |
Description |
ReferenceDescriptionDataType |
structure |
|
SourceNode |
NodeId |
The SourceNode of the Reference. |
ReferenceType |
NodeId |
The ReferenceType of the Reference. |
IsForward |
Boolean |
The direction of the Reference. If TRUE in forward direction, if FALSE in inverse direction. For symmetric References it shall always be set to TRUE. |
TargetNode |
ExpandedNodeId |
The TargetNode of the Reference. |
Its representation in the AddressSpace is defined in Table 17.
Table 17 – ReferenceDescriptionDataType Definition
Attribute |
Value |
|||||
BrowseName |
ReferenceDescriptionDataType |
|||||
IsAbstract |
FALSE |
|||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
Other |
|
Subtype of Structure defined in OPC 10000-5 |
||||||
Conformance Units |
||||||
Base Info ReferenceDescription |
This structure contains the description of a Reference without SourceNode. It can be used to list a path of References without repeating the SourceNode, like in the ReferenceRefinement Property in 5.3.1. The structure is defined in Table 18.
Table 18 – ReferenceListEntryDataType Structure
Name |
Type |
Description |
ReferenceListEntryDataType |
structure |
|
ReferenceType |
NodeId |
The Node Id of the ReferenceType used as Reference. |
IsForward |
Boolean |
The direction of the Reference, if TRUE in forward direction, if FALSE, in inverse direction. For symmetric references it shall always be set to TRUE. |
TargetNode |
ExpandedNodeId |
The TargetNode of the Reference. |
Its representation in the AddressSpace is defined in Table 19.
Table 19 – ReferenceListEntryDataType Definition
Attribute |
Value |
|||||
BrowseName |
ReferenceListEntryDataType |
|||||
IsAbstract |
FALSE |
|||||
References |
NodeClass |
BrowseName |
DataType |
TypeDefinition |
Other |
|
Subtype of Structure defined in OPC 10000-5 |
||||||
Conformance Units |
||||||
Base Info ReferenceDescription |