This standard defines ReferenceTypes as an inherent part of the OPC UA Address Space Model. Figure 33 informally describes the hierarchy of these ReferenceTypes. Other parts of this series of standards may specify additional ReferenceTypes. The remainder of 7 defines the ReferenceTypes. OPC 10000-5 defines their representation in the AddressSpace.
Figure 33 – Standard ReferenceType Hierarchy
The References ReferenceType is an abstract ReferenceType; only subtypes of it can be used.
There is no semantic associated with this ReferenceType. This is the base type of all ReferenceTypes. All ReferenceTypes shall be a subtype of this base ReferenceType – either direct or indirect. The main purpose of this ReferenceType is allowing simple filter and queries in the corresponding Services of OPC 10000-5.
There are no constraints defined for this abstract ReferenceType.
The HierarchicalReferences ReferenceType is an abstract ReferenceType; only subtypes of it can be used and they shall be a non-symmetric Reference.
The semantic of HierarchicalReferences is to denote that References of HierarchicalReferences span a hierarchy. It means that it may be useful to present Nodes related with References of this type in a hierarchical-like way. HierarchicalReferences does not forbid loops. For example, starting from Node “A” and following HierarchicalReferences it may be possible to browse to Node “A”, again.
It is not permitted to have a Property as SourceNode of a Reference of any subtype of this abstract ReferenceType.
It is not allowed that the SourceNode and the TargetNode of a Reference of the ReferenceType HierarchicalReferences are the same, that is, it is not allowed to have self-references using HierarchicalReferences.
The NonHierarchicalReferences ReferenceType is an abstract ReferenceType; only subtypes of it can be used.
The semantic of NonHierarchicalReferences is to denote that its subtypes do not span a hierarchy and should not be followed when trying to present a hierarchy. To distinguish Hierarchical and NonHierarchical References, all concrete ReferenceTypes shall inherit from either hierarchical References or Non-hierarchical References, either direct or indirect.
There are no constraints defined for this abstract ReferenceType.
The HasChild ReferenceType is an abstract ReferenceType; only subtypes of it can be used. It is a subtype of HierarchicalReferences.
The semantic is to indicate that References of this type span a non-looping hierarchy.
Starting from Node “A” and only following References of the subtypes of the HasChild ReferenceType it shall never be possible to return to “A”. But it is allowed that following the References there may be more than one path leading to another Node “B”.
The Aggregates ReferenceType is an abstract ReferenceType; only subtypes of it can be used. It is a subtype of HasChild.
The semantic is to indicate a part (the TargetNode) belongs to the SourceNode. It does not specify the ownership of the TargetNode.
There are no constraints defined for this abstract ReferenceType.
The HasComponent ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the Aggregates ReferenceType.
The semantic is a part-of relationship. The TargetNode of a Reference of the HasComponent ReferenceType is a part of the SourceNode. This ReferenceType is used to relate Objects or ObjectTypes with their containing Objects, DataVariables, and Methods. This ReferenceType is also used to relate complex Variables or VariableTypes with their DataVariables.
Like all other ReferenceTypes, this ReferenceType does not specify anything about the ownership of the parts, although it represents a part-of relationship semantic. That is, it is not specified if the TargetNode of a Reference of the HasComponent ReferenceType is deleted when the SourceNode is deleted.
The TargetNode of this ReferenceType shall be a Variable, an Object or a Method.
If the TargetNode is a Variable, the SourceNode shall be an Object, an ObjectType, a DataVariable or a VariableType. By using the HasComponent Reference, the Variable is defined as DataVariable.
If the TargetNode is an Object or a Method, the SourceNode shall be an Object or ObjectType.
The HasProperty ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the Aggregates ReferenceType.
The semantic is to identify the Properties of a Node. Properties are described in 4.5.2.
The SourceNode of this ReferenceType can be of any NodeClass. The TargetNode shall be a Variable. By using the HasProperty Reference, the Variable is defined as Property. Since Properties shall not have Properties, a Property shall never be the SourceNode of a HasProperty Reference.
The HasOrderedComponent ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the HasComponent ReferenceType.
The semantic of the HasOrderedComponent ReferenceType – besides the semantic of the HasComponent ReferenceType – is that when browsing from a Node and following References of this type or its subtype all References are returned in the Browse Service defined in OPC 10000-4 in a well-defined order. The order is Server-specific, but the Client can assume that the Server always returns them in the same order.
There are no additional constraints defined for this ReferenceType.
The HasSubtype ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the HasChild ReferenceType.
The semantic of this ReferenceType is to express a subtype relationship of types. It is used to span the ReferenceType hierarchy, whose semantic is specified in 5.3.3.3; a DataType hierarchy is specified in 5.8.3, and other subtype hierarchies are specified in Clause 6.
The SourceNode of References of this type shall be an ObjectType, a VariableType, a DataType or a ReferenceType and the TargetNode shall be of the same NodeClass as the SourceNode. Each ReferenceType shall be the TargetNode of at most one Reference of type HasSubtype.
The Organizes ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of HierarchicalReferences.
The semantic of this ReferenceType is to organise Nodes in the AddressSpace. It can be used to span multiple hierarchies independent of any hierarchy created with the non-looping Aggregates References.
The SourceNode of References of this type shall be an Object, ObjectType or a View. If it is an Object then it should be an Object of the ObjectType FolderType or one of its subtypes (see 5.5.3).
The TargetNode of this ReferenceType can be of any NodeClass.
The HasModellingRule ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of NonHierarchicalReferences.
The semantic of this ReferenceType is to bind the ModellingRule to an Object, Variable or Method. The ModellingRule mechanisms are described in 6.4.4.
The SourceNode of this ReferenceType shall be an Object, Variable or Method. The TargetNode shall be an Object of the ObjectType “ModellingRule” or one of its subtypes.
Each Node shall be the SourceNode of at most one HasModellingRule Reference.
The HasTypeDefinition ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of NonHierarchicalReferences.
The semantic of this ReferenceType is to bind an Object or Variable to its ObjectType or VariableType, respectively. The relationships between types and instances are described in 4.6.
The SourceNode of this ReferenceType shall be an Object or Variable. If the SourceNode is an Object, then the TargetNode shall be an ObjectType; if the SourceNode is a Variable, then the TargetNode shall be a VariableType.
Each Variable and each Object shall be the SourceNode of exactly one HasTypeDefinition Reference.
The HasEncoding ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of NonHierarchicalReferences.
The semantic of this ReferenceType is to reference DataTypeEncodings of a subtype of the Structure DataType.
The SourceNode of References of this type shall be a subtype of the Structure DataType.
The TargetNode of this ReferenceType shall be an Object of the ObjectType DataTypeEncodingType or one of its subtypes (see 5.8.4).
The GeneratesEvent ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of NonHierarchicalReferences.
The semantic of this ReferenceType is to identify the types of Events instances of ObjectTypes or VariableTypes may generate and Methods may generate on each Method call.
The SourceNode of References of this type shall be an ObjectType, a VariableType or a Method InstanceDeclaration.
The TargetNode of this ReferenceType shall be an ObjectType representing EventTypes, that is, the BaseEventType or one of its subtypes.
The AlwaysGeneratesEvent ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of GeneratesEvent.
The semantic of this ReferenceType is to identify the types of Events Methods have to generate on each Method call.
The SourceNode of References of this type shall be a Method InstanceDeclaration.
The TargetNode of this ReferenceType shall be an ObjectType representing EventTypes, that is, the BaseEventType or one of its subtypes.
The HasEventSource ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of HierarchicalReferences.
The semantic of this ReferenceType is to relate event sources in a hierarchical, non-looping organization. This ReferenceType and any subtypes are intended to be used for discovery of Event generation in a Server. They are not required to be present for a Server to generate an Event from its source (causing the Event) to its notifying Nodes. In particular, the root notifier of a Server, the Server Object defined in OPC 10000-5, is always capable of supplying all Events from a Server and as such has implied HasEventSource References to every event source in a Server.
The SourceNode of this ReferenceType shall be an Object or View that is a source of Event Subscriptions. A source of Event Subscriptions is an Object or View that has its “SubscribeToEvents” bit set within the EventNotifier Attribute. The SourceNode may also be an ObjectType when referencing an InstanceDeclaration where an instance of the ObjectType containing the InstanceDeclaration generates events. Note the ObjectType is not considered a source of Event Subscriptions.
The TargetNode of this ReferenceType can be a Node of any NodeClass that can generate event notifications via a subscription to the reference source.
Starting from Node “A” and only following References of the HasEventSource ReferenceType or of its subtypes it shall never be possible to return to “A”. But it is permitted that, following the References, there may be more than one path leading to another Node “B”.
The HasNotifier ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of HasEventSource.
The semantic of this ReferenceType is to relate Object Nodes that are notifiers with other notifier Object Nodes. The ReferenceType is used to establish a hierarchical organization of event notifying Objects. It is a subtype of the HasEventSource ReferenceType defined in 7.16.
The TargetNode of this ReferenceType shall be Objects that are a source of Event Subscriptions.
If the TargetNode of a Reference of this type generates an Event, then this Event shall also be provided in the SourceNode of the Reference.
An example of a possible organization of Event References is represented in Figure 34. In this example an unfiltered Event subscription directed to the “Pump” Object will provide the Event sources “Start” and “Stop” to the subscriber. An unfiltered Event subscription directed to the “Area 1” Object will provide Event sources from “Machine B”, “Tank A” and all notifier sources below “Tank A”.
Figure 34 – Event Reference Example
A second example of a more complex organization of Event References is represented in Figure 35. In this example, explicit References are included from the Server’s Server Object, which is a source of all Server Events. A second Event organization has been introduced to collect the Events related to “Tank Farm 1”. An unfiltered Event subscription directed to the “Tank Farm 1” Object will provide Event sources from “Tank B”, “Tank A” and all notifier sources below “Tank B” and “Tank A”.
Figure 35 – Complex Event Reference Example
The HasInterface ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of the NonHierarchical ReferenceType.
The semantic of this ReferenceType is to show the availability of the Interface on the SourceNode. The Interface concept is described in 4.10.2.
The SourceNode of this ReferenceType shall be an Object or ObjectType. Interfaces shall not be a SourceNode. The TargetNode shall be of a subtype of the BaseInterfaceType.
One SourceNode can refer to multiple Interfaces.
The HasAddIn ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of the HasComponent ReferenceType.
The semantic of this ReferenceType is to bind an AddIn to another Node that is the source of this Reference. The AddIn concept is described in 4.10.3.
The SourceNode of this ReferenceType shall be an Object or ObjectType. The TargetNode shall be an Object.
One SourceNode can refer to multiple AddIns.
The IsDeprecated ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of the NonHierarchicalReferences ReferenceType.
The semantic of this ReferenceType is to indicate that a Node has been deprecated from an information model.
The SourceNode of this ReferenceType shall be a Node of any NodeClass. The TargetNode shall be an Object which represents the information model version where the Node was first deprecated. The DisplayName and Description of the TargetNode should suggest the information model version and other suggestions.
The HasStructuredComponent ReferenceType is a concrete ReferenceType and can be used directly. It is a subtype of the HasComponent ReferenceType.
The semantic of this ReferenceType is to indicate that a VariableType or Variable also exposes its Structure fields or Array elements as Variables in the information model.
The SourceNode of this ReferenceType shall be a VariableType or a Variable having a Structure DataType.
When the Value of the SourceNode is a scalar then the TargetNode shall be a Variable which represents a field of the Structure DataType. The BrowseName of a DataVariable which is exposed shall be the same as the field name of the Structure DataType. The NamespaceIndex of the BrowseName shall be the same as the NamespaceIndex of the Structure DataType which first defines the field. The exposed fields shall be the same DataType and ValueRank as the field in the Structure. The Value is expected to represent the value of the Structure’s field.
When the Value of the SourceNode is an array then the BrowseName of the TargetNode shall be <V[N]> where ‘V’ is the BrowseName of the Parent Node and ‘N’ shall be the array index number. The NamespaceIndex of the BrowseName shall be the same as the NamespaceIndex of the DataType which first defines the field. For multidimensional arrays the BrowseName shall be <V[M][N][…]>. The Value is expected to represent the value of the array index which the BrowseName describes. An example of this is shown in Figure 36. In this example ‘MyStructuredVariable’ has a Structure DataType with 2 fields, ‘FieldX’ and ‘FieldY’ and an array size of 2.
Figure 36 – Example of using HasStructuredComponent ReferencyType
The ReferenceType HasStructuredComponent can be used to expose the entries of a multi-dimensional array of a Variable as subvariables. The same is true for the ModellingRule ExposesItsArray. However, both concepts handle this differently, as described in this section.
Using the HasStructuredComponent ReferenceType, the BrowseName of the subvariable is defined and reflects the place in the array. That is, if the order in the array is changing, e.g. by deleting the first entry, the values of the correponding subvariables change, and the subvariable with the highest index is removed. When subscribing to a subvariable, the Client always get the value assigned to the place in the array. The same behaviour can be achieved when subscribing to the corresponding IndexRange on the parent Variable.
Using the ExposesItsArray ModellingRule, the BrowseName of the subvariables are not defined and do not reflect the place in the array. That is, if the order in the array is changing, e.g. by deleting the first entry, the values of the corresponding subvariables do not change, and the subvariable containing the first entry is removed. When subscribing to a subvariable, the order of the array is not considered. Even if the order is changing, the Client subscribing to the subvariable will observe the original subscribed content.
In Figure 37, an example is given, visualizing the differences. VariableA uses HasStructuredComponent. When the first entry in the array is deleted, the Values of the Variables representing the first and second entry are changed accordingly, and the third Variable is deleted.
VariableB uses ExposesItsArray. When the first entry in the array is deleted, the values of the Variables originally representing the second and third entry of the array do not change, but the Variable representing the first entry is deleted.
Figure 37 – Difference between HasStructuredComponent and ExposesItsArray
The AssociatedWith ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the NonHierarchicalReferences ReferenceType. The AssociatedWith reference is symmetric and has no InverseName.
The semantic of this ReferenceType is to provide some generic association between two Objects.
The SourceNode and TargetNode of References of this type shall be Objects.