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.

image005.png

Figure 2 – Example of ReferenceDescriptions

The following rules apply for using a ReferenceDescription.

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)).

image006.png

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.

image007.png

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).

image008.png

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.

image009.png

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