Parameters which hold array data that may be acquired during normal analyser operation or used as inputs (e.g. background, calibration) are represented by VariableTypes which are direct subtypes of DataItemType.

They inherit all of the Properties of the DataItemType. Also, they inherit a set o Attributes from the Variable NodeClass that are common to all derived VariableTypes. Refer to Table 113 for more information.

The decision to base the array types on the DataItemType rather than the AnalogItemType is to allow a modification of the StatusCode.SemanticsChanged. In the AnalogItemType, this bit is set if and only if a change occurs in one or several of the Properties InstrumentRange, EURange and EngineeringUnits. In the ADI array types; this bit changes if and only if a change occurs in one or several of the Properties InstrumentRange, EURange, EngineeringUnits and the axis definitions. This also allows the implementation of the type where the Value.DataType is not a subclass of Number like in the XYArrayItemType.

To simplify the development of ADI Clients/Servers, the Properties InstrumentRange, EURange and EngineeringUnits, that are part of the AnalogItemType definition, are reused with exactly the same semantic as in the AnalogItemType:

InstrumentRange defines the value range that can be returned by the instrument.

Example: InstrumentRange ::= {-9999.9, 9999.9}

The Range type is specified in [OPC 10000-8].

EURange defines the value range likely to be obtained in normal operation. It is intended for such use as automatically scaling a bar graph display.

Sensor or instrument failure or deactivation can result in a returned item value which is actually outside this range. Client software must be prepared to deal with this. Similarly a Client may attempt to write a value that is outside this range back to the Server. The exact behaviour (accept, reject, clamp, etc.) in this case is Server-dependent. However in general Servers must be prepared to handle this.

Example: EURange ::= {-200.0,1400.0}

EngineeringUnits specifies the units for the DataItem’s value (e.g., DEGC, hertz, seconds).

The EUInformation type is specified in [OPC 10000-8].

If the item contains an array the Properties will apply to all elements in the array.

(informative) – Events, Alarms and Conditions

This specification does not introduce any standard types of Events, Alarms or Conditions.

Transitions defined as part of the AnalyserDeviceStateMachineType, OperatingStateMachineType, their subtypes and sub-states shall produce events which are subtypes of TransitionEventType defined in [OPC 10000-5].

(informative) – Operation level result codes

Table 114 provides additional ADI-specific guidelines for interpretation of the Uncertain operation level result code defined in [OPC 10000-8].

Table 114 - Uncertain operation level result codes

Symbolic Id


Uncertain_ NoCommunicationLastUsable

Communication to the data source has failed. The Variable value is the last value that had a good quality and it is uncertain whether this value is still current.

The Server timestamp in this case is the last time that the communication status was checked. The time at which the value was last verified to be true is no longer available.

In ADI, this implies that the communication to the analyser has failed, but the Analyser Server is still active and communicating with its Clients. The Clients need updates, so the Server is responsible for maintaining the namespace and all the values.


Whatever was updating this value has stopped doing so. This happens when an input Variable is configured to receive its value from another Variable and this configuration is cleared after one or more values have been received.

This status/substatus is not used to indicate that a value is stale. Stale data can be detected by the Client looking at the timestamps.

In ADI, this differs from the Uncertain_NoCommunicationLastUsable code only in that is does not explicitly state that there is no communication. For some undetermined reason, the analyser can no longer update the values. In the case of spectrographic analysers, there may be a significant error in the model that stops the collection and analysis (too many bad scans, divide by zero exception in the math model, etc.).


The value is an operational value that was manually overwritten.

This value is a placeholder value that is set by the user when the instrument cannot collect or update the data.


The value is an initial value for a Variable that normally receives its value from another Variable. This status/substatus is set only during configuration while the Variable is not operational (while it is out-of-service).

In ADI, this bit is set for all Variables when the configuration is first loaded and started. The initial value is a preconfigured value defined when the instrument is first configured.


The value is at one of the sensor limits. The Limits bits define which limit has been reached. Also set if the device can determine that the sensor has reduced accuracy (e.g. degraded analyser), in which case the Limits bits indicate that the value is not limited.

In ADI, some internal diagnostic value in the analyser indicates that there is something inaccurate or untrustworthy in the data. For example, in FTIR, the interferogram peak center burst location or height may be beyond the acceptable threshold. Also, the internal temperature of the analyser may be out of specification. In both cases, spectra can be collected, but the accuracy of those spectra are in doubt.

Uncertain_ EngineeringUnitsExceeded

The value is outside of the range of values defined for this Parameter. The Limits bits indicate which limit has been reached or exceeded.

In ADI, there are multiple contexts where this code is applicable. In the instrument, it is possible that the analyser sensor or detector is close to saturated or overexposed. The analyser hardware itself is almost incapable of measuring the physical system, and thus any results from the analyser are untrustworthy. For example, if the detector saturates at 32767 counts, any readings over 28000 counts can be deemed uncertain. These limits are vendor specific.

Another example involves the mathematical modelling that occurs in the analysers. Analysers are typically calibrated and optimized to measure data and produce results in a particular range. If the inputs or calculated output exceeds that range, the validity of the mathematical calculations and results are uncertain.


The value is derived from multiple sources and has less than the required number of Good sources.

In the analyser, the data may be an accumulation or an averaging of many measurements. If any of those measurements is uncertain or bad, then the data is subnormal.

For example, spectra are typically a co-addition or an averaging of multiple scans of the system. It is possible that some, but not all of those scans, may be bad or unusable. A few unusable scans will not prevent the system from collecting and processing the data. However, the fact that some bad scans exist should not be ignored either. If the number of bad scans exceeds a vendor defined threshold, then the data is subnormal.

(informative) – ADI address space

This annex is intended to provide some guidelines on how to design the address space of an Analyser Server. It covers the following topics:

  • Main questions to answer before starting the address space design
  • Configuration process
  • Parameter definition
  • OPC UA key elements
  • General rules

This annex should be used as a check list of points to address during the design and the source of description of the rationale behind some elements of the ADI specification. The annex is written in the FAQ format.