ADI Model Deployment
Taking into consideration that the browse mechanism is based on the incremental and relative passage along a nodes path, we can easily find out that each path must have a defined entry point, so we must address a question where to start. To meet this requirement, the OPC UA Specifications provide a predefined structure  containing well defined nodes that can be used as anchors to start discovering the Address Space by clients.
For the above example, a typical organization of the UA Server Address Space seen by a client is presented in Figure 2. Two objects can be distinguished in this hierarchy: Objects and
DeviceSet. The purpose of the Objects is that all objects and variables that are not used for type definitions or other organizational purposes (e.g. organizing the Views) are accessible through hierarchical references starting from this node.
DeviceSetis an object containing all the devices according to the DI Information Model specification .
To locate an object in the nodes layout presented in Figure 2, a
HasComponentreference must be added to the object FT-IR spectrometer simulator (Figure 1). The
HasComponentreferences are used to browse the Address Space from the top toward the bottom, but it is worth noting that in the model this reference is added to the destination node instead (Figure 1). The main reason is to keep the DI model representation invariant. The reference must be added at some point in time during the design phase, i.e. before the Address Space is instantiated. It is one of the main reasons why we need an independent view of the Information Model (planet) and Address Space (created).
The Address Space content exposed by the UA Server can change in time reflecting any change of the underlying process. A good example, where the dynamic content of the Address Space is very useful, is hot-swappable device modules, like accessories. In this case the server must be able to discover the current configuration and instantiate/delete nodes and/or references according to this configuration.
As it was stated above, to create the Address Space, the UA Server needs to instantiate nodes and interconnect them by References. According to the specification requirements, to create the Address Space, any UA Server must instantiate all mandatory objects that organize the Address Space and can be used as entry points to start browsing and discovering it. One of them is Objects (Figure 2) that is the server browse entry point for objects.
Figure 3 Solution concept
Having all objects organizing the Address Space, the UA Server creates instance of objects declared by the custom information model. In the above sample model, the server instantiates FT-IR spectrometer simulator as a component of the
DeviceSetdefined in the
Figure 4 SpectrometerDeviceType inheritance hierarchy
After parent type instantiation, the server creates also all components of that type and all its base type components called instance declaration. This operation is applied recursively. In other words, in order to get full information about a subtype, the inherited instance declarations shall be collected from all types that can be found by recursively following the inverse
HasSubtypereferences from the subtype. For the above example, the nodes under the FT-IR spectrometer simulator are a collection of all components (coupled by
HasComponentreference to the type) traversing the inheritance chain Figure 4:
The newly created nodes have the same value of the
BrowseNameattribute as in the type definition. Since
BrowseNamevalues shall be unique in the context of the parent type definition, the new nodes may be created without any fear of breaking the browse path uniqueness rules. This browse path is always unique, because the
BrowseNameof the created main object must be unique in the context it is located in and all instance declarations shall have unique
BrowseNamevalues in the context of types they are defined by. More detailed discussion on the instance declaration concept can be found in the section Custom Models - Boiler.
Figure 5 FTNIR Address Space
The inheritance mechanism and automatic creation of instance declaration cause that the objects in the Address Space exposed by the UA Server may have more components then their type definition. An example is the
FTNIR_Simulatorobject (labeled FT-IR spectrometer simulator in Figure 5) with the
DisplayNamefrom the attribute of type
SpectrometerDeviceType. The type has only two components:
FactorySettings, but in the exposed Address Space fragment (Figure 5), the other nodes (except
Channel2) are created because they are defined as components in one of the basic types making up the inheritance hierarchy (Figure 4).
The instantiation process may be modified by overriding the already defined components in the derived types and by adding new components manually.
Channel2are added to the definition of the
FTNIR_Simulatorobject (Figure 5).
AnalyserChannelType. All are defined as components of the
AnalyserDeviceType. The definition of the
AnalyserDeviceTypeallows designers to add as many components of the
AnalyserChannelTypeto the created object as it is necessary to represent the structure of an existing analyzer.
AnalyserDeviceTypedefines cardinality 1..* for the channel meta-definition and, therefore, it imposes a limitation that at least one channel must be created. Components of the
AnalyserChannelTypeare an example where the basic ADI Information Model must be customized to converge the Address Space with the represented underlying environment.
HardwareRevision(Figure 5) are inherited from the
DeviceTypedefined by the DI Information Model. Values of these properties can be defined as default values in the model or provided by the equipment at run-time.
A very important
AnalyserStateMachinecomponent of the FT-IR spectrometer simulator is inherited from
AnalyserStateMachineis an object that represents behavior of the analyzer device using the state machine concept. This construct can be used to model discrete object behavior in terms of the states an object can reside in and transitions that can happen between those states. State machines are built as complex objects using dedicated
ReferenceTypes, whose semantics is governed by the rules that must be strictly observed. A state is a condition in which an object can be at some point during its lifetime, for some finite amount of time. A transition is a change of an object from one state (the source state) to another (the target state). The transition is triggered ("fires") when an event of interest - cause - to a given object occurs. According to the Information Model concept, causes are represented in the form of Methods that shall be called, but a vendor can define other items or have them be internal (i.e. nothing is listed causing the transition). There may also be an action associated with a triggered transition. This action is executed unconditionally before the object enters the target state and effects in the form of Events that are generated.
AnalyserDeviceTypeis also a source of definition of the Methods exposed by the UA Server (Figure 5). All the methods are collected as components of the